[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