changeset 38945:0548f696795b

changegroup: move revision maps to cgpacker And remove the underscores so the variables conform to our naming convention. The logic in _close() should be the only thing warranting scrutiny during review. Differential Revision: https://phab.mercurial-scm.org/D4088
author Gregory Szorc <gregory.szorc@gmail.com>
date Fri, 03 Aug 2018 13:11:13 -0700
parents 379d90327861
children ad4c4cc9a5ac
files mercurial/changegroup.py
diffstat 1 files changed, 26 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/changegroup.py	Fri Aug 03 13:01:53 2018 -0700
+++ b/mercurial/changegroup.py	Fri Aug 03 13:11:13 2018 -0700
@@ -583,12 +583,21 @@
         # controlled via arguments to group() that influence behavior.
         self._changelogdone = False
 
+        # Maps CL revs to per-revlog revisions. Cleared in close() at
+        # the end of each group.
+        self._clrevtolocalrev = {}
+        self._nextclrevtolocalrev = {}
+
+        # Maps changelog nodes to changelog revs. Filled in once
+        # during changelog stage and then left unmodified.
+        self._clnodetorev = {}
+
     def _close(self):
         # Ellipses serving mode.
-        getattr(self, '_clrev_to_localrev', {}).clear()
-        if getattr(self, '_next_clrev_to_localrev', {}):
-            self._clrev_to_localrev = self._next_clrev_to_localrev
-            del self._next_clrev_to_localrev
+        self._clrevtolocalrev.clear()
+        if self._nextclrevtolocalrev:
+            self.clrevtolocalrev = self._nextclrevtolocalrev
+            self._nextclrevtolocalrev.clear()
         self._changelogdone = True
 
         return closechunk()
@@ -615,8 +624,8 @@
         # order that they're introduced in dramatis personae by the
         # changelog, so what we do is we sort the non-changelog histories
         # by the order in which they are used by the changelog.
-        if util.safehasattr(self, '_full_nodes') and self._clnode_to_rev:
-            key = lambda n: self._clnode_to_rev[lookup(n)]
+        if util.safehasattr(self, '_full_nodes') and self._clnodetorev:
+            key = lambda n: self._clnodetorev[lookup(n)]
             return [store.rev(n) for n in sorted(nodelist, key=key)]
 
         # for generaldelta revlogs, we linearize the revs; this will both be
@@ -740,8 +749,8 @@
                     # manifest revnum to look up for this cl revnum. (Part of
                     # mapping changelog ellipsis parents to manifest ellipsis
                     # parents)
-                    self._next_clrev_to_localrev.setdefault(cl.rev(x),
-                                                            mfrevlog.rev(n))
+                    self._nextclrevtolocalrev.setdefault(cl.rev(x),
+                                                         mfrevlog.rev(n))
                 # We can't trust the changed files list in the changeset if the
                 # client requested a shallow clone.
                 if self._isshallow:
@@ -918,7 +927,7 @@
                 for c in commonctxs:
                     try:
                         fnode = c.filenode(fname)
-                        self._clrev_to_localrev[c.rev()] = flog.rev(fnode)
+                        self._clrevtolocalrev[c.rev()] = flog.rev(fnode)
                     except error.ManifestLookupError:
                         pass
                 links = oldlinknodes(flog, fname)
@@ -1063,12 +1072,12 @@
         # build up some mapping information that's useful later. See
         # the local() nested function below.
         if not self._changelogdone:
-            self._clnode_to_rev[linknode] = rev
+            self._clnodetorev[linknode] = rev
             linkrev = rev
-            self._clrev_to_localrev[linkrev] = rev
+            self._clrevtolocalrev[linkrev] = rev
         else:
-            linkrev = self._clnode_to_rev[linknode]
-            self._clrev_to_localrev[linkrev] = rev
+            linkrev = self._clnodetorev[linknode]
+            self._clrevtolocalrev[linkrev] = rev
 
         # This is a node to send in full, because the changeset it
         # corresponds to was a full changeset.
@@ -1100,9 +1109,9 @@
                 # need to store some extra mapping information so that
                 # our contained ellipsis nodes will be able to resolve
                 # their parents.
-                if clrev not in self._clrev_to_localrev:
+                if clrev not in self._clrevtolocalrev:
                     clnode = store.node(clrev)
-                    self._clnode_to_rev[clnode] = clrev
+                    self._clnodetorev[clnode] = clrev
                 return clrev
 
             # Walk the ellipsis-ized changelog breadth-first looking for a
@@ -1119,8 +1128,8 @@
             while walk:
                 p = walk[0]
                 walk = walk[1:]
-                if p in self._clrev_to_localrev:
-                    return self._clrev_to_localrev[p]
+                if p in self._clrevtolocalrev:
+                    return self._clrevtolocalrev[p]
                 elif p in self._full_nodes:
                     walk.extend([pp for pp in self._repo.changelog.parentrevs(p)
                                     if pp != nullrev])
@@ -1400,12 +1409,5 @@
     packer._full_nodes = relevant_nodes
     # Maps ellipsis revs to their roots at the changelog level.
     packer._precomputed_ellipsis = ellipsisroots
-    # Maps CL revs to per-revlog revisions. Cleared in close() at
-    # the end of each group.
-    packer._clrev_to_localrev = {}
-    packer._next_clrev_to_localrev = {}
-    # Maps changelog nodes to changelog revs. Filled in once
-    # during changelog stage and then left unmodified.
-    packer._clnode_to_rev = {}
 
     return packer.generate(common, visitnodes, False, source)