[PATCH 4 of 6] branchmap: use revbranchcache when updating branch map

Mads Kiilerich mads at kiilerich.com
Sun Dec 14 12:34:23 CST 2014


# HG changeset patch
# User Mads Kiilerich <madski at unity3d.com>
# Date 1418581984 -3600
#      Sun Dec 14 19:33:04 2014 +0100
# Node ID a84099ef1a332eb93bc9287d74c64af7e510f90e
# Parent  eeeae034dc7aa8501c3e8f510a0788a77e54bc9f
branchmap: use revbranchcache when updating branch map

This will speed repeated branchmap calculation up.

perfbranchmap base on mozilla-central, before:
! wall 6.995851 comb 6.990000 user 6.970000 sys 0.020000 (best of 3)
After:
! wall 2.599774 comb 2.600000 user 2.600000 sys 0.000000 (best of 4)

On the hg repo, before:
! wall 0.718498 comb 0.720000 user 0.720000 sys 0.000000 (best of 14)
After:
! wall 0.284678 comb 0.290000 user 0.290000 sys 0.000000 (best of 32)

The use of revbranchcache for branch map will also make sure the revbranchcache
"always" is kept up-to-date. If the cache for some reason should be out of
sync, the wrong information in the cache will be skipped and the branch
information will be retrieved as normally and the cache entry will be updated.

diff --git a/mercurial/branchmap.py b/mercurial/branchmap.py
--- a/mercurial/branchmap.py
+++ b/mercurial/branchmap.py
@@ -234,13 +234,15 @@
         cl = repo.changelog
         # collect new branch entries
         newbranches = {}
-        getbranchinfoutf8 = cl.branchinfoutf8
+        cache = revbranchcache(repo)
+        getbranchinfoutf8 = cache.branchinfoutf8
         for r in revgen:
             branchutf8, closesbranch = getbranchinfoutf8(r)
             branch = encoding.tolocal(branchutf8)
             newbranches.setdefault(branch, []).append(r)
             if closesbranch:
                 self._closednodes.add(cl.node(r))
+        cache.save()
 
         # fetch current topological heads to speed up filtering
         topoheads = set(cl.headrevs())
diff --git a/tests/test-clone.t b/tests/test-clone.t
--- a/tests/test-clone.t
+++ b/tests/test-clone.t
@@ -31,6 +31,7 @@
   default                       10:a7949464abda
   $ ls .hg/cache
   branch2-served
+  revbranchnames
 
 Default operation:
 
diff --git a/tests/test-fncache.t b/tests/test-fncache.t
--- a/tests/test-fncache.t
+++ b/tests/test-fncache.t
@@ -71,6 +71,7 @@
   .hg/00manifest.i
   .hg/cache
   .hg/cache/branch2-served
+  .hg/cache/revbranchnames
   .hg/data
   .hg/data/tst.d.hg
   .hg/data/tst.d.hg/foo.i
@@ -99,6 +100,7 @@
   .hg/00changelog.i
   .hg/cache
   .hg/cache/branch2-served
+  .hg/cache/revbranchnames
   .hg/dirstate
   .hg/last-message.txt
   .hg/requires
diff --git a/tests/test-hardlinks.t b/tests/test-hardlinks.t
--- a/tests/test-hardlinks.t
+++ b/tests/test-hardlinks.t
@@ -196,6 +196,7 @@
   2 r4/.hg/00changelog.i
   2 r4/.hg/branch
   2 r4/.hg/cache/branch2-served
+  2 r4/.hg/cache/revbranchnames
   2 r4/.hg/dirstate
   2 r4/.hg/hgrc
   2 r4/.hg/last-message.txt
@@ -226,6 +227,7 @@
   2 r4/.hg/00changelog.i
   1 r4/.hg/branch
   2 r4/.hg/cache/branch2-served
+  2 r4/.hg/cache/revbranchnames
   1 r4/.hg/dirstate
   2 r4/.hg/hgrc
   2 r4/.hg/last-message.txt
diff --git a/tests/test-inherit-mode.t b/tests/test-inherit-mode.t
--- a/tests/test-inherit-mode.t
+++ b/tests/test-inherit-mode.t
@@ -66,6 +66,7 @@
   00600 ./.hg/00changelog.i
   00770 ./.hg/cache/
   00660 ./.hg/cache/branch2-served
+  00660 ./.hg/cache/revbranchnames
   00660 ./.hg/dirstate
   00660 ./.hg/last-message.txt
   00600 ./.hg/requires
@@ -111,6 +112,7 @@
   00660 ../push/.hg/00changelog.i
   00770 ../push/.hg/cache/
   00660 ../push/.hg/cache/branch2-base
+  00660 ../push/.hg/cache/revbranchnames
   00660 ../push/.hg/requires
   00770 ../push/.hg/store/
   00660 ../push/.hg/store/00changelog.i


More information about the Mercurial-devel mailing list