revbranchcache: move cache writing to the transaction finalizer
authorDurham Goode <durham@fb.com>
Tue, 10 Feb 2015 20:06:12 -0800
changeset 24377 656f93ce66d5
parent 24376 203a078da052
child 24378 9347c15d8136
revbranchcache: move cache writing to the transaction finalizer Instead of writing the revbranchcache during updatecache (which often happens too early, before the cache is even populated), let's run it as part of the transaction finalizer. It still won't be written for read-only operations, but that's no worse than it is today. A future commit will remove the actual write that happens in updatecache(). This is also good prep for when all caches get moved into the transaction.
mercurial/branchmap.py
mercurial/statichttprepo.py
--- a/mercurial/branchmap.py	Tue Feb 10 20:04:47 2015 -0800
+++ b/mercurial/branchmap.py	Tue Feb 10 20:06:12 2015 -0800
@@ -414,7 +414,11 @@
         self._rbcrevs[rbcrevidx:rbcrevidx + _rbcrecsize] = rec
         self._rbcrevslen = min(self._rbcrevslen, rev)
 
-    def write(self):
+        tr = self._repo.currenttransaction()
+        if tr:
+            tr.addfinalize('write-revbranchcache', self.write)
+
+    def write(self, tr=None):
         """Save branch cache if it is dirty."""
         repo = self._repo
         if self._rbcnamescount < len(self._names):
--- a/mercurial/statichttprepo.py	Tue Feb 10 20:04:47 2015 -0800
+++ b/mercurial/statichttprepo.py	Tue Feb 10 20:06:12 2015 -0800
@@ -144,6 +144,7 @@
         self._revbranchcache = None
         self.encodepats = None
         self.decodepats = None
+        self._transref = None
 
     def _restrictcapabilities(self, caps):
         caps = super(statichttprepository, self)._restrictcapabilities(caps)