# HG changeset patch # User Matt Mackall # Date 2011-03-07 21:03:10 # Node ID 1792b8a9422bd86f0f28677187bd49e03a6b67ad # Parent 6217040b2780f42b892d64f0fcd601ab27b4f5d7 merge: back out single-parent fast-forward merge This backs out changeset: 13158:9e7e24052745 user: Mads Kiilerich date: Tue Dec 07 03:29:21 2010 +0100 summary: merge: fast-forward merge with descendant Before named branches, the invariants were: a) "merges" always have two parents b) p1 is not linearly related to p2 Adding named branches made (b) problematic, so the above patch was introduced, which fixed (b) but broke (a). After discussion, we decided that the invariants should be: a) "merges" always have two parents b) p1 is not linearly related to p2 OR p1 and p2 are on different branches diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -540,7 +540,7 @@ def update(repo, node, branchmerge, forc action += manifestmerge(repo, wc, p2, pa, overwrite, partial) ### apply phase - if not branchmerge or fastforward: # just jump to the new rev + if not branchmerge: # just jump to the new rev fp1, fp2, xp1, xp2 = fp2, nullid, xp2, '' if not partial: repo.hook('preupdate', throw=True, parent1=xp1, parent2=xp2) @@ -549,7 +549,7 @@ def update(repo, node, branchmerge, forc if not partial: repo.dirstate.setparents(fp1, fp2) - recordupdates(repo, action, branchmerge and not fastforward) + recordupdates(repo, action, branchmerge) if not branchmerge and not fastforward: repo.dirstate.setbranch(p2.branch()) finally: diff --git a/tests/test-issue619.t b/tests/test-issue619.t --- a/tests/test-issue619.t +++ b/tests/test-issue619.t @@ -19,12 +19,7 @@ Fast-forward: $ hg merge b 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) - $ hg branch - default - $ hg parent --template '{rev}:{node|short} {branches}: {desc}\n' - 1:06c2121185be b: b $ hg ci -Ammerge - created new head Bogus fast-forward should fail: diff --git a/tests/test-newbranch.t b/tests/test-newbranch.t --- a/tests/test-newbranch.t +++ b/tests/test-newbranch.t @@ -209,11 +209,12 @@ Fastforward merge: $ hg branch foo $ hg commit -m'Merge ff into foo' - created new head $ hg parents - changeset: 6:6af8030670c9 + changeset: 6:917eb54e1b4b branch: foo tag: tip + parent: 4:98d14f698afe + parent: 5:6683a60370cb user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: Merge ff into foo diff --git a/tests/test-push-warn.t b/tests/test-push-warn.t --- a/tests/test-push-warn.t +++ b/tests/test-push-warn.t @@ -413,7 +413,6 @@ Check prepush logic with merged branches (branch merge, don't forget to commit) $ hg -R k ci -m merge - created new head $ hg -R k push -r a j pushing to j