diff -r 0a0933d3d59c -r d1afbf03e69a mercurial/merge.py --- a/mercurial/merge.py Sat May 12 14:00:51 2012 +0200 +++ b/mercurial/merge.py Thu May 03 15:14:58 2012 +0200 @@ -480,7 +480,8 @@ if f: repo.dirstate.drop(f) -def update(repo, node, branchmerge, force, partial, ancestor=None): +def update(repo, node, branchmerge, force, partial, ancestor=None, + mergeancestor=False): """ Perform a merge between the working directory and the given node @@ -488,6 +489,10 @@ branchmerge = whether to merge between branches force = whether to force branch merging or file overwriting partial = a function to filter file lists (dirstate not updated) + mergeancestor = if false, merging with an ancestor (fast-forward) + is only allowed between different named branches. This flag + is used by rebase extension as a temporary fix and should be + avoided in general. The table below shows all the behaviors of the update command given the -c and -C or no options, whether the working directory @@ -548,7 +553,7 @@ raise util.Abort(_("merging with a working directory ancestor" " has no effect")) elif pa == p1: - if p1.branch() == p2.branch(): + if not mergeancestor and p1.branch() == p2.branch(): raise util.Abort(_("nothing to merge"), hint=_("use 'hg update' " "or check 'hg heads'"))