Closed by commit rHGc791ed6a2154: merge: introduce a revert_to() for that use-case (authored by martinvonz). This revision was automatically updated to reflect the committed changes. This revision was not accepted when it landed; it landed in state "Needs Review".
REPOSITORY rHG Mercurial CHANGES SINCE LAST UPDATE https://phab.mercurial-scm.org/D7901?vs=19930&id=19971 CHANGES SINCE LAST ACTION https://phab.mercurial-scm.org/D7901/new/ REVISION DETAIL https://phab.mercurial-scm.org/D7901 AFFECTED FILES hgext/fix.py mercurial/cmdutil.py mercurial/merge.py CHANGE DETAILS diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -2225,6 +2225,7 @@ labels=None, matcher=None, mergeforce=False, + updatedirstate=True, updatecheck=None, wc=None, ): @@ -2523,7 +2524,7 @@ # If we're doing a partial update, we need to skip updating # the dirstate. always = matcher is None or matcher.always() - updatedirstate = always and not wc.isinmemory() + updatedirstate = updatedirstate and always and not wc.isinmemory() if updatedirstate: repo.hook(b'preupdate', throw=True, parent1=xp1, parent2=xp2) # note that we're in the middle of an update @@ -2606,6 +2607,24 @@ return update(ctx.repo(), ctx.rev(), branchmerge=False, force=True, wc=wc) +def revert_to(ctx, matcher=None, wc=None): + """Revert the working copy to the given commit. + + The working copy will keep its current parent(s) but its content will + be the same as in the given commit. + """ + + return update( + ctx.repo(), + ctx.rev(), + branchmerge=False, + force=True, + updatedirstate=False, + matcher=matcher, + wc=wc, + ) + + def graft( repo, ctx, diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -584,15 +584,8 @@ [os.unlink(repo.wjoin(c)) for c in newlyaddedandmodifiedfiles] # 3a. apply filtered patch to clean repo (clean) if backups: - # Equivalent to hg.revert m = scmutil.matchfiles(repo, set(backups.keys()) | alsorestore) - mergemod.update( - repo, - repo.dirstate.p1(), - branchmerge=False, - force=True, - matcher=m, - ) + mergemod.revert_to(repo[b'.'], matcher=m) # 3b. (apply) if dopatch: diff --git a/hgext/fix.py b/hgext/fix.py --- a/hgext/fix.py +++ b/hgext/fix.py @@ -735,15 +735,7 @@ wctx = context.overlayworkingctx(repo) wctx.setbase(repo[newp1node]) - merge.update( - repo, - ctx.rev(), - branchmerge=False, - force=True, - ancestor=p1rev, - mergeancestor=False, - wc=wctx, - ) + merge.revert_to(ctx, wc=wctx) copies.graftcopies(wctx, ctx, ctx.p1()) for path in filedata.keys(): To: martinvonz, #hg-reviewers, marmoute Cc: mercurial-devel _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel