# HG changeset patch # User Gregory Szorc <gregory.sz...@gmail.com> # Date 1498935399 25200 # Sat Jul 01 11:56:39 2017 -0700 # Node ID c31af7dfe7370ade61a54c2c8191329083b7d7a2 # Parent 9d59302d25b9d53a8e72fbd110fb12d4aa52cf3f sparse: refactor sparsechecksum()
This was relying on garbage collection to close the opened file, which is a bug. Both callers simply called into self.vfs to resolve the path. So refactor to use the vfs layer. While we're here, rename the method to reflect it is internal and to break anyone relying on the old behavior. diff --git a/hgext/sparse.py b/hgext/sparse.py --- a/hgext/sparse.py +++ b/hgext/sparse.py @@ -493,9 +493,9 @@ def _wraprepo(ui, repo): # resolve and can be slow. return self.filectx(profile, changeid=changeid).data() - def sparsechecksum(self, filepath): - fh = open(filepath) - return hashlib.sha1(fh.read()).hexdigest() + 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 @@ -511,8 +511,7 @@ def _wraprepo(ui, repo): if signature is None or (includetemp and tempsignature is None): signature = 0 try: - sparsepath = self.vfs.join('sparse') - signature = self.sparsechecksum(sparsepath) + signature = self._sparsechecksum('sparse') except (OSError, IOError): pass signaturecache['signature'] = signature @@ -520,8 +519,7 @@ def _wraprepo(ui, repo): tempsignature = 0 if includetemp: try: - tempsparsepath = self.vfs.join('tempsparse') - tempsignature = self.sparsechecksum(tempsparsepath) + tempsignature = self._sparsechecksum('tempsparse') except (OSError, IOError): pass signaturecache['tempsignature'] = tempsignature _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel