Mercurial > hg
view contrib/debugshell.py @ 28785:87b89dca669d
revset: stabilize repr of baseset initialized with a set
Cpython and pypy have different way to build and order set, so the result of
list(myset) is different. We work around this by using the sorted version of the
data when displaying a list.
This get pypy closer to pass test-revset.t.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Mon, 04 Apr 2016 17:45:15 -0700 |
parents | e28dc6de38e7 |
children | 844f72885fb9 |
line wrap: on
line source
# debugshell extension """a python shell with repo, changelog & manifest objects""" from __future__ import absolute_import import code import mercurial import sys from mercurial import ( cmdutil, demandimport, ) 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: with demandimport.deactivated(): __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)