mercurial/phases.py
changeset 43077 687b865b95ad
parent 43076 2372284d9457
child 43087 66f2cc210a29
--- a/mercurial/phases.py	Sun Oct 06 09:45:02 2019 -0400
+++ b/mercurial/phases.py	Sun Oct 06 09:48:39 2019 -0400
@@ -121,7 +121,7 @@
     util,
 )
 
-_fphasesentry = struct.Struct('>i20s')
+_fphasesentry = struct.Struct(b'>i20s')
 
 INTERNAL_FLAG = 64  # Phases for mercurial internal usage only
 HIDEABLE_FLAG = 32  # Phases that are hideable
@@ -133,11 +133,11 @@
 allphases = range(internal + 1)
 trackedphases = allphases[1:]
 # record phase names
-cmdphasenames = ['public', 'draft', 'secret']  # known to `hg phase` command
+cmdphasenames = [b'public', b'draft', b'secret']  # known to `hg phase` command
 phasenames = [None] * len(allphases)
 phasenames[: len(cmdphasenames)] = cmdphasenames
-phasenames[archived] = 'archived'
-phasenames[internal] = 'internal'
+phasenames[archived] = b'archived'
+phasenames[internal] = b'internal'
 # record phase property
 mutablephases = tuple(allphases[1:])
 remotehiddenphases = tuple(allphases[2:])
@@ -146,7 +146,7 @@
 
 def supportinternal(repo):
     """True if the internal phase can be used on a repository"""
-    return 'internal-phase' in repo.requirements
+    return b'internal-phase' in repo.requirements
 
 
 def _readroots(repo, phasedefaults=None):
@@ -164,7 +164,7 @@
     dirty = False
     roots = [set() for i in allphases]
     try:
-        f, pending = txnutil.trypending(repo.root, repo.svfs, 'phaseroots')
+        f, pending = txnutil.trypending(repo.root, repo.svfs, b'phaseroots')
         try:
             for line in f:
                 phase, nh = line.split()
@@ -191,7 +191,7 @@
     for phase, nodes in enumerate(phasemapping):
         for head in nodes:
             binarydata.append(_fphasesentry.pack(phase, head))
-    return ''.join(binarydata)
+    return b''.join(binarydata)
 
 
 def binarydecode(stream):
@@ -204,7 +204,7 @@
         entry = stream.read(entrysize)
         if len(entry) < entrysize:
             if entry:
-                raise error.Abort(_('bad phase-heads stream'))
+                raise error.Abort(_(b'bad phase-heads stream'))
             break
         phase, node = _fphasesentry.unpack(entry)
         headsbyphase[phase].append(node)
@@ -281,11 +281,11 @@
     def replace(self, phcache):
         """replace all values in 'self' with content of phcache"""
         for a in (
-            'phaseroots',
-            'dirty',
-            'opener',
-            '_loadedrevslen',
-            '_phasesets',
+            b'phaseroots',
+            b'dirty',
+            b'opener',
+            b'_loadedrevslen',
+            b'_phasesets',
         ):
             setattr(self, a, getattr(phcache, a))
 
@@ -336,7 +336,7 @@
         if rev == nullrev:
             return public
         if rev < nullrev:
-            raise ValueError(_('cannot lookup negative revision'))
+            raise ValueError(_(b'cannot lookup negative revision'))
         if rev >= self._loadedrevslen:
             self.invalidate()
             self.loadphaserevs(repo)
@@ -348,7 +348,7 @@
     def write(self):
         if not self.dirty:
             return
-        f = self.opener('phaseroots', 'w', atomictemp=True, checkambig=True)
+        f = self.opener(b'phaseroots', b'w', atomictemp=True, checkambig=True)
         try:
             self._write(f)
         finally:
@@ -357,7 +357,7 @@
     def _write(self, fp):
         for phase, roots in enumerate(self.phaseroots):
             for h in sorted(roots):
-                fp.write('%i %s\n' % (phase, hex(h)))
+                fp.write(b'%i %s\n' % (phase, hex(h)))
         self.dirty = False
 
     def _updateroots(self, phase, newroots, tr):
@@ -365,14 +365,14 @@
         self.invalidate()
         self.dirty = True
 
-        tr.addfilegenerator('phase', ('phaseroots',), self._write)
-        tr.hookargs['phases_moved'] = '1'
+        tr.addfilegenerator(b'phase', (b'phaseroots',), self._write)
+        tr.hookargs[b'phases_moved'] = b'1'
 
     def registernew(self, repo, tr, targetphase, nodes):
         repo = repo.unfiltered()
         self._retractboundary(repo, tr, targetphase, nodes)
-        if tr is not None and 'phases' in tr.changes:
-            phasetracking = tr.changes['phases']
+        if tr is not None and b'phases' in tr.changes:
+            phasetracking = tr.changes[b'phases']
             torev = repo.changelog.rev
             phase = self.phase
             for n in nodes:
@@ -395,7 +395,7 @@
         if tr is None:
             phasetracking = None
         else:
-            phasetracking = tr.changes.get('phases')
+            phasetracking = tr.changes.get(b'phases')
 
         repo = repo.unfiltered()
 
@@ -411,7 +411,7 @@
 
             olds = self.phaseroots[phase]
 
-            affected = repo.revs('%ln::%ln', olds, nodes)
+            affected = repo.revs(b'%ln::%ln', olds, nodes)
             changes.update(affected)
             if dryrun:
                 continue
@@ -422,7 +422,7 @@
 
             roots = set(
                 ctx.node()
-                for ctx in repo.set('roots((%ln::) - %ld)', olds, affected)
+                for ctx in repo.set(b'roots((%ln::) - %ld)', olds, affected)
             )
             if olds != roots:
                 self._updateroots(phase, roots, tr)
@@ -440,7 +440,7 @@
         if tr is None:
             phasetracking = None
         else:
-            phasetracking = tr.changes.get('phases')
+            phasetracking = tr.changes.get(b'phases')
         repo = repo.unfiltered()
         if (
             self._retractboundary(repo, tr, targetphase, nodes)
@@ -450,13 +450,13 @@
             # find the affected revisions
             new = self.phaseroots[targetphase]
             old = oldroots[targetphase]
-            affected = set(repo.revs('(%ln::) - (%ln::)', new, old))
+            affected = set(repo.revs(b'(%ln::) - (%ln::)', new, old))
 
             # find the phase of the affected revision
             for phase in pycompat.xrange(targetphase, -1, -1):
                 if phase:
                     roots = oldroots[phase]
-                    revs = set(repo.revs('%ln::%ld', roots, affected))
+                    revs = set(repo.revs(b'%ln::%ld', roots, affected))
                     affected -= revs
                 else:  # public phase
                     revs = affected
@@ -469,7 +469,7 @@
         # phaseroots values, replace them.
         if targetphase in (archived, internal) and not supportinternal(repo):
             name = phasenames[targetphase]
-            msg = 'this repository does not support the %s phase' % name
+            msg = b'this repository does not support the %s phase' % name
             raise error.ProgrammingError(msg)
 
         repo = repo.unfiltered()
@@ -481,7 +481,7 @@
         if newroots:
 
             if nullid in newroots:
-                raise error.Abort(_('cannot change null revision phase'))
+                raise error.Abort(_(b'cannot change null revision phase'))
             currentroots = currentroots.copy()
             currentroots.update(newroots)
 
@@ -491,7 +491,7 @@
             aboveroots = [
                 n for n in currentroots if repo[n].rev() >= minnewroot
             ]
-            updatedroots = repo.set('roots(%ln::)', aboveroots)
+            updatedroots = repo.set(b'roots(%ln::)', aboveroots)
 
             finalroots = set(
                 n for n in currentroots if repo[n].rev() < minnewroot
@@ -514,7 +514,7 @@
             if missing:
                 for mnode in missing:
                     repo.ui.debug(
-                        'removing unknown node %s from %i-phase boundary\n'
+                        b'removing unknown node %s from %i-phase boundary\n'
                         % (short(mnode), phase)
                     )
                 nodes.symmetric_difference_update(missing)
@@ -581,7 +581,7 @@
     """List phases root for serialization over pushkey"""
     # Use ordered dictionary so behavior is deterministic.
     keys = util.sortdict()
-    value = '%i' % draft
+    value = b'%i' % draft
     cl = repo.unfiltered().changelog
     for root in repo._phasecache.phaseroots[draft]:
         if repo._phasecache.phase(repo, cl.rev(root)) <= draft:
@@ -604,7 +604,7 @@
         #
         # The server can't handle it on it's own as it has no idea of
         # client phase data.
-        keys['publishing'] = 'True'
+        keys[b'publishing'] = b'True'
     return keys
 
 
@@ -616,7 +616,7 @@
         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:
+            with repo.transaction(b'pushkey-phase') as tr:
                 advanceboundary(repo, tr, newphase, [bin(nhex)])
             return True
         elif currentphase == newphase:
@@ -638,7 +638,7 @@
     # No need to keep track of secret phase; any heads in the subset that
     # are not mentioned are implicitly secret.
     for phase in allphases[:secret]:
-        revset = "heads(%%ln & %s())" % phasenames[phase]
+        revset = b"heads(%%ln & %s())" % phasenames[phase]
         headsbyphase[phase] = [cl.node(r) for r in repo.revs(revset, subset)]
     return headsbyphase
 
@@ -651,7 +651,7 @@
     # to update. This avoid creating empty transaction during no-op operation.
 
     for phase in allphases[:-1]:
-        revset = '%ln - _phase(%s)'
+        revset = b'%ln - _phase(%s)'
         heads = [c.node() for c in repo.set(revset, headsbyphase[phase], phase)]
         if heads:
             advanceboundary(repo, trgetter(), phase, heads)
@@ -670,14 +670,17 @@
     draftroots = []
     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 == b'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')
+                    _(
+                        b'ignoring inconsistent public root'
+                        b' from remote: %s\n'
+                    )
                     % nhex
                 )
         elif phase == draft:
@@ -685,7 +688,7 @@
                 draftroots.append(node)
         else:
             repo.ui.warn(
-                _('ignoring unexpected root from remote: %i %s\n')
+                _(b'ignoring unexpected root from remote: %i %s\n')
                 % (phase, nhex)
             )
     # compute heads
@@ -706,12 +709,12 @@
         unfi = repo.unfiltered()
         self._allremoteroots = remoteroots
 
-        self.publishing = remoteroots.get('publishing', False)
+        self.publishing = remoteroots.get(b'publishing', False)
 
         ana = analyzeremotephases(repo, remotesubset, remoteroots)
         self.publicheads, self.draftroots = ana
         # Get the list of all "heads" revs draft on remote
-        dheads = unfi.set('heads(%ln::%ln)', self.draftroots, remotesubset)
+        dheads = unfi.set(b'heads(%ln::%ln)', self.draftroots, remotesubset)
         self.draftheads = [c.node() for c in dheads]
 
 
@@ -735,19 +738,19 @@
     new_heads = set(rev(n) for n in heads if n != nullid)
     roots = [rev(n) for n in roots]
     # compute the area we need to remove
-    affected_zone = repo.revs("(%ld::%ld)", roots, new_heads)
+    affected_zone = repo.revs(b"(%ld::%ld)", roots, new_heads)
     # heads in the area are no longer heads
     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
+        b"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
         new_heads.update(candidates)
-        prunestart = repo.revs("parents(%ld) and not null", new_heads)
+        prunestart = repo.revs(b"parents(%ld) and not null", new_heads)
         pruned = dagop.reachableroots(repo, candidates, prunestart)
         new_heads.difference_update(pruned)
 
@@ -760,14 +763,14 @@
     Handle all possible values for the phases.new-commit options.
 
     """
-    v = ui.config('phases', 'new-commit')
+    v = ui.config(b'phases', b'new-commit')
     try:
         return phasenames.index(v)
     except ValueError:
         try:
             return int(v)
         except ValueError:
-            msg = _("phases.new-commit: not a valid phase name ('%s')")
+            msg = _(b"phases.new-commit: not a valid phase name ('%s')")
             raise error.ConfigError(msg % v)
 
 
@@ -778,7 +781,7 @@
 
 def preparehookargs(node, old, new):
     if old is None:
-        old = ''
+        old = b''
     else:
         old = phasenames[old]
-    return {'node': node, 'oldphase': old, 'phase': phasenames[new]}
+    return {b'node': node, b'oldphase': old, b'phase': phasenames[new]}