# HG changeset patch # User Durham Goode # Date 1385499507 28800 # Node ID 33394f2e331ea46d2eaa149a3f7a35f050281976 # Parent 01bdccfeb9d98ae85388d06c9c694b946f346edf 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. diff -r 01bdccfeb9d9 -r 33394f2e331e 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