##// END OF EJS Templates
pyoxidizer: re-install PYTHONPATH behavior...
pyoxidizer: re-install PYTHONPATH behavior Hooks and extensions can rely on PYTHONPATH value. Yet the pyoxidized binary ignore the variable. So we manually reinstall the behavior to fix various tests and restore the expected behavior. This positively affects: - test-extension.t - test-hook.t Differential Revision: https://phab.mercurial-scm.org/D11302

File last commit:

r43350:86e4daa2 default
r48658:b962a913 stable
Show More
debugshell.py
65 lines | 1.5 KiB | text/x-python | PythonLexer
# debugshell extension
"""a python shell with repo, changelog & manifest objects"""
from __future__ import absolute_import
import code
import mercurial
import sys
from mercurial import (
demandimport,
pycompat,
registrar,
)
cmdtable = {}
command = registrar.command(cmdtable)
def pdb(ui, repo, msg, **opts):
objects = {
'mercurial': mercurial,
'repo': repo,
'cl': repo.changelog,
'mf': repo.manifestlog,
}
code.interact(msg, local=objects)
def ipdb(ui, repo, msg, **opts):
import IPython
cl = repo.changelog
mf = repo.manifestlog
cl, mf # use variables to appease pyflakes
IPython.embed()
@command(b'debugshell|dbsh', [])
def debugshell(ui, repo, **opts):
bannermsg = "loaded repo : %s\n" "using source: %s" % (
pycompat.sysstr(repo.root),
mercurial.__path__[0],
)
pdbmap = {'pdb': 'code', 'ipdb': 'IPython'}
debugger = ui.config(b"ui", b"debugger")
if not debugger:
debugger = 'pdb'
else:
debugger = pycompat.sysstr(debugger)
# if IPython doesn't exist, fallback to code.interact
try:
with demandimport.deactivated():
__import__(pdbmap[debugger])
except ImportError:
ui.warnnoi18n(
b"%s debugger specified but %s module was not found\n"
% (debugger, pdbmap[debugger])
)
debugger = b'pdb'
getattr(sys.modules[__name__], debugger)(ui, repo, bannermsg, **opts)