changeset 46464:f25c770c217b

debugshell: add a simple command for starting an interactive shell This simplifies interactive exploration of the Mercurial APIs. The ui and repo instances are provided as local variables. Differential Revision: https://phab.mercurial-scm.org/D9866
author Joerg Sonnenberger <joerg@bec.de>
date Tue, 26 Jan 2021 00:19:36 +0100
parents cfb6c10c08c2
children 66e8e279133b
files mercurial/debugcommands.py tests/test-completion.t tests/test-help.t
diffstat 3 files changed, 20 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/debugcommands.py	Mon Jan 25 11:34:23 2021 +0100
+++ b/mercurial/debugcommands.py	Tue Jan 26 00:19:36 2021 +0100
@@ -3717,6 +3717,23 @@
         ui.writenoi18n(b' revision %s\n' % v[1])
 
 
+@command(b'debugshell', optionalrepo=True)
+def debugshell(ui, repo):
+    """run an interactive Python interpreter
+
+    The local namespace is provided with a reference to the ui and
+    the repo instance (if available).
+    """
+    import code
+
+    imported_objects = {
+        'ui': ui,
+        'repo': repo,
+    }
+
+    code.interact(local=imported_objects)
+
+
 @command(
     b'debugsuccessorssets',
     [(b'', b'closest', False, _(b'return closest successors sets only'))],
--- a/tests/test-completion.t	Mon Jan 25 11:34:23 2021 +0100
+++ b/tests/test-completion.t	Tue Jan 26 00:19:36 2021 +0100
@@ -130,6 +130,7 @@
   debugrevspec
   debugserve
   debugsetparents
+  debugshell
   debugsidedata
   debugssl
   debugstrip
@@ -319,6 +320,7 @@
   debugrevspec: optimize, show-revs, show-set, show-stage, no-optimized, verify-optimized
   debugserve: sshstdio, logiofd, logiofile
   debugsetparents: 
+  debugshell: 
   debugsidedata: changelog, manifest, dir
   debugssl: 
   debugstrip: rev, force, no-backup, nobackup, , keep, bookmark, soft
--- a/tests/test-help.t	Mon Jan 25 11:34:23 2021 +0100
+++ b/tests/test-help.t	Tue Jan 26 00:19:36 2021 +0100
@@ -1069,6 +1069,7 @@
    debugsetparents
                  manually set the parents of the current working directory
                  (DANGEROUS)
+   debugshell    run an interactive Python interpreter
    debugsidedata
                  dump the side data for a cl/manifest/file revision
    debugssl      test a secure connection to a server