branchcache: have an explicit method to update the on disk cache
Explicit is better and will give use more flexibility for future evolution of
the storage.
--- a/mercurial/branchmap.py Mon Feb 26 12:59:57 2024 +0100
+++ b/mercurial/branchmap.py Fri Jan 19 11:30:10 2024 +0100
@@ -59,7 +59,24 @@
def __getitem__(self, repo):
self.updatecache(repo)
- return self._per_filter[repo.filtername]
+ bcache = self._per_filter[repo.filtername]
+ return bcache
+
+ def update_disk(self, repo):
+ """ensure and up-to-date cache is (or will be) written on disk
+
+ The cache for this repository view is updated if needed and written on
+ disk.
+
+ If a transaction is in progress, the writing is schedule to transaction
+ close. See the `BranchMapCache.write_delayed` method.
+
+ This method exist independently of __getitem__ as it is sometime useful
+ to signal that we have no intend to use the data in memory yet.
+ """
+ self.updatecache(repo)
+ bcache = self._per_filter[repo.filtername]
+ bcache.write(repo)
def updatecache(self, repo):
"""Update the cache for the given filtered view on a repository"""
--- a/mercurial/localrepo.py Mon Feb 26 12:59:57 2024 +0100
+++ b/mercurial/localrepo.py Fri Jan 19 11:30:10 2024 +0100
@@ -2973,7 +2973,7 @@
# they're a subset of another kind of cache that *has* been used).
for filt in repoview.filtertable.keys():
filtered = self.filtered(filt)
- filtered.branchmap().write(filtered)
+ self._branchcaches.update_disk(filtered)
def invalidatecaches(self):
if '_tagscache' in vars(self):