[PATCH 2 of 4] revbranchcache: add a bundle2 handler for a rbc part
Yuya Nishihara
yuya at tcha.org
Fri Jan 19 09:54:49 EST 2018
On Thu, 18 Jan 2018 16:38:45 +0100, Boris Feld wrote:
> # HG changeset patch
> # User Boris Feld <boris.feld at octobus.net>
> # Date 1516282142 -3600
> # Thu Jan 18 14:29:02 2018 +0100
> # Node ID 9c1ad82226a2e1fc7ca69550a46a7f7329c6b579
> # Parent 4ad1a1054450063cc9aa19ab2037722c64877eb7
> # EXP-Topic wire-rbc
> # Available At https://bitbucket.org/octobus/mercurial-devel/
> # hg pull https://bitbucket.org/octobus/mercurial-devel/ -r 9c1ad82226a2
> revbranchcache: add a bundle2 handler for a rbc part
> diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py
> --- a/mercurial/bundle2.py
> +++ b/mercurial/bundle2.py
> @@ -2101,6 +2101,40 @@ def handlehgtagsfnodes(op, inpart):
> cache.write()
> op.ui.debug('applied %i hgtags fnodes cache entries\n' % count)
>
> +rbcstruct = struct.Struct('>III')
> +
> + at parthandler('cache:rev-branch-cache')
> +def handlerbc(op, inpart):
> + """receive a rev-branch-cache payload and update the local cache
> +
> + The payload is a series of data related to each branch
> +
> + 1) branch name length
> + 2) number of open heads
> + 3) number of closed heads
> + 4) open heads nodes
> + 5) closed heads nodes
> + """
> + total = 0
> + rawheader = inpart.read(rbcstruct.size)
> + cache = op.repo.revbranchcache()
> + cl = op.repo.unfiltered().changelog
> + while rawheader:
> + header = rbcstruct.unpack(rawheader)
> + total += header[1] + header[2]
> + branch = inpart.read(header[0])
We'll probably need to convert branch name between utf-8 and local encoding.
> + for x in xrange(header[1]):
> + node = inpart.read(20)
> + rev = cl.rev(node)
> + cache.setdata(branch, rev, node, False)
> + for x in xrange(header[2]):
> + node = inpart.read(20)
> + rev = cl.rev(node)
> + cache.setdata(branch, rev, node, True)
> + rawheader = inpart.read(rbcstruct.size)
> + if total and 'branchinfo' in vars(cache):
> + del cache.branchinfo
No idea why we have to undo 'self.branchinfo = self._branchinfo'. Can you
add a comment?
More information about the Mercurial-devel
mailing list