[PATCH 02 of 10 sparse V2] sparse: clean up config signature code
Martin von Zweigbergk
martinvonz at google.com
Thu Jul 6 19:57:39 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 1499382096 25200
> # Thu Jul 06 16:01:36 2017 -0700
> # Node ID 766f7cb3a49bde4dc740870d6e34848eb64743a6
> # Parent fea9f0ce2a1c18647087589d5bb23115cdf81419
> sparse: clean up config signature code
>
> Before, 0 was being used as the default signature value and we cast
> the int to a string. We also handled I/O exceptions manually.
>
> The new code uses cfs.tryread() so we always feed data into the
> hasher. The empty string does hash and and should be suitable
> for input into a cache key.
>
> The changes made the code simple enough that the separate checksum
> function could be inlined.
>
> diff --git a/mercurial/sparse.py b/mercurial/sparse.py
> --- a/mercurial/sparse.py
> +++ b/mercurial/sparse.py
> @@ -132,10 +132,6 @@ 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.
>
> @@ -148,25 +144,18 @@ def configsignature(repo, includetemp=Tr
> if includetemp:
> tempsignature = cache.get('tempsignature')
> else:
> - tempsignature = 0
> + tempsignature = '0'
'0' is unusual for a placeholder string (it's usually an empty
string), but doesn't matter :-)
>
> if signature is None or (includetemp and tempsignature is None):
> - signature = 0
> - try:
> - signature = _checksum('sparse')
> - except (OSError, IOError):
> - pass
> + signature = hashlib.sha1(repo.vfs.tryread('sparse')).hexdigest()
tryread does not catch other OSError and non-ENOENT IOError. Does that
mean that e.g. a present-but-unreadable .hg/sparse used to be okay,
but will now raise an exception? Desirable or not?
> cache['signature'] = signature
>
> - tempsignature = 0
> if includetemp:
> - try:
> - tempsignature = _checksum('tempsparse')
> - except (OSError, IOError):
> - pass
> + raw = repo.vfs.tryread('tempsparse')
> + tempsignature = hashlib.sha1(raw).hexdigest()
> cache['tempsignature'] = tempsignature
>
> - return '%s %s' % (str(signature), str(tempsignature))
> + return '%s %s' % (signature, tempsignature)
>
> def writeconfig(repo, includes, excludes, profiles):
> """Write the sparse config file given a sparse configuration."""
> _______________________________________________
> 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