[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