# HG changeset patch # User Brendan Cully # Date 1178508465 25200 # Node ID bbc97d419b163d34426c457011fc32a944ad98bb # Parent 28b7d949ef6a981e5d28aa76372b84acb73e01fb Add fast-forward branch merging diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -489,14 +489,19 @@ def update(repo, node, branchmerge, forc 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 @@ def update(repo, node, branchmerge, forc 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]) diff --git a/tests/test-newbranch b/tests/test-newbranch --- a/tests/test-newbranch +++ b/tests/test-newbranch @@ -51,4 +51,15 @@ hg id 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 diff --git a/tests/test-newbranch.out b/tests/test-newbranch.out --- a/tests/test-newbranch.out +++ b/tests/test-newbranch.out @@ -84,3 +84,18 @@ 67ec16bde7f1575d523313b9bca000f6a6f12dca 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