[PATCH 01 of 10 sparse V2] sparse: move config signature logic into core
Martin von Zweigbergk
martinvonz at google.com
Thu Jul 6 20:16:09 EDT 2017
On Thu, Jul 6, 2017 at 4:36 PM, Gregory Szorc <gregory.szorc at gmail.com> wrote:
> # 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):
Should probably rename "self" to "repo" here.
> + 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')
Need to pass repo to _checksum() here (tests fail).
> + 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 at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list