Mercurial > hg
view contrib/debugshell.py @ 25804:f0a77cb6316a
parser: extract function that tests if next token may start new term
Future patches will separate primary expression and prefix operator actions.
This function will be used to resolve ambiguity of them.
This is a step to remove the old-style revexpr parser. We need both ":" and
":y" operators for backward compatibility.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 05 Jul 2015 11:54:14 +0900 |
parents | 8b5c039f2b4f |
children | e4b512bb6386 |
line wrap: on
line source
# debugshell extension """a python shell with repo, changelog & manifest objects""" import sys import mercurial import code from mercurial import cmdutil cmdtable = {} command = cmdutil.command(cmdtable) def pdb(ui, repo, msg, **opts): objects = { 'mercurial': mercurial, 'repo': repo, 'cl': repo.changelog, 'mf': repo.manifest, } code.interact(msg, local=objects) def ipdb(ui, repo, msg, **opts): import IPython cl = repo.changelog mf = repo.manifest cl, mf # use variables to appease pyflakes IPython.embed() @command('debugshell|dbsh', []) def debugshell(ui, repo, **opts): bannermsg = "loaded repo : %s\n" \ "using source: %s" % (repo.root, mercurial.__path__[0]) 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)