--- 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)