sparse: move config signature logic into core
authorGregory Szorc <gregory.szorc@gmail.com>
Thu, 06 Jul 2017 16:11:56 -0700
changeset 33317 df1287268cc0
parent 33316 310f7bcab50b
child 33318 526255fe7899
sparse: move config signature logic into core This is a pretty straightforward port. It will be cleaned up in a subsequent commit.
hgext/sparse.py
mercurial/sparse.py
--- a/hgext/sparse.py	Thu Jul 06 17:31:33 2017 -0700
+++ b/hgext/sparse.py	Thu Jul 06 16:11:56 2017 -0700
@@ -75,7 +75,6 @@
 from __future__ import absolute_import
 
 import collections
-import hashlib
 import os
 
 from mercurial.i18n import _
@@ -405,38 +404,6 @@
 
 def _wraprepo(ui, repo):
     class SparseRepo(repo.__class__):
-        def _sparsechecksum(self, path):
-            data = self.vfs.read(path)
-            return hashlib.sha1(data).hexdigest()
-
-        def _sparsesignature(self, includetemp=True):
-            """Returns the signature string representing the contents of the
-            current project sparse configuration. This can be used to cache the
-            sparse matcher for a given set of revs."""
-            signaturecache = self._sparsesignaturecache
-            signature = signaturecache.get('signature')
-            if includetemp:
-                tempsignature = signaturecache.get('tempsignature')
-            else:
-                tempsignature = 0
-
-            if signature is None or (includetemp and tempsignature is None):
-                signature = 0
-                try:
-                    signature = self._sparsechecksum('sparse')
-                except (OSError, IOError):
-                    pass
-                signaturecache['signature'] = signature
-
-                tempsignature = 0
-                if includetemp:
-                    try:
-                        tempsignature = self._sparsechecksum('tempsparse')
-                    except (OSError, IOError):
-                        pass
-                    signaturecache['tempsignature'] = tempsignature
-            return '%s %s' % (str(signature), str(tempsignature))
-
         def sparsematch(self, *revs, **kwargs):
             """Returns the sparse match function for the given revs.
 
@@ -451,7 +418,7 @@
                     self.dirstate.parents() if node != nullid]
 
             includetemp = kwargs.get('includetemp', True)
-            signature = self._sparsesignature(includetemp=includetemp)
+            signature = sparse.configsignature(self, includetemp=includetemp)
 
             key = '%s %s' % (str(signature), ' '.join([str(r) for r in revs]))
 
--- a/mercurial/sparse.py	Thu Jul 06 17:31:33 2017 -0700
+++ b/mercurial/sparse.py	Thu Jul 06 16:11:56 2017 -0700
@@ -7,6 +7,8 @@
 
 from __future__ import absolute_import
 
+import hashlib
+
 from .i18n import _
 from .node import nullid
 from . import (
@@ -130,6 +132,42 @@
 def invalidatesignaturecache(repo):
     repo._sparsesignaturecache.clear()
 
+def _checksum(repo, path):
+    data = repo.vfs.read(path)
+    return hashlib.sha1(data).hexdigest()
+
+def configsignature(repo, includetemp=True):
+    """Obtain the signature string for the current sparse configuration.
+
+    This is used to construct a cache key for matchers.
+    """
+    cache = repo._sparsesignaturecache
+
+    signature = cache.get('signature')
+
+    if includetemp:
+        tempsignature = cache.get('tempsignature')
+    else:
+        tempsignature = 0
+
+    if signature is None or (includetemp and tempsignature is None):
+        signature = 0
+        try:
+            signature = _checksum(repo, 'sparse')
+        except (OSError, IOError):
+            pass
+        cache['signature'] = signature
+
+        tempsignature = 0
+        if includetemp:
+            try:
+                tempsignature = _checksum(repo, 'tempsparse')
+            except (OSError, IOError):
+                pass
+            cache['tempsignature'] = tempsignature
+
+    return '%s %s' % (str(signature), str(tempsignature))
+
 def writeconfig(repo, includes, excludes, profiles):
     """Write the sparse config file given a sparse configuration."""
     with repo.vfs('sparse', 'wb') as fh: