debugshell.py
58 lines
| 1.3 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 | ||||
Gregory Szorc
|
r27721 | from mercurial import ( | ||
cmdutil, | ||||
demandimport, | ||||
) | ||||
Gregory Szorc
|
r21243 | |||
cmdtable = {} | ||||
command = cmdutil.command(cmdtable) | ||||
Vishakh H
|
r11633 | |||
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() | ||||
Gregory Szorc
|
r21243 | @command('debugshell|dbsh', []) | ||
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: | ||||
Gregory Szorc
|
r27721 | with demandimport.deactivated(): | ||
__import__(pdbmap[debugger]) | ||||
Sean Farley
|
r19773 | 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) | ||||