Mercurial > hg
changeset 43873:8caec25f5d8f
merge: add commands.merge.require-rev to require an argument to hg merge
This is related to commands.rebase.requiredest, commands.update.requiredest, and
commands.push.require-revs. Since it isn't really a "destination", I went with
require-rev to be similar to push's require-revs.
Differential Revision: https://phab.mercurial-scm.org/D7620
author | Kyle Lippincott <spectral@google.com> |
---|---|
date | Wed, 11 Dec 2019 19:42:05 -0800 |
parents | 527eba3013ea |
children | c6feee1e4d5b |
files | mercurial/commands.py mercurial/configitems.py mercurial/helptext/config.txt tests/test-merge-default.t tests/test-merge-tools.t |
diffstat | 5 files changed, 36 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/commands.py Thu Dec 12 09:59:03 2019 -0800 +++ b/mercurial/commands.py Wed Dec 11 19:42:05 2019 -0800 @@ -4888,6 +4888,13 @@ node = scmutil.revsingle(repo, node).node() if not node and not abort: + if ui.configbool(b'commands', b'merge.require-rev'): + raise error.Abort( + _( + b'configuration requires specifying revision to merge ' + b'with' + ) + ) node = repo[destutil.destmerge(repo)].node() if opts.get(b'preview'):
--- a/mercurial/configitems.py Thu Dec 12 09:59:03 2019 -0800 +++ b/mercurial/configitems.py Wed Dec 11 19:42:05 2019 -0800 @@ -228,6 +228,9 @@ b'commands', b'grep.all-files', default=False, experimental=True, ) coreconfigitem( + b'commands', b'merge.require-rev', default=False, +) +coreconfigitem( b'commands', b'push.require-revs', default=False, ) coreconfigitem(
--- a/mercurial/helptext/config.txt Thu Dec 12 09:59:03 2019 -0800 +++ b/mercurial/helptext/config.txt Wed Dec 11 19:42:05 2019 -0800 @@ -442,6 +442,12 @@ Show status of files in the working directory after successful commit. (default: False) +``merge.require-rev`` + Require that the revision to merge the current commit with be specified on + the command line. If this is enabled and a revision is not specified, the + command aborts. + (default: False) + ``push.require-revs`` Require revisions to push be specified using one or more mechanisms such as specifying them positionally on the command line, using ``-r``, ``-b``,
--- a/tests/test-merge-default.t Thu Dec 12 09:59:03 2019 -0800 +++ b/tests/test-merge-default.t Wed Dec 11 19:42:05 2019 -0800 @@ -44,9 +44,10 @@ (run 'hg heads .' to see heads, specify rev with -r) [255] -Should succeed: +Should succeed (we're specifying commands.merge.require-rev=True just to test +that it allows merge to succeed if we specify a revision): - $ hg merge 2 + $ hg merge 2 --config commands.merge.require-rev=True 0 files updated, 1 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) $ hg id -Tjson @@ -63,6 +64,13 @@ ] $ hg commit -mm1 +Should fail because we didn't specify a revision (even though it would have +succeeded without this): + + $ hg merge --config commands.merge.require-rev=True + abort: configuration requires specifying revision to merge with + [255] + Should succeed - 2 heads: $ hg merge -P @@ -88,6 +96,13 @@ } ] +Should fail because we didn't specify a revision (even though it would have +failed without this due to being on tip, but this check comes first): + + $ hg merge --config commands.merge.require-rev=True + abort: configuration requires specifying revision to merge with + [255] + Should fail because at tip: $ hg merge
--- a/tests/test-merge-tools.t Thu Dec 12 09:59:03 2019 -0800 +++ b/tests/test-merge-tools.t Wed Dec 11 19:42:05 2019 -0800 @@ -4,6 +4,8 @@ $ cat >> $HGRCPATH << EOF > [ui] > merge= + > [commands] + > merge.require-rev=True > EOF $ hg init repo $ cd repo @@ -1908,6 +1910,7 @@ 0 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon [1] +(Testing that commands.merge.require-rev doesn't break --abort) $ hg merge --abort -q (for ui.merge, ignored unintentionally)