revlog: move file writing to a separate function
authorDurham Goode <durham@fb.com>
Tue, 26 Nov 2013 12:58:27 -0800
changeset 20217 33394f2e331e
parent 20216 01bdccfeb9d9
child 20218 0c22257388d6
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.
mercurial/revlog.py
--- 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