diff mercurial/phases.py @ 43076:2372284d9457

formatting: blacken the codebase This is using my patch to black (https://github.com/psf/black/pull/826) so we don't un-wrap collection literals. Done with: hg files 'set:**.py - mercurial/thirdparty/** - "contrib/python-zstandard/**"' | xargs black -S # skip-blame mass-reformatting only # no-check-commit reformats foo_bar functions Differential Revision: https://phab.mercurial-scm.org/D6971
author Augie Fackler <augie@google.com>
date Sun, 06 Oct 2019 09:45:02 -0400
parents ab893a99b645
children 687b865b95ad
line wrap: on
line diff
--- a/mercurial/phases.py	Sat Oct 05 10:29:34 2019 -0400
+++ b/mercurial/phases.py	Sun Oct 06 09:45:02 2019 -0400
@@ -123,8 +123,8 @@
 
 _fphasesentry = struct.Struct('>i20s')
 
-INTERNAL_FLAG = 64 # Phases for mercurial internal usage only
-HIDEABLE_FLAG = 32 # Phases that are hideable
+INTERNAL_FLAG = 64  # Phases for mercurial internal usage only
+HIDEABLE_FLAG = 32  # Phases that are hideable
 
 # record phase index
 public, draft, secret = range(3)
@@ -135,7 +135,7 @@
 # record phase names
 cmdphasenames = ['public', 'draft', 'secret']  # known to `hg phase` command
 phasenames = [None] * len(allphases)
-phasenames[:len(cmdphasenames)] = cmdphasenames
+phasenames[: len(cmdphasenames)] = cmdphasenames
 phasenames[archived] = 'archived'
 phasenames[internal] = 'internal'
 # record phase property
@@ -143,10 +143,12 @@
 remotehiddenphases = tuple(allphases[2:])
 localhiddenphases = tuple(p for p in allphases if p & HIDEABLE_FLAG)
 
+
 def supportinternal(repo):
     """True if the internal phase can be used on a repository"""
     return 'internal-phase' in repo.requirements
 
+
 def _readroots(repo, phasedefaults=None):
     """Read phase roots from disk
 
@@ -178,6 +180,7 @@
         dirty = True
     return roots, dirty
 
+
 def binaryencode(phasemapping):
     """encode a 'phase -> nodes' mapping into a binary stream
 
@@ -190,6 +193,7 @@
             binarydata.append(_fphasesentry.pack(phase, head))
     return ''.join(binarydata)
 
+
 def binarydecode(stream):
     """decode a binary stream into a 'phase -> nodes' mapping
 
@@ -206,6 +210,7 @@
         headsbyphase[phase].append(node)
     return headsbyphase
 
+
 def _trackphasechange(data, rev, old, new):
     """add a phase move the <data> dictionnary
 
@@ -218,6 +223,7 @@
         old = existing[0]
     data[rev] = (old, new)
 
+
 class phasecache(object):
     def __init__(self, repo, phasedefaults, _load=True):
         if _load:
@@ -230,7 +236,7 @@
 
     def getrevset(self, repo, phases, subset=None):
         """return a smartset for the given phases"""
-        self.loadphaserevs(repo) # ensure phase's sets are loaded
+        self.loadphaserevs(repo)  # ensure phase's sets are loaded
         phases = set(phases)
         if public not in phases:
             # fast path: _phasesets contains the interesting sets,
@@ -274,16 +280,22 @@
 
     def replace(self, phcache):
         """replace all values in 'self' with content of phcache"""
-        for a in ('phaseroots', 'dirty', 'opener', '_loadedrevslen',
-                  '_phasesets'):
+        for a in (
+            'phaseroots',
+            'dirty',
+            'opener',
+            '_loadedrevslen',
+            '_phasesets',
+        ):
             setattr(self, a, getattr(phcache, a))
 
     def _getphaserevsnative(self, repo):
         repo = repo.unfiltered()
         nativeroots = []
         for phase in trackedphases:
-            nativeroots.append(pycompat.maplist(repo.changelog.rev,
-                                                self.phaseroots[phase]))
+            nativeroots.append(
+                pycompat.maplist(repo.changelog.rev, self.phaseroots[phase])
+            )
         return repo.changelog.computephases(nativeroots)
 
     def _computephaserevspure(self, repo):
@@ -387,14 +399,15 @@
 
         repo = repo.unfiltered()
 
-        changes = set() # set of revisions to be changed
-        delroots = [] # set of root deleted by this path
+        changes = set()  # set of revisions to be changed
+        delroots = []  # set of root deleted by this path
         for phase in pycompat.xrange(targetphase + 1, len(allphases)):
             # filter nodes that are not in a compatible phase already
-            nodes = [n for n in nodes
-                     if self.phase(repo, repo[n].rev()) >= phase]
+            nodes = [
+                n for n in nodes if self.phase(repo, repo[n].rev()) >= phase
+            ]
             if not nodes:
-                break # no roots to move anymore
+                break  # no roots to move anymore
 
             olds = self.phaseroots[phase]
 
@@ -403,11 +416,14 @@
             if dryrun:
                 continue
             for r in affected:
-                _trackphasechange(phasetracking, r, self.phase(repo, r),
-                                  targetphase)
+                _trackphasechange(
+                    phasetracking, r, self.phase(repo, r), targetphase
+                )
 
-            roots = set(ctx.node() for ctx in repo.set(
-                    'roots((%ln::) - %ld)', olds, affected))
+            roots = set(
+                ctx.node()
+                for ctx in repo.set('roots((%ln::) - %ld)', olds, affected)
+            )
             if olds != roots:
                 self._updateroots(phase, roots, tr)
                 # some roots may need to be declared for lower phases
@@ -420,14 +436,16 @@
         return changes
 
     def retractboundary(self, repo, tr, targetphase, nodes):
-        oldroots = self.phaseroots[:targetphase + 1]
+        oldroots = self.phaseroots[: targetphase + 1]
         if tr is None:
             phasetracking = None
         else:
             phasetracking = tr.changes.get('phases')
         repo = repo.unfiltered()
-        if (self._retractboundary(repo, tr, targetphase, nodes)
-            and phasetracking is not None):
+        if (
+            self._retractboundary(repo, tr, targetphase, nodes)
+            and phasetracking is not None
+        ):
 
             # find the affected revisions
             new = self.phaseroots[targetphase]
@@ -440,7 +458,7 @@
                     roots = oldroots[phase]
                     revs = set(repo.revs('%ln::%ld', roots, affected))
                     affected -= revs
-                else: # public phase
+                else:  # public phase
                     revs = affected
                 for r in revs:
                     _trackphasechange(phasetracking, r, phase, targetphase)
@@ -457,8 +475,9 @@
         repo = repo.unfiltered()
         currentroots = self.phaseroots[targetphase]
         finalroots = oldroots = set(currentroots)
-        newroots = [n for n in nodes
-                    if self.phase(repo, repo[n].rev()) < targetphase]
+        newroots = [
+            n for n in nodes if self.phase(repo, repo[n].rev()) < targetphase
+        ]
         if newroots:
 
             if nullid in newroots:
@@ -469,12 +488,14 @@
             # Only compute new roots for revs above the roots that are being
             # retracted.
             minnewroot = min(repo[n].rev() for n in newroots)
-            aboveroots = [n for n in currentroots
-                          if repo[n].rev() >= minnewroot]
+            aboveroots = [
+                n for n in currentroots if repo[n].rev() >= minnewroot
+            ]
             updatedroots = repo.set('roots(%ln::)', aboveroots)
 
-            finalroots = set(n for n in currentroots if repo[n].rev() <
-                             minnewroot)
+            finalroots = set(
+                n for n in currentroots if repo[n].rev() < minnewroot
+            )
             finalroots.update(ctx.node() for ctx in updatedroots)
         if finalroots != oldroots:
             self._updateroots(targetphase, finalroots, tr)
@@ -487,14 +508,15 @@
         Nothing is lost as unknown nodes only hold data for their descendants.
         """
         filtered = False
-        nodemap = repo.changelog.nodemap # to filter unknown nodes
+        nodemap = repo.changelog.nodemap  # to filter unknown nodes
         for phase, nodes in enumerate(self.phaseroots):
             missing = sorted(node for node in nodes if node not in nodemap)
             if missing:
                 for mnode in missing:
                     repo.ui.debug(
                         'removing unknown node %s from %i-phase boundary\n'
-                        % (short(mnode), phase))
+                        % (short(mnode), phase)
+                    )
                 nodes.symmetric_difference_update(missing)
                 filtered = True
         if filtered:
@@ -509,6 +531,7 @@
         # (see branchmap one)
         self.invalidate()
 
+
 def advanceboundary(repo, tr, targetphase, nodes, dryrun=None):
     """Add nodes to a phase changing other nodes phases if necessary.
 
@@ -522,12 +545,14 @@
     Returns a set of revs whose phase is changed or should be changed
     """
     phcache = repo._phasecache.copy()
-    changes = phcache.advanceboundary(repo, tr, targetphase, nodes,
-                                      dryrun=dryrun)
+    changes = phcache.advanceboundary(
+        repo, tr, targetphase, nodes, dryrun=dryrun
+    )
     if not dryrun:
         repo._phasecache.replace(phcache)
     return changes
 
+
 def retractboundary(repo, tr, targetphase, nodes):
     """Set nodes back to a phase changing other nodes phases if
     necessary.
@@ -540,6 +565,7 @@
     phcache.retractboundary(repo, tr, targetphase, nodes)
     repo._phasecache.replace(phcache)
 
+
 def registernew(repo, tr, targetphase, nodes):
     """register a new revision and its phase
 
@@ -550,6 +576,7 @@
     phcache.registernew(repo, tr, targetphase, nodes)
     repo._phasecache.replace(phcache)
 
+
 def listphases(repo):
     """List phases root for serialization over pushkey"""
     # Use ordered dictionary so behavior is deterministic.
@@ -580,13 +607,14 @@
         keys['publishing'] = 'True'
     return keys
 
+
 def pushphase(repo, nhex, oldphasestr, newphasestr):
     """List phases root for serialization over pushkey"""
     repo = repo.unfiltered()
     with repo.lock():
         currentphase = repo[nhex].phase()
-        newphase = abs(int(newphasestr)) # let's avoid negative index surprise
-        oldphase = abs(int(oldphasestr)) # let's avoid negative index surprise
+        newphase = abs(int(newphasestr))  # let's avoid negative index surprise
+        oldphase = abs(int(oldphasestr))  # let's avoid negative index surprise
         if currentphase == oldphase and newphase < oldphase:
             with repo.transaction('pushkey-phase') as tr:
                 advanceboundary(repo, tr, newphase, [bin(nhex)])
@@ -597,6 +625,7 @@
         else:
             return False
 
+
 def subsetphaseheads(repo, subset):
     """Finds the phase heads for a subset of a history
 
@@ -613,6 +642,7 @@
         headsbyphase[phase] = [cl.node(r) for r in repo.revs(revset, subset)]
     return headsbyphase
 
+
 def updatephases(repo, trgetter, headsbyphase):
     """Updates the repo with the given phase heads"""
     # Now advance phase boundaries of all but secret phase
@@ -626,6 +656,7 @@
         if heads:
             advanceboundary(repo, trgetter(), phase, heads)
 
+
 def analyzeremotephases(repo, subset, roots):
     """Compute phases heads and root in a subset of node from root dict
 
@@ -637,26 +668,31 @@
     repo = repo.unfiltered()
     # build list from dictionary
     draftroots = []
-    nodemap = repo.changelog.nodemap # to filter unknown nodes
+    nodemap = repo.changelog.nodemap  # to filter unknown nodes
     for nhex, phase in roots.iteritems():
-        if nhex == 'publishing': # ignore data related to publish option
+        if nhex == 'publishing':  # ignore data related to publish option
             continue
         node = bin(nhex)
         phase = int(phase)
         if phase == public:
             if node != nullid:
-                repo.ui.warn(_('ignoring inconsistent public root'
-                               ' from remote: %s\n') % nhex)
+                repo.ui.warn(
+                    _('ignoring inconsistent public root' ' from remote: %s\n')
+                    % nhex
+                )
         elif phase == draft:
             if node in nodemap:
                 draftroots.append(node)
         else:
-            repo.ui.warn(_('ignoring unexpected root from remote: %i %s\n')
-                         % (phase, nhex))
+            repo.ui.warn(
+                _('ignoring unexpected root from remote: %i %s\n')
+                % (phase, nhex)
+            )
     # compute heads
     publicheads = newheads(repo, subset, draftroots)
     return publicheads, draftroots
 
+
 class remotephasessummary(object):
     """summarize phase information on the remote side
 
@@ -678,6 +714,7 @@
         dheads = unfi.set('heads(%ln::%ln)', self.draftroots, remotesubset)
         self.draftheads = [c.node() for c in dheads]
 
+
 def newheads(repo, heads, roots):
     """compute new head of a subset minus another
 
@@ -703,8 +740,9 @@
     new_heads.difference_update(affected_zone)
     # revisions in the area have children outside of it,
     # They might be new heads
-    candidates = repo.revs("parents(%ld + (%ld and merge())) and not null",
-                           roots, affected_zone)
+    candidates = repo.revs(
+        "parents(%ld + (%ld and merge())) and not null", roots, affected_zone
+    )
     candidates -= affected_zone
     if new_heads or candidates:
         # remove candidate that are ancestors of other heads
@@ -715,6 +753,7 @@
 
     return pycompat.maplist(cl.node, sorted(new_heads))
 
+
 def newcommitphase(ui):
     """helper to get the target phase of new commit
 
@@ -731,15 +770,15 @@
             msg = _("phases.new-commit: not a valid phase name ('%s')")
             raise error.ConfigError(msg % v)
 
+
 def hassecret(repo):
     """utility function that check if a repo have any secret changeset."""
     return bool(repo._phasecache.phaseroots[2])
 
+
 def preparehookargs(node, old, new):
     if old is None:
         old = ''
     else:
         old = phasenames[old]
-    return {'node': node,
-            'oldphase': old,
-            'phase': phasenames[new]}
+    return {'node': node, 'oldphase': old, 'phase': phasenames[new]}