merge: fix --preview to show all nodes that will be merged (issue2043). stable
authorGreg Ward <greg-hg@gerg.ca>
Mon, 15 Feb 2010 15:25:29 -0500
branchstable
changeset 10505 b3311e26f94f
parent 10504 d2c1fc440533
child 10506 42afde35e9f7
merge: fix --preview to show all nodes that will be merged (issue2043). Formerly, it omitted nodes that were not descendants of the least common ancestor of the two merge parents, even though those nodes contribute to the merge. The new algorithm uses revlog.findmissing() instead of ancestor() + nodesbetween().
mercurial/commands.py
tests/test-merge-default
tests/test-merge-default.out
--- a/mercurial/commands.py	Mon Feb 15 15:07:21 2010 -0500
+++ b/mercurial/commands.py	Mon Feb 15 15:25:29 2010 -0500
@@ -2233,14 +2233,14 @@
         node = parent == bheads[0] and bheads[-1] or bheads[0]
 
     if opts.get('preview'):
-        p1 = repo['.']
-        p2 = repo[node]
-        common = p1.ancestor(p2)
-        roots, heads = [common.node()], [p2.node()]
+        # find nodes that are ancestors of p2 but not of p1
+        p1 = repo.lookup('.')
+        p2 = repo.lookup(node)
+        nodes = repo.changelog.findmissing(common=[p1], heads=[p2])
+
         displayer = cmdutil.show_changeset(ui, repo, opts)
-        for node in repo.changelog.nodesbetween(roots=roots, heads=heads)[0]:
-            if node not in roots:
-                displayer.show(repo[node])
+        for node in nodes:
+            displayer.show(repo[node])
         displayer.close()
         return 0
 
--- a/tests/test-merge-default	Mon Feb 15 15:07:21 2010 -0500
+++ b/tests/test-merge-default	Mon Feb 15 15:25:29 2010 -0500
@@ -50,4 +50,11 @@
 echo % should fail because merge with other branch
 hg merge
 
+# Test for issue2043: ensure that 'merge -P' shows ancestors of 6 that
+# are not ancestors of 7, regardless of where their least common
+# ancestor is.
+echo % merge preview not affected by common ancestor
+hg up -q 7
+hg merge -q -P 6         # expect: 2, 4, 5, 6
+
 true
--- a/tests/test-merge-default.out	Mon Feb 15 15:07:21 2010 -0500
+++ b/tests/test-merge-default.out	Mon Feb 15 15:25:29 2010 -0500
@@ -34,3 +34,8 @@
 % should fail because merge with other branch
 abort: branch 'foobranch' has one head - please merge with an explicit rev
 (run 'hg heads' to see all heads)
+% merge preview not affected by common ancestor
+2:2d95304fed5d
+4:f25cbe84d8b3
+5:a431fabd6039
+6:e88e33f3bf62