mercurial/merge.py
changeset 24643 a8e6897dffbe
parent 24471 1ff35d76421c
child 24881 51844b8b5017
--- a/mercurial/merge.py	Mon Apr 06 16:07:18 2015 -0700
+++ b/mercurial/merge.py	Sun Apr 05 11:55:38 2015 -0700
@@ -1184,9 +1184,17 @@
     labels - merge labels eg ['local', 'graft']
 
     """
+    # If we're grafting a descendant onto an ancestor, be sure to pass
+    # mergeancestor=True to update. This does two things: 1) allows the merge if
+    # the destination is the same as the parent of the ctx (so we can use graft
+    # to copy commits), and 2) informs update that the incoming changes are
+    # newer than the destination so it doesn't prompt about "remote changed foo
+    # which local deleted".
+    mergeancestor = repo.changelog.isancestor(repo['.'].node(), ctx.node())
 
     stats = update(repo, ctx.node(), True, True, False, pctx.node(),
-                   labels=labels)
+                   mergeancestor=mergeancestor, labels=labels)
+
     # drop the second merge parent
     repo.dirstate.beginparentchange()
     repo.setparents(repo['.'].node(), nullid)