# HG changeset patch # User Gregory Szorc <gregory.sz...@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: _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel