Comments
Patch
@@ -134,6 +134,7 @@ class branchcache(dict):
self._closednodes = set()
else:
self._closednodes = closednodes
+ self._revbranchcache = None
def _hashfiltered(self, repo):
"""build hash of revision filtered in the current cache
@@ -225,6 +226,9 @@ class branchcache(dict):
repo.ui.debug("couldn't write branch cache: %s\n" % inst)
# Abort may be raise by read only opener
pass
+ if self._revbranchcache:
+ self._revbranchcache.write(repo.unfiltered())
+ self._revbranchcache = None
def update(self, repo, revgen):
"""Given a branchhead cache, self, that may have extra nodes or be
@@ -235,9 +239,12 @@ class branchcache(dict):
cl = repo.changelog
# collect new branch entries
newbranches = {}
- getbranchinfo = cl.branchinfo
+ urepo = repo.unfiltered()
+ self._revbranchcache = revbranchcache(urepo)
+ getbranchinfo = self._revbranchcache.branchinfo
+ ucl = urepo.changelog
for r in revgen:
- branch, closesbranch = getbranchinfo(r)
+ branch, closesbranch = getbranchinfo(ucl, r)
newbranches.setdefault(branch, []).append(r)
if closesbranch:
self._closednodes.add(cl.node(r))
@@ -361,7 +368,7 @@ class revbranchcache(object):
self._rbcrevs.extend('\0' * (len(changelog) * _rbcrecsize -
len(self._rbcrevs)))
for r in xrange(first, len(changelog)):
- self._branchinfo(r)
+ self._branchinfo(changelog, r)
# fast path: extract data from cache, use it if node is matching
reponode = changelog.node(rev)[:_rbcnodelen]
@@ -374,7 +381,7 @@ class revbranchcache(object):
return self._names[branchidx], close
# fall back to slow path and make sure it will be written to disk
self._rbcrevslen = min(self._rbcrevslen, rev)
- return self._branchinfo(rev)
+ return self._branchinfo(changelog, rev)
def _branchinfo(self, changelog, rev):
"""Retrieve branch info from changelog and update _rbcrevs"""
@@ -31,6 +31,8 @@ Trigger branchcache creation:
default 10:a7949464abda
$ ls .hg/cache
branch2-served
+ rbc-names-v1
+ rbc-revs-v1
Default operation:
@@ -53,6 +53,7 @@ Convert while testing all possible outpu
source: svn:afeb9c47-92ff-4c0c-9f72-e1f6eb8ac9af/trunk@1
converting: 0/6 revisions (0.00%)
committing changelog
+ couldn't read revision branch cache names: * (glob)
4 hello
source: svn:afeb9c47-92ff-4c0c-9f72-e1f6eb8ac9af/trunk@2
converting: 1/6 revisions (16.67%)
@@ -71,6 +71,8 @@ Non store repo:
.hg/00manifest.i
.hg/cache
.hg/cache/branch2-served
+ .hg/cache/rbc-names-v1
+ .hg/cache/rbc-revs-v1
.hg/data
.hg/data/tst.d.hg
.hg/data/tst.d.hg/foo.i
@@ -99,6 +101,8 @@ Non fncache repo:
.hg/00changelog.i
.hg/cache
.hg/cache/branch2-served
+ .hg/cache/rbc-names-v1
+ .hg/cache/rbc-revs-v1
.hg/dirstate
.hg/last-message.txt
.hg/requires
@@ -196,6 +196,8 @@ r4 has hardlinks in the working dir (not
2 r4/.hg/00changelog.i
2 r4/.hg/branch
2 r4/.hg/cache/branch2-served
+ 2 r4/.hg/cache/rbc-names-v1
+ 2 r4/.hg/cache/rbc-revs-v1
2 r4/.hg/dirstate
2 r4/.hg/hgrc
2 r4/.hg/last-message.txt
@@ -226,6 +228,8 @@ Update back to revision 11 in r4 should
2 r4/.hg/00changelog.i
1 r4/.hg/branch
2 r4/.hg/cache/branch2-served
+ 2 r4/.hg/cache/rbc-names-v1
+ 2 r4/.hg/cache/rbc-revs-v1
1 r4/.hg/dirstate
2 r4/.hg/hgrc
2 r4/.hg/last-message.txt
@@ -66,6 +66,8 @@ new directories are setgid
00600 ./.hg/00changelog.i
00770 ./.hg/cache/
00660 ./.hg/cache/branch2-served
+ 00660 ./.hg/cache/rbc-names-v1
+ 00660 ./.hg/cache/rbc-revs-v1
00660 ./.hg/dirstate
00660 ./.hg/last-message.txt
00600 ./.hg/requires
@@ -111,6 +113,8 @@ group can still write everything
00660 ../push/.hg/00changelog.i
00770 ../push/.hg/cache/
00660 ../push/.hg/cache/branch2-base
+ 00660 ../push/.hg/cache/rbc-names-v1
+ 00660 ../push/.hg/cache/rbc-revs-v1
00660 ../push/.hg/requires
00770 ../push/.hg/store/
00660 ../push/.hg/store/00changelog.i