D1483: globalopts: make special flags ineffective after '--' (BC)
quark (Jun Wu)
phabricator at mercurial-scm.org
Tue Nov 21 15:30:15 EST 2017
quark updated this revision to Diff 3744.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D1483?vs=3740&id=3744
REVISION DETAIL
https://phab.mercurial-scm.org/D1483
AFFECTED FILES
mercurial/dispatch.py
tests/test-globalopts.t
CHANGE DETAILS
diff --git a/tests/test-globalopts.t b/tests/test-globalopts.t
--- a/tests/test-globalopts.t
+++ b/tests/test-globalopts.t
@@ -459,3 +459,10 @@
Not tested: --debugger
+Flags should not be effective after --:
+
+ $ hg add -- --debugger --profile --traceback
+ --debugger: No such file or directory
+ --profile: No such file or directory
+ --traceback: No such file or directory
+ [1]
diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py
--- a/mercurial/dispatch.py
+++ b/mercurial/dispatch.py
@@ -147,7 +147,7 @@
try:
if not req.ui:
req.ui = uimod.ui.load()
- if '--traceback' in req.args:
+ if _earlypeekboolopt('--traceback', req.args):
req.ui.setconfig('ui', 'traceback', 'on', '--traceback')
# set ui streams from the request
@@ -250,6 +250,7 @@
_('potentially unsafe serve --stdio invocation: %r') %
(req.args,))
+ usedebugger = _earlypeekboolopt('--debugger', req.args)
try:
debugger = 'pdb'
debugtrace = {
@@ -275,7 +276,7 @@
if not debugger or ui.plain():
# if we are in HGPLAIN mode, then disable custom debugging
debugger = 'pdb'
- elif '--debugger' in req.args:
+ elif usedebugger:
# This import can be slow for fancy debuggers, so only
# do it when absolutely necessary, i.e. when actual
# debugging has been requested
@@ -289,7 +290,7 @@
debugmortem[debugger] = debugmod.post_mortem
# enter the debugger before command execution
- if '--debugger' in req.args:
+ if usedebugger:
ui.warn(_("entering debugger - "
"type c to continue starting hg or h for help\n"))
@@ -305,7 +306,7 @@
ui.flush()
except: # re-raises
# enter the debugger when we hit an exception
- if '--debugger' in req.args:
+ if usedebugger:
traceback.print_exc()
debugmortem[debugger](sys.exc_info()[2])
raise
@@ -693,6 +694,24 @@
pos += 1
return values
+def _earlypeekboolopt(optname, args):
+ """Return True or False for given boolean flag. Do not modify args.
+
+ >>> args = [b'x', b'--debugger', b'y']
+ >>> _earlypeekboolopt(b'--debugger', args)
+ True
+
+ >>> args = [b'x', b'--', b'--debugger', b'y']
+ >>> _earlypeekboolopt(b'--debugger', args)
+ False
+ """
+ for arg in args:
+ if arg == optname:
+ return True
+ if arg == '--':
+ return False
+ return False
+
def runcommand(lui, repo, cmd, fullargs, ui, options, d, cmdpats, cmdoptions):
# run pre-hook, and abort if it fails
hook.hook(lui, repo, "pre-%s" % cmd, True, args=" ".join(fullargs),
@@ -780,7 +799,7 @@
if req.repo:
uis.add(req.repo.ui)
- if '--profile' in args:
+ if _earlypeekboolopt('--profile', args):
for ui_ in uis:
ui_.setconfig('profiling', 'enabled', 'true', '--profile')
To: quark, #hg-reviewers
Cc: dlax, mercurial-devel
More information about the Mercurial-devel
mailing list