# HG changeset patch # User Anton Shestakov # Date 1675091992 -14400 # Node ID fcbca44dd0df2d0d5dddc3792d18020bb2c3c4ac # Parent 28355b173fd5cd08cd118f11a3facb6268f1bfdb compat: implement changing_parents context manager It combines the compatibility layer for the recently renamed changing_parents (was parentchange) on dirstate class with _quick_access_* handling code into one context manager, which should be slightly more pleasant to use. diff -r 28355b173fd5 -r fcbca44dd0df hgext3rd/evolve/cmdrewrite.py --- a/hgext3rd/evolve/cmdrewrite.py Fri Jan 27 18:43:11 2023 +0400 +++ b/hgext3rd/evolve/cmdrewrite.py Mon Jan 30 19:19:52 2023 +0400 @@ -473,7 +473,7 @@ if opts.get('revert'): compat.clean_update(repo[newid]) else: - with repo.dirstate.parentchange(), compat.parentchange(repo): + with compat.changing_parents(repo): compat.movedirstate(repo, repo[newid], match) if not repo[newid].files(): ui.warn(_(b"new changeset is empty\n")) @@ -1329,7 +1329,7 @@ tr = repo.currenttransaction() phases.retractboundary(repo, tr, ctx.phase(), [new]) if ctx in repo[None].parents(): - with repo.dirstate.parentchange(), compat.parentchange(repo): + with compat.changing_parents(repo): repo.dirstate.setparents(new, node.nullid) @eh.command( diff -r 28355b173fd5 -r fcbca44dd0df hgext3rd/evolve/compat.py --- a/hgext3rd/evolve/compat.py Fri Jan 27 18:43:11 2023 +0400 +++ b/hgext3rd/evolve/compat.py Mon Jan 30 19:19:52 2023 +0400 @@ -337,9 +337,15 @@ return cl.nodemap.get @contextlib.contextmanager -def parentchange(repo): +def changing_parents(repo): + if util.safehasattr(repo.dirstate, 'changing_parents'): + changing_parents = repo.dirstate.changing_parents(repo) + else: + # hg <= 6.3 (7a8bfc05b691) + changing_parents = repo.dirstate.parentchange() try: - yield + with changing_parents: + yield finally: # hg <= 5.2 (85c4cd73996b) if util.safehasattr(repo, '_quick_access_changeid_invalidate'): diff -r 28355b173fd5 -r fcbca44dd0df hgext3rd/evolve/evolvecmd.py --- a/hgext3rd/evolve/evolvecmd.py Fri Jan 27 18:43:11 2023 +0400 +++ b/hgext3rd/evolve/evolvecmd.py Mon Jan 30 19:19:52 2023 +0400 @@ -282,7 +282,7 @@ flag=obsolete.bumpedfix, operation=b'evolve') bmupdate(newid) # reroute the working copy parent to the new changeset - with repo.dirstate.parentchange(), compat.parentchange(repo): + with compat.changing_parents(repo): repo.dirstate.setparents(newid, nodemod.nullid) return (True, replacementnode) @@ -615,7 +615,7 @@ publicdiv = repo[publicnode] otherdiv = other if other.mutable() else divergent - with repo.dirstate.parentchange(), compat.parentchange(repo): + with compat.changing_parents(repo): compat.movedirstate(repo, repo[publicnode]) # check if node to be committed has changes same as public one s = publicdiv.status() @@ -628,7 +628,7 @@ compat.mergestate.clean(repo) return (True, publicnode) - with repo.dirstate.parentchange(), compat.parentchange(repo): + with compat.changing_parents(repo): compat.movedirstate(repo, repo[resparent]) # merge the branches @@ -2223,14 +2223,14 @@ # p1 is obsolete and p2 is not obsolete, current working # directory parent should be successor of p1, so we should # set dirstate parents to (succ of p1, p2) - with repo.dirstate.parentchange(), compat.parentchange(repo): + with compat.changing_parents(repo): repo.dirstate.setparents(currentp1, ctxparents[1].node()) elif p2obs and not p1obs: # p2 is obsolete and p1 is not obsolete, current working # directory parent should be successor of p2, so we should # set dirstate parents to (succ of p2, p1) - with repo.dirstate.parentchange(), compat.parentchange(repo): + with compat.changing_parents(repo): repo.dirstate.setparents(ctxparents[0].node(), currentp1) @@ -2238,12 +2238,12 @@ # both the parents were obsoleted, if orphanmerge is set, we # are processing the second parent first (to keep parent order) if evolvestate.get(b'orphanmerge'): - with repo.dirstate.parentchange(), compat.parentchange(repo): + with compat.changing_parents(repo): repo.dirstate.setparents(ctxparents[0].node(), currentp1) pass else: - with repo.dirstate.parentchange(), compat.parentchange(repo): + with compat.changing_parents(repo): repo.dirstate.setparents(repo.dirstate.p1(), nodemod.nullid) with repo.ui.configoverride(overrides, b'evolve-continue'):