bundlerepo: let bundle repo look in the _mancache
When looking up a base revision, we were ignoring the contents that were already
available in the manifest's _mancache. This patch allows us to use that data
instead of reading from the revlog.
This is useful in our pushrebase extension (which allows rebasing on the server
side during a push) because it allows us to prefetch the bundle base manifest
before aquiring the repo lock (1 second saving), which means doing less work inside the lock,
which means a 20% higher commit rate.
--- a/mercurial/bundlerepo.py Sun Sep 27 22:19:54 2015 +0900
+++ b/mercurial/bundlerepo.py Mon Sep 28 10:27:36 2015 -0700
@@ -195,7 +195,15 @@
linkmapper)
def baserevision(self, nodeorrev):
- return manifest.manifest.revision(self, nodeorrev)
+ node = nodeorrev
+ if isinstance(node, int):
+ node = self.node(node)
+
+ if node in self._mancache:
+ result = self._mancache[node][0].text()
+ else:
+ result = manifest.manifest.revision(self, nodeorrev)
+ return result
class bundlefilelog(bundlerevlog, filelog.filelog):
def __init__(self, opener, path, bundle, linkmapper):