mercurial/localrepo.py
changeset 17740 e6067bec18da
parent 17716 1adba7ff4d26
child 17820 c547e1acc37c
--- a/mercurial/localrepo.py	Wed Oct 10 01:30:45 2012 +0200
+++ b/mercurial/localrepo.py	Wed Oct 03 13:19:53 2012 -0700
@@ -2472,6 +2472,12 @@
     def stream_in(self, remote, requirements):
         lock = self.lock()
         try:
+            # Save remote branchmap. We will use it later
+            # to speed up branchcache creation
+            rbranchmap = None
+            if remote.capable("branchmap"):
+                rbranchmap = remote.branchmap()
+
             fp = remote.stream_out()
             l = fp.readline()
             try:
@@ -2532,6 +2538,17 @@
             self._applyrequirements(requirements)
             self._writerequirements()
 
+            if rbranchmap:
+                rbheads = []
+                for bheads in rbranchmap.itervalues():
+                    rbheads.extend(bheads)
+
+                self.branchcache = rbranchmap
+                if rbheads:
+                    rtiprev = max((int(self.changelog.rev(node))
+                            for node in rbheads))
+                    self._writebranchcache(self.branchcache,
+                            self[rtiprev].node(), rtiprev)
             self.invalidate()
             return len(self.heads()) + 1
         finally: