diff mercurial/revlog.py @ 20217:33394f2e331e

revlog: move file writing to a separate function Moves the code that actually writes to a file to a separate function in revlog.py. This allows extensions to intercept and use the data being written to disk. For example, an extension might want to replicate these writes elsewhere. When cloning the Mercurial repo on /dev/shm with --pull, I see about a 0.3% perf change. It goes from 28.2 to 28.3 seconds.
author Durham Goode <durham@fb.com>
date Tue, 26 Nov 2013 12:58:27 -0800
parents 969148b49fc6
children 514d32de6646 469d949a7cb8
line wrap: on
line diff
--- a/mercurial/revlog.py	Sun Nov 24 17:33:39 2013 -0600
+++ b/mercurial/revlog.py	Tue Nov 26 12:58:27 2013 -0800
@@ -1206,6 +1206,15 @@
         self.nodemap[node] = curr
 
         entry = self._io.packentry(e, self.node, self.version, curr)
+        self._writeentry(transaction, ifh, dfh, entry, data, link, offset)
+
+        if type(text) == str: # only accept immutable objects
+            self._cache = (node, curr, text)
+        self._basecache = (curr, chainbase)
+        return node
+
+    def _writeentry(self, transaction, ifh, dfh, entry, data, link, offset):
+        curr = len(self) - 1
         if not self._inline:
             transaction.add(self.datafile, offset)
             transaction.add(self.indexfile, curr * len(entry))
@@ -1222,11 +1231,6 @@
             ifh.write(data[1])
             self.checkinlinesize(transaction, ifh)
 
-        if type(text) == str: # only accept immutable objects
-            self._cache = (node, curr, text)
-        self._basecache = (curr, chainbase)
-        return node
-
     def addgroup(self, bundle, linkmapper, transaction):
         """
         add a delta group