merge: don't auto-pick destination with `hg merge 'wdir()'`
If the user doesn't specify a commit to merge with, we'll have
`node==None` in `commands.merge()`. We'll then try to find a good
commit to merge with. However, if the user, for some strange reason,
runs `hg merge 'wdir()'`, we'll also have `node==None` and we'll do
that same. That's clearly not the intent, so let's not do that.
It turns out we'd instead crash on that command after this patch, so I
added special handling of it too.
Differential Revision: https://phab.mercurial-scm.org/D7996
--- a/mercurial/commands.py Fri Jan 24 16:05:11 2020 -0800
+++ b/mercurial/commands.py Fri Jan 24 17:49:21 2020 -0800
@@ -4866,8 +4866,7 @@
if node:
node = scmutil.revsingle(repo, node).node()
-
- if not node:
+ else:
if ui.configbool(b'commands', b'merge.require-rev'):
raise error.Abort(
_(
@@ -4877,6 +4876,9 @@
)
node = repo[destutil.destmerge(repo)].node()
+ if node is None:
+ raise error.Abort(_(b'merging with the working copy has no effect'))
+
if opts.get(b'preview'):
# find nodes that are ancestors of p2 but not of p1
p1 = repo.lookup(b'.')
--- a/tests/test-merge2.t Fri Jan 24 16:05:11 2020 -0800
+++ b/tests/test-merge2.t Fri Jan 24 17:49:21 2020 -0800
@@ -50,4 +50,8 @@
adding b
created new head
+ $ hg merge 'wdir()'
+ abort: merging with the working copy has no effect
+ [255]
+
$ cd ..