Mercurial > hg
changeset 49944:8f76a41ee465
debugshell: allow commands to be specified as a CLI argument
Add a `--command` option to `hg debugshell` that allows the user to pass in
Python code to evaluate directly from the command line. This was inspired by
the `--command` option present in Facebook's Sapling fork of Mercurial,
which in turn was inspired by the `-c` option of the Python interpreter
itself. It is particularly useful for writing tests, especially for getting
visibility into things that otherwise aren't exposed via debug commands.
author | Arun Kulshreshtha <akulshreshtha@janestreet.com> |
---|---|
date | Thu, 19 Jan 2023 11:12:20 -0500 |
parents | 86958104b6ca |
children | 70b4c7af9cdb |
files | mercurial/debugcommands.py tests/test-completion.t tests/test-debugcommands.t |
diffstat | 3 files changed, 27 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/debugcommands.py Tue Jan 10 11:40:19 2023 +0100 +++ b/mercurial/debugcommands.py Thu Jan 19 11:12:20 2023 -0500 @@ -3786,8 +3786,21 @@ ui.writenoi18n(b' revision %s\n' % v[1]) -@command(b'debugshell', optionalrepo=True) -def debugshell(ui, repo): +@command( + b'debugshell', + [ + ( + b'c', + b'command', + b'', + _(b'program passed in as a string'), + _(b'COMMAND'), + ) + ], + _(b'[-c COMMAND]'), + optionalrepo=True, +) +def debugshell(ui, repo, **opts): """run an interactive Python interpreter The local namespace is provided with a reference to the ui and @@ -3815,6 +3828,12 @@ except ImportError: site = None # Keep PyCharm happy + command = opts.get('command') + if command: + compiled = code.compile_command(encoding.strfromlocal(command)) + code.InteractiveInterpreter(locals=imported_objects).runcode(compiled) + return + code.interact(local=imported_objects)
--- a/tests/test-completion.t Tue Jan 10 11:40:19 2023 +0100 +++ b/tests/test-completion.t Thu Jan 19 11:12:20 2023 -0500 @@ -328,7 +328,7 @@ debugrevspec: optimize, show-revs, show-set, show-stage, no-optimized, verify-optimized debugserve: sshstdio, logiofd, logiofile debugsetparents: - debugshell: + debugshell: command debugsidedata: changelog, manifest, dir debugssl: debugstrip: rev, force, no-backup, nobackup, , keep, bookmark, soft