Mercurial > hg
view contrib/debugshell.py @ 48460:c51408b92b88
directaccess: fix uses of commands.status() that don't go through flag parsing
When `commands.commit.post-status` is enabled, after commit/amend,
commands.status() is called without any revs argument, which means that status
gets None instead of an empty list like it would receive if the user had invoked
this on the commandline. With the `experimental.directaccess` config enabled,
this gets passed to `unhidehashlikerevs`, which didn't previously handle None,
but now should.
Differential Revision: https://phab.mercurial-scm.org/D11883
author | Kyle Lippincott <spectral@google.com> |
---|---|
date | Tue, 07 Dec 2021 15:48:22 -0800 |
parents | 86e4daa2d54c |
children | 6000f5b25c9b |
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 ( 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)