branchcache: have an explicit method to update the on disk cache
authorPierre-Yves David <pierre-yves.david@octobus.net>
Fri, 19 Jan 2024 11:30:10 +0100
changeset 51449 7f7086a42b2b
parent 51445 d2858d97af6c
child 51450 3aba79ce52a9
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.
mercurial/branchmap.py
mercurial/localrepo.py
--- 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):