cleanupnodes: preserve phase of parents of new nodes
authorMartin von Zweigbergk <martinvonz@google.com>
Thu, 21 Jun 2018 08:22:11 -0700
changeset 38437 05b7dd11918e
parent 38436 d6686f864a70
child 38438 ddce7bdf7f3c
cleanupnodes: preserve phase of parents of new nodes As Yuya noted in the review of D3818, passing in targetphase=phases.draft would result in advancing the phase boundary of a secret-phase parent. We never pass targetphase=phases.draft so far, but it's a bug waiting to happen. I tried to refactor it so max(parentphase, X) happened in one place, but I couldn't come up with good variables names and I ended up with a "newphase = max(newphase, parentphase)" line, which made the whole block not look any better to me. Differential Revision: https://phab.mercurial-scm.org/D3824
mercurial/scmutil.py
--- a/mercurial/scmutil.py	Sat Jun 16 18:36:25 2018 +0530
+++ b/mercurial/scmutil.py	Thu Jun 21 08:22:11 2018 -0700
@@ -842,13 +842,13 @@
             return newphases.get(ctx.node(), ctx.phase())
         for newnode in allnewnodes:
             ctx = unfi[newnode]
+            parentphase = max(phase(p) for p in ctx.parents())
             if targetphase is None:
                 oldphase = max(unfi[oldnode].phase()
                                for oldnode in precursors[newnode])
-                parentphase = max(phase(p) for p in ctx.parents())
                 newphase = max(oldphase, parentphase)
             else:
-                newphase = targetphase
+                newphase = max(targetphase, parentphase)
             newphases[newnode] = newphase
             if newphase > ctx.phase():
                 toretract.setdefault(newphase, []).append(newnode)