# HG changeset patch # User Martin von Zweigbergk # Date 2019-12-12 23:55:33 # Node ID fff21278554bc693c66e9e8658c75038b0b43b44 # Parent 023ad45e2fd2c4d069ddc94a1900a56f2504361c rebase: use cmdutil.check_at_most_one_arg() for action Here we also needed to know what the action was (if any), so I've updated the helper to return any specified option. Differential Revision: https://phab.mercurial-scm.org/D7640 diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -1021,12 +1021,7 @@ def rebase(ui, repo, **opts): inmemory = ui.configbool(b'rebase', b'experimental.inmemory') dryrun = opts.get(b'dry_run') confirm = opts.get(b'confirm') - selactions = [k for k in [b'abort', b'stop', b'continue'] if opts.get(k)] - if len(selactions) > 1: - raise error.Abort( - _(b'cannot use --%s with --%s') % tuple(selactions[:2]) - ) - action = selactions[0] if selactions else None + action = cmdutil.check_at_most_one_arg(opts, b'abort', b'stop', b'continue') if dryrun and action: raise error.Abort(_(b'cannot specify both --dry-run and --%s') % action) if confirm and action: diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -261,7 +261,10 @@ debugrevlogopts = [ def check_at_most_one_arg(opts, *args): - """abort if more than one of the arguments are in opts""" + """abort if more than one of the arguments are in opts + + Returns the unique argument or None if none of them were specified. + """ previous = None for x in args: if opts.get(x): @@ -270,6 +273,7 @@ def check_at_most_one_arg(opts, *args): _(b'cannot specify both --%s and --%s') % (previous, x) ) previous = x + return previous def check_incompatible_arguments(opts, first, *others): diff --git a/tests/test-rebase-obsolete.t b/tests/test-rebase-obsolete.t --- a/tests/test-rebase-obsolete.t +++ b/tests/test-rebase-obsolete.t @@ -2062,7 +2062,7 @@ Test --stop raise errors with conflictin (use 'hg rebase --continue' or 'hg rebase --abort') [255] $ hg rebase --stop --continue - abort: cannot use --stop with --continue + abort: cannot specify both --stop and --continue [255] Test --stop moves bookmarks of original revisions to new rebased nodes: diff --git a/tests/test-rebase-parameters.t b/tests/test-rebase-parameters.t --- a/tests/test-rebase-parameters.t +++ b/tests/test-rebase-parameters.t @@ -61,7 +61,7 @@ These fail: [1] $ hg rebase --continue --abort - abort: cannot use --abort with --continue + abort: cannot specify both --abort and --continue [255] $ hg rebase --continue --collapse