# HG changeset patch # User Durham Goode # Date 1424832211 28800 # Node ID 9347c15d81367927c8936777d80faa8eaf6bbf07 # Parent 656f93ce66d57776843748387680429ea6cb674a revbranchcache: write cache even during read operations Previously we would only actually write the revbranchcache to disk if we were in the middle of a write operation (like commit). Now we will also write it during any read operation. The cache knows how to invalidate itself, so it shouldn't become corrupt if multiple writers try at once (and the write-on-read behavior/risk is the same as all our other caches). diff -r 656f93ce66d5 -r 9347c15d8136 mercurial/branchmap.py --- a/mercurial/branchmap.py Tue Feb 10 20:06:12 2015 -0800 +++ b/mercurial/branchmap.py Tue Feb 24 18:43:31 2015 -0800 @@ -97,9 +97,6 @@ partial.update(repo, revs) partial.write(repo) - if repo._revbranchcache is not None: - repo._revbranchcache.write() - assert partial.validfor(repo), filtername repo._branchcaches[repo.filtername] = partial diff -r 656f93ce66d5 -r 9347c15d8136 mercurial/localrepo.py --- a/mercurial/localrepo.py Tue Feb 10 20:06:12 2015 -0800 +++ b/mercurial/localrepo.py Tue Feb 24 18:43:31 2015 -0800 @@ -303,7 +303,11 @@ self.names = namespaces.namespaces() def close(self): - pass + self._writecaches() + + def _writecaches(self): + if self._revbranchcache: + self._revbranchcache.write() def _restrictcapabilities(self, caps): # bundle2 is not ready for prime time, drop it unless explicitly diff -r 656f93ce66d5 -r 9347c15d8136 tests/test-branches.t --- a/tests/test-branches.t Tue Feb 10 20:06:12 2015 -0800 +++ b/tests/test-branches.t Tue Feb 24 18:43:31 2015 -0800 @@ -561,8 +561,8 @@ recovery from invalid cache revs file with trailing data $ echo >> .hg/cache/rbc-revs-v1 $ rm -f .hg/cache/branch* && hg head a -T '{rev}\n' --debug + 5 truncating cache/rbc-revs-v1 to 120 - 5 $ f --size .hg/cache/rbc-revs* .hg/cache/rbc-revs-v1: size=120 recovery from invalid cache file with partial last record @@ -571,8 +571,8 @@ $ f --size .hg/cache/rbc-revs* .hg/cache/rbc-revs-v1: size=119 $ rm -f .hg/cache/branch* && hg head a -T '{rev}\n' --debug + 5 truncating cache/rbc-revs-v1 to 112 - 5 $ f --size .hg/cache/rbc-revs* .hg/cache/rbc-revs-v1: size=120 recovery from invalid cache file with missing record - no truncation @@ -590,11 +590,11 @@ $ f -qDB 112 rbc-revs-v1 >> .hg/cache/rbc-revs-v1 $ f --size .hg/cache/rbc-revs* .hg/cache/rbc-revs-v1: size=120 - $ hg log -r 'branch(.)' -T '{rev} ' - 3 4 8 9 10 11 12 13 (no-eol) + $ hg log -r 'branch(.)' -T '{rev} ' --debug + 3 4 8 9 10 11 12 13 truncating cache/rbc-revs-v1 to 8 $ rm -f .hg/cache/branch* && hg head a -T '{rev}\n' --debug - truncating cache/rbc-revs-v1 to 8 5 + truncating cache/rbc-revs-v1 to 104 $ f --size --hexdump --bytes=16 .hg/cache/rbc-revs* .hg/cache/rbc-revs-v1: size=120 0000: 19 70 9c 5a 00 00 00 00 dd 6b 44 0d 00 00 00 01 |.p.Z.....kD.....| diff -r 656f93ce66d5 -r 9347c15d8136 tests/test-rebase-conflicts.t --- a/tests/test-rebase-conflicts.t Tue Feb 10 20:06:12 2015 -0800 +++ b/tests/test-rebase-conflicts.t Tue Feb 24 18:43:31 2015 -0800 @@ -322,6 +322,6 @@ files: 1/1 chunks (100.00%) added 2 changesets with 2 changes to 1 files invalid branchheads cache (served): tip differs - truncating cache/rbc-revs-v1 to 72 rebase completed updating the branch cache + truncating cache/rbc-revs-v1 to 72