diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -524,7 +524,7 @@ def update(repo, node, branchmerge, forc action += manifestmerge(repo, wc, p2, pa, overwrite, partial) ### apply phase - if not branchmerge: # just jump to the new rev + if not branchmerge or fastforward: # 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) @@ -533,7 +533,7 @@ def update(repo, node, branchmerge, forc if not partial: repo.dirstate.setparents(fp1, fp2) - recordupdates(repo, action, branchmerge) + recordupdates(repo, action, branchmerge and not fastforward) 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,7 +19,12 @@ 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 @@ -208,12 +208,11 @@ Fastforward merge: $ hg branch foo $ hg commit -m'Merge ff into foo' + created new head $ hg parents - changeset: 6:917eb54e1b4b + changeset: 6:6af8030670c9 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,6 +413,7 @@ 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