From patchwork Fri Jul 7 01:18:23 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [02,of,11,sparse,V3] sparse: move config signature logic into core From: Gregory Szorc X-Patchwork-Id: 22073 Message-Id: <01f89a68e9269eec2492.1499390303@ubuntu-vm-main> To: mercurial-devel@mercurial-scm.org Date: Thu, 06 Jul 2017 18:18:23 -0700 # HG changeset patch # User Gregory Szorc # Date 1499382716 25200 # Thu Jul 06 16:11:56 2017 -0700 # Node ID 01f89a68e9269eec249207478e1e8344e90b7496 # Parent 310f7bcab50bc92d6ff93ee1c6b055a636925123 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 @@ -405,38 +405,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. @@ -451,7 +419,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: