Mercurial > hg-stable
changeset 13158:9e7e24052745
merge: fast-forward merge with descendant
issue2538 gives a case where a changeset is merged with its child (which is on
another branch), and to my surprise the result is a real merge with two
parents, not just a "fast forward" "merge" with only the child as parent.
That is essentially the same as issue619.
Is the existing behaviour as intended and correct?
Or is the following fix correct?
Some extra "created new head" pops up with this fix, but it seems to me like
they could be considered correct. The old branch head has been superseeded by
changes on the other branch, and when the changes on the other branch is merged
back to the branch it will introduce a new head not directly related to the
previous branch head.
(I guess the intention with existing behaviour could be to ensure that the
changesets on the branch are directly connected and that no new heads pops up
on merges.)
author | Mads Kiilerich <mads@kiilerich.com> |
---|---|
date | Tue, 07 Dec 2010 03:29:21 +0100 |
parents | 82f840109f76 |
children | 3172da69ff37 |
files | mercurial/merge.py tests/test-issue619.t tests/test-newbranch.t tests/test-push-warn.t |
diffstat | 4 files changed, 10 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/merge.py Wed Dec 08 22:14:18 2010 -0600 +++ b/mercurial/merge.py Tue Dec 07 03:29:21 2010 +0100 @@ -524,7 +524,7 @@ 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 @@ 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:
--- a/tests/test-issue619.t Wed Dec 08 22:14:18 2010 -0600 +++ b/tests/test-issue619.t Tue Dec 07 03:29:21 2010 +0100 @@ -19,7 +19,12 @@ $ 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:
--- a/tests/test-newbranch.t Wed Dec 08 22:14:18 2010 -0600 +++ b/tests/test-newbranch.t Tue Dec 07 03:29:21 2010 +0100 @@ -208,12 +208,11 @@ $ 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