Mercurial > hg
comparison mercurial/sparse.py @ 33318:526255fe7899
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.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Thu, 06 Jul 2017 16:01:36 -0700 |
parents | df1287268cc0 |
children | 153456f02426 |
comparison
equal
deleted
inserted
replaced
33317:df1287268cc0 | 33318:526255fe7899 |
---|---|
130 return profiles | 130 return profiles |
131 | 131 |
132 def invalidatesignaturecache(repo): | 132 def invalidatesignaturecache(repo): |
133 repo._sparsesignaturecache.clear() | 133 repo._sparsesignaturecache.clear() |
134 | 134 |
135 def _checksum(repo, path): | |
136 data = repo.vfs.read(path) | |
137 return hashlib.sha1(data).hexdigest() | |
138 | |
139 def configsignature(repo, includetemp=True): | 135 def configsignature(repo, includetemp=True): |
140 """Obtain the signature string for the current sparse configuration. | 136 """Obtain the signature string for the current sparse configuration. |
141 | 137 |
142 This is used to construct a cache key for matchers. | 138 This is used to construct a cache key for matchers. |
143 """ | 139 """ |
146 signature = cache.get('signature') | 142 signature = cache.get('signature') |
147 | 143 |
148 if includetemp: | 144 if includetemp: |
149 tempsignature = cache.get('tempsignature') | 145 tempsignature = cache.get('tempsignature') |
150 else: | 146 else: |
151 tempsignature = 0 | 147 tempsignature = '0' |
152 | 148 |
153 if signature is None or (includetemp and tempsignature is None): | 149 if signature is None or (includetemp and tempsignature is None): |
154 signature = 0 | 150 signature = hashlib.sha1(repo.vfs.tryread('sparse')).hexdigest() |
155 try: | |
156 signature = _checksum(repo, 'sparse') | |
157 except (OSError, IOError): | |
158 pass | |
159 cache['signature'] = signature | 151 cache['signature'] = signature |
160 | 152 |
161 tempsignature = 0 | |
162 if includetemp: | 153 if includetemp: |
163 try: | 154 raw = repo.vfs.tryread('tempsparse') |
164 tempsignature = _checksum(repo, 'tempsparse') | 155 tempsignature = hashlib.sha1(raw).hexdigest() |
165 except (OSError, IOError): | |
166 pass | |
167 cache['tempsignature'] = tempsignature | 156 cache['tempsignature'] = tempsignature |
168 | 157 |
169 return '%s %s' % (str(signature), str(tempsignature)) | 158 return '%s %s' % (signature, tempsignature) |
170 | 159 |
171 def writeconfig(repo, includes, excludes, profiles): | 160 def writeconfig(repo, includes, excludes, profiles): |
172 """Write the sparse config file given a sparse configuration.""" | 161 """Write the sparse config file given a sparse configuration.""" |
173 with repo.vfs('sparse', 'wb') as fh: | 162 with repo.vfs('sparse', 'wb') as fh: |
174 for p in sorted(profiles): | 163 for p in sorted(profiles): |