Comments
Patch
@@ -2578,7 +2578,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.
@@ -2601,7 +2607,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())
@@ -2613,6 +2619,7 @@
base.node(),
mergeancestor=mergeancestor,
labels=labels,
+ wc=wctx,
)
if keepconflictparent and stats.unresolvedcount:
@@ -2627,11 +2634,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