Mercurial > hg-stable
changeset 51940: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 |
files | mercurial/branching/rev_cache.py mercurial/repair.py tests/test-rebase-conflicts.t tests/test-strip.t |
diffstat | 4 files changed, 19 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/branching/rev_cache.py Tue Sep 24 00:01:30 2024 +0200 +++ b/mercurial/branching/rev_cache.py Mon Sep 23 23:52:45 2024 +0200 @@ -170,6 +170,7 @@ self._names = [] self._rbcnamescount = len(self._names) # number of names read at # _rbcsnameslen + self._force_overwrite = False def _clear(self): self._rbcsnameslen = 0 @@ -178,6 +179,12 @@ self._rbcrevslen = len(self._repo.changelog) self._rbcrevs = rbcrevs(bytearray(self._rbcrevslen * _rbcrecsize)) util.clearcachedproperty(self, b'_namesreverse') + self._force_overwrite = True + + def invalidate(self, rev=0): + self._rbcrevslen = rev + self._rbcrevs.truncate(rev) + self._force_overwrite = True @util.propertycache def _namesreverse(self): @@ -292,7 +299,7 @@ # write the new revs start = self._rbcrevslen * _rbcrecsize - if start != len(self._rbcrevs): + if self._force_overwrite or start != len(self._rbcrevs): step = b'' if wlock is None: wlock = repo.wlock(wait=False) @@ -335,6 +342,8 @@ def _writerevs(self, repo, start): """write the new revs to revbranchcache""" revs = min(len(repo.changelog), len(self._rbcrevs) // _rbcrecsize) + if self._force_overwrite: + start = 0 with repo.cachevfs.open(_rbcrevs, b'ab') as f: current_size = f.tell() if current_size < start: @@ -348,3 +357,4 @@ end = revs * _rbcrecsize f.write(self._rbcrevs.slice(start, end)) self._rbcrevslen = revs + self._force_overwrite = False
--- a/mercurial/repair.py Tue Sep 24 00:01:30 2024 +0200 +++ b/mercurial/repair.py Mon Sep 23 23:52:45 2024 +0200 @@ -242,6 +242,10 @@ del repo.obsstore repo.invalidatevolatilesets() + # NOTE: eventually make a common entry point on localrepo to help + # other caches + repo.revbranchcache().invalidate(striprev) + if tmpbundlefile: ui.note(_(b"adding branch\n")) f = vfs.open(tmpbundlefile, b"rb")
--- a/tests/test-rebase-conflicts.t Tue Sep 24 00:01:30 2024 +0200 +++ b/tests/test-rebase-conflicts.t Mon Sep 23 23:52:45 2024 +0200 @@ -319,12 +319,14 @@ bundle2-input-part: "phase-heads" supported bundle2-input-part: total payload size 24 bundle2-input-bundle: 3 parts total - truncating cache/rbc-revs-v1 to 72 + truncating cache/rbc-revs-v1 to 0 added 2 changesets with 2 changes to 1 files updating the branch cache invalid branch cache (served): tip differs + history modification detected - truncating revision branch cache to revision 1 invalid branch cache (served.hidden): tip differs rebase completed + truncating cache/rbc-revs-v1 to 8 Test minimization of merge conflicts $ hg up -q null
--- a/tests/test-strip.t Tue Sep 24 00:01:30 2024 +0200 +++ b/tests/test-strip.t Mon Sep 23 23:52:45 2024 +0200 @@ -913,6 +913,7 @@ saved backup bundle to $TESTTMP/issue4736/.hg/strip-backup/6625a5168474-345bb43d-backup.hg updating the branch cache invalid branch cache (served): tip differs + truncating cache/rbc-revs-v1 to 0 $ hg log -G o changeset: 2:5c51d8d6557d | tag: tip