# HG changeset patch # User Martin von Zweigbergk # Date 1578690744 28800 # Node ID fc7175df63594c907a8fdf8e36710fda1308d64c # Parent d0c3eead515af8c70c1f699585c88bc37737ba2d graft: let caller pass in overlayworkingctx to merge.graft() Passing in a different `wctx` than `repo[None]` is useful because it allows the caller to decide to not touch the working directory. Differential Revision: https://phab.mercurial-scm.org/D8026 diff -r d0c3eead515a -r fc7175df6359 mercurial/merge.py --- a/mercurial/merge.py Wed Jan 29 23:14:31 2020 -0800 +++ b/mercurial/merge.py Fri Jan 10 13:12:24 2020 -0800 @@ -2590,7 +2590,13 @@ def graft( - repo, ctx, base, labels=None, keepparent=False, keepconflictparent=False + repo, + ctx, + base, + labels=None, + keepparent=False, + keepconflictparent=False, + wctx=None, ): """Do a graft-like merge. @@ -2613,7 +2619,7 @@ # 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". - wctx = repo[None] + wctx = wctx or repo[None] pctx = wctx.p1() mergeancestor = repo.changelog.isancestor(pctx.node(), ctx.node()) @@ -2625,6 +2631,7 @@ base.node(), mergeancestor=mergeancestor, labels=labels, + wc=wctx, ) if keepconflictparent and stats.unresolvedcount: @@ -2639,11 +2646,16 @@ if pother == pctx.node(): pother = nullid - with repo.dirstate.parentchange(): - repo.setparents(pctx.node(), pother) - repo.dirstate.write(repo.currenttransaction()) + if wctx.isinmemory(): + wctx.setparents(pctx.node(), pother) # fix up dirstate for copies and renames copies.graftcopies(wctx, ctx, base) + else: + with repo.dirstate.parentchange(): + repo.setparents(pctx.node(), pother) + repo.dirstate.write(repo.currenttransaction()) + # fix up dirstate for copies and renames + copies.graftcopies(wctx, ctx, base) return stats