Mercurial > hg
view contrib/debugshell.py @ 20835:0e8417131a29
util: add the code path to "cachefunc()" for the function taking no arguments
Before this patch, "util.cachefunc()" caches the value returned by the
specified function into dictionary "cache", even if the specified
function takes no arguments.
In such case, "cache" has at most one entry, and distinction between
entries in "cache" is meaningless.
This patch adds the code path to "cachefunc()" for the function taking
no arguments for efficiency: to store only one cached value, using
list "cache" is a little faster than using dictionary "cache".
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Sat, 15 Feb 2014 19:52:26 +0900 |
parents | cccc44304b2c |
children | 8b5c039f2b4f |
line wrap: on
line source
# debugshell extension """a python shell with repo, changelog & manifest objects""" import sys import mercurial import code 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() 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) cmdtable = { "debugshell|dbsh": (debugshell, []) }