--- a/mercurial/merge.py Mon May 07 00:12:35 2007 +0200
+++ b/mercurial/merge.py Sun May 06 20:27:45 2007 -0700
@@ -489,14 +489,19 @@
p1, p2 = pl[0], repo.changectx(node)
pa = p1.ancestor(p2)
fp1, fp2, xp1, xp2 = p1.node(), p2.node(), str(p1), str(p2)
+ fastforward = False
### check phase
if not overwrite and len(pl) > 1:
raise util.Abort(_("outstanding uncommitted merges"))
if pa == p1 or pa == p2: # is there a linear path from p1 to p2?
if branchmerge:
- raise util.Abort(_("there is nothing to merge, just use "
- "'hg update' or look at 'hg heads'"))
+ if p1.branch() != p2.branch():
+ fastforward = True
+ branchmerge = False
+ else:
+ raise util.Abort(_("there is nothing to merge, just use "
+ "'hg update' or look at 'hg heads'"))
elif not (overwrite or branchmerge):
raise util.Abort(_("update spans branches, use 'hg merge' "
"or 'hg update -C' to lose changes"))
@@ -525,7 +530,7 @@
if not partial:
recordupdates(repo, action, branchmerge)
repo.dirstate.setparents(fp1, fp2)
- if not branchmerge:
+ if not branchmerge and not fastforward:
repo.dirstate.setbranch(p2.branch())
repo.hook('update', parent1=xp1, parent2=xp2, error=stats[3])
--- a/tests/test-newbranch Mon May 07 00:12:35 2007 +0200
+++ b/tests/test-newbranch Sun May 06 20:27:45 2007 -0700
@@ -51,4 +51,15 @@
hg branch foobar
hg up
+echo % fastforward merge
+hg branch ff
+echo ff > ff
+hg ci -Am'fast forward' -d '1000000 0'
+hg up foo
+hg merge ff
+hg branch
+hg commit -m'Merge ff into foo' -d '1000000 0'
+hg parents
+hg manifest
+
exit 0
--- a/tests/test-newbranch.out Mon May 07 00:12:35 2007 +0200
+++ b/tests/test-newbranch.out Sun May 06 20:27:45 2007 -0700
@@ -84,3 +84,18 @@
bf1bc2f45e83
4909a3732169 (foo) tip
abort: branch foobar not found
+% fastforward merge
+adding ff
+0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+foo
+changeset: 6:9cc105113eeb
+branch: foo
+tag: tip
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: Merge ff into foo
+
+a
+ff