From patchwork Thu Apr 17 18:08:00 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [8, of, 9, cah] context: tell when .ancestor picks one of multiple common ancestors heads From: Mads Kiilerich X-Patchwork-Id: 4402 Message-Id: To: mercurial-devel@selenic.com Date: Thu, 17 Apr 2014 20:08:00 +0200 # HG changeset patch # User Mads Kiilerich # Date 1397748724 -7200 # Thu Apr 17 17:32:04 2014 +0200 # Node ID ba5e0b1e2289a34a35522d94d7e7b96ba244120d # Parent 4a6c8b6b10d3690bfc1bb5de789d6ebb475ebb81 context: tell when .ancestor picks one of multiple common ancestors heads diff --git a/mercurial/context.py b/mercurial/context.py --- a/mercurial/context.py +++ b/mercurial/context.py @@ -402,8 +402,18 @@ class changectx(basectx): n2 = c2._node if n2 is None: n2 = c2._parents[0]._node - n = self._repo.changelog.ancestor(self._node, n2) - return changectx(self._repo, n) + ancs = self._repo.changelog.commonancestorsheads(self._node, n2) + if not ancs: + anc = nullid + elif len(ancs) == 1: + anc = ancs[0] + else: + anc = self._repo.changelog.ancestor(self._node, n2) + self._repo.ui.status( + _("note: %s is best ancestor of %s and %s, not %s\n") % + (short(anc), short(self._node), short(n2), + ' '.join(short(n) for n in sorted(ancs) if n != anc))) + return changectx(self._repo, anc) def descendant(self, other): """True if other is descendant of this changeset""" diff --git a/tests/test-merge-criss-cross.t b/tests/test-merge-criss-cross.t --- a/tests/test-merge-criss-cross.t +++ b/tests/test-merge-criss-cross.t @@ -23,7 +23,9 @@ Criss cross merging $ echo '5 second change' > f1 $ hg ci -m '5 second change f1' - $ hg up -qr3 + $ hg up -r3 + note: 0f6b37dbe527 is best ancestor of adfe50279922 and cf89f02107e5, not 40663881a6dd + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo '6 second change' > f2 $ hg ci -m '6 second change f2' @@ -72,6 +74,7 @@ Criss cross merging $ hg merge -v --debug --tool internal:dump 5 + note: 0f6b37dbe527 is best ancestor of 3b08d01b0ab5 and adfe50279922, not 40663881a6dd searching for copies back to rev 3 resolving manifests branchmerge: True, force: False, partial: False