Mercurial > public > mercurial-scm > hg
comparison mercurial/branching/rev_cache.py @ 51899:9f7cf869e9f4
rev-branch-cache: add a way to force rewrite of the cache
This seems useful to be able to do this, for example during strip.
This align with the intended expressed in the `test-branches.t` test. This will
help use being more confident about future changes in the series.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 23 Sep 2024 23:52:45 +0200 |
parents | 1eb2317c1762 |
children | 7032da075572 |
comparison
equal
deleted
inserted
replaced
51898:1eb2317c1762 | 51899:9f7cf869e9f4 |
---|---|
168 ) | 168 ) |
169 if self._rbcrevslen == 0: | 169 if self._rbcrevslen == 0: |
170 self._names = [] | 170 self._names = [] |
171 self._rbcnamescount = len(self._names) # number of names read at | 171 self._rbcnamescount = len(self._names) # number of names read at |
172 # _rbcsnameslen | 172 # _rbcsnameslen |
173 self._force_overwrite = False | |
173 | 174 |
174 def _clear(self): | 175 def _clear(self): |
175 self._rbcsnameslen = 0 | 176 self._rbcsnameslen = 0 |
176 del self._names[:] | 177 del self._names[:] |
177 self._rbcnamescount = 0 | 178 self._rbcnamescount = 0 |
178 self._rbcrevslen = len(self._repo.changelog) | 179 self._rbcrevslen = len(self._repo.changelog) |
179 self._rbcrevs = rbcrevs(bytearray(self._rbcrevslen * _rbcrecsize)) | 180 self._rbcrevs = rbcrevs(bytearray(self._rbcrevslen * _rbcrecsize)) |
180 util.clearcachedproperty(self, b'_namesreverse') | 181 util.clearcachedproperty(self, b'_namesreverse') |
182 self._force_overwrite = True | |
183 | |
184 def invalidate(self, rev=0): | |
185 self._rbcrevslen = rev | |
186 self._rbcrevs.truncate(rev) | |
187 self._force_overwrite = True | |
181 | 188 |
182 @util.propertycache | 189 @util.propertycache |
183 def _namesreverse(self): | 190 def _namesreverse(self): |
184 return {b: r for r, b in enumerate(self._names)} | 191 return {b: r for r, b in enumerate(self._names)} |
185 | 192 |
290 step = b' names' | 297 step = b' names' |
291 self._writenames(repo) | 298 self._writenames(repo) |
292 | 299 |
293 # write the new revs | 300 # write the new revs |
294 start = self._rbcrevslen * _rbcrecsize | 301 start = self._rbcrevslen * _rbcrecsize |
295 if start != len(self._rbcrevs): | 302 if self._force_overwrite or start != len(self._rbcrevs): |
296 step = b'' | 303 step = b'' |
297 if wlock is None: | 304 if wlock is None: |
298 wlock = repo.wlock(wait=False) | 305 wlock = repo.wlock(wait=False) |
299 self._writerevs(repo, start) | 306 self._writerevs(repo, start) |
300 | 307 |
333 self._rbcnamescount = len(self._names) | 340 self._rbcnamescount = len(self._names) |
334 | 341 |
335 def _writerevs(self, repo, start): | 342 def _writerevs(self, repo, start): |
336 """write the new revs to revbranchcache""" | 343 """write the new revs to revbranchcache""" |
337 revs = min(len(repo.changelog), len(self._rbcrevs) // _rbcrecsize) | 344 revs = min(len(repo.changelog), len(self._rbcrevs) // _rbcrecsize) |
345 if self._force_overwrite: | |
346 start = 0 | |
338 with repo.cachevfs.open(_rbcrevs, b'ab') as f: | 347 with repo.cachevfs.open(_rbcrevs, b'ab') as f: |
339 current_size = f.tell() | 348 current_size = f.tell() |
340 if current_size < start: | 349 if current_size < start: |
341 start = 0 | 350 start = 0 |
342 if current_size != start: | 351 if current_size != start: |
346 f.seek(start) | 355 f.seek(start) |
347 f.truncate() | 356 f.truncate() |
348 end = revs * _rbcrecsize | 357 end = revs * _rbcrecsize |
349 f.write(self._rbcrevs.slice(start, end)) | 358 f.write(self._rbcrevs.slice(start, end)) |
350 self._rbcrevslen = revs | 359 self._rbcrevslen = revs |
360 self._force_overwrite = False |