# HG changeset patch # User Greg Ward # Date 2010-02-15 20:25:29 # Node ID b3311e26f94f69eeb0e7df4fc3d7b743f3d86969 # Parent d2c1fc4405334df3b84bd1ba506cb7d52bc6a203 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(). diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -2233,14 +2233,14 @@ def merge(ui, repo, node=None, **opts): 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 diff --git a/tests/test-merge-default b/tests/test-merge-default --- a/tests/test-merge-default +++ b/tests/test-merge-default @@ -50,4 +50,11 @@ hg commit -mf 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 diff --git a/tests/test-merge-default.out b/tests/test-merge-default.out --- a/tests/test-merge-default.out +++ b/tests/test-merge-default.out @@ -34,3 +34,8 @@ created new head % 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