debugshell.py
53 lines
| 1.2 KiB
| text/x-python
|
PythonLexer
/ contrib / debugshell.py
Vishakh H
|
r11633 | # debugshell extension | ||
"""a python shell with repo, changelog & manifest objects""" | ||||
Sean Farley
|
r19773 | import sys | ||
Vishakh H
|
r11633 | import mercurial | ||
import code | ||||
Sean Farley
|
r19771 | def pdb(ui, repo, msg, **opts): | ||
Vishakh H
|
r11633 | objects = { | ||
'mercurial': mercurial, | ||||
'repo': repo, | ||||
'cl': repo.changelog, | ||||
'mf': repo.manifest, | ||||
} | ||||
Sean Farley
|
r19771 | |||
code.interact(msg, local=objects) | ||||
Sean Farley
|
r19772 | def ipdb(ui, repo, msg, **opts): | ||
import IPython | ||||
cl = repo.changelog | ||||
mf = repo.manifest | ||||
Matt Mackall
|
r19794 | cl, mf # use variables to appease pyflakes | ||
Sean Farley
|
r19772 | |||
IPython.embed() | ||||
Sean Farley
|
r19771 | def debugshell(ui, repo, **opts): | ||
Vishakh H
|
r11633 | bannermsg = "loaded repo : %s\n" \ | ||
"using source: %s" % (repo.root, | ||||
mercurial.__path__[0]) | ||||
Sean Farley
|
r19771 | |||
Sean Farley
|
r19773 | pdbmap = { | ||
'pdb' : 'code', | ||||
'ipdb' : 'IPython' | ||||
} | ||||
debugger = ui.config("ui", "debugger") | ||||
if not debugger: | ||||
debugger = 'pdb' | ||||
# if IPython doesn't exist, fallback to code.interact | ||||
try: | ||||
__import__(pdbmap[debugger]) | ||||
except ImportError: | ||||
ui.warn("%s debugger specified but %s module was not found\n" | ||||
% (debugger, pdbmap[debugger])) | ||||
debugger = 'pdb' | ||||
getattr(sys.modules[__name__], debugger)(ui, repo, bannermsg, **opts) | ||||
Vishakh H
|
r11633 | |||
cmdtable = { | ||||
"debugshell|dbsh": (debugshell, []) | ||||
} | ||||