[PATCH 01 of 10 sparse V2] sparse: move config signature logic into core

Gregory Szorc gregory.szorc at gmail.com
Thu Jul 6 23:36:17 UTC 2017


# HG changeset patch
# User Gregory Szorc <gregory.szorc at gmail.com>
# Date 1499382716 25200
#      Thu Jul 06 16:11:56 2017 -0700
# Node ID fea9f0ce2a1c18647087589d5bb23115cdf81419
# Parent  3e1accab7447b67ebb58d5b5da341e553a4cc564
sparse: move config signature logic into core

This is a pretty straightforward port. It will be cleaned up in
a subsequent commit.

diff --git a/hgext/sparse.py b/hgext/sparse.py
--- a/hgext/sparse.py
+++ b/hgext/sparse.py
@@ -413,38 +413,6 @@ def _setupdirstate(ui):
 
 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.
 
@@ -459,7 +427,7 @@ def _wraprepo(ui, repo):
                     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]))
 
diff --git a/mercurial/sparse.py b/mercurial/sparse.py
--- a/mercurial/sparse.py
+++ b/mercurial/sparse.py
@@ -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 activeprofiles(repo):
 def invalidatesignaturecache(repo):
     repo._sparsesignaturecache.clear()
 
+def _checksum(self, path):
+    data = self.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('sparse')
+        except (OSError, IOError):
+            pass
+        cache['signature'] = signature
+
+        tempsignature = 0
+        if includetemp:
+            try:
+                tempsignature = _checksum('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:


More information about the Mercurial-devel mailing list