[PATCH 3 of 7 V3] rev-branch-cache: add a function to generate a part
Boris Feld
boris.feld at octobus.net
Thu Mar 15 10:30:53 EDT 2018
# HG changeset patch
# User Boris Feld <boris.feld at octobus.net>
# Date 1519230382 -3600
# Wed Feb 21 17:26:22 2018 +0100
# Node ID 778415f0a8869c88f0f7b96882ed07aa56b4c930
# Parent c66ccb6f6ec80d539f2bed0724cca125624d2807
# EXP-Topic wire-rbc
# Available At https://bitbucket.org/octobus/mercurial-devel/
# hg pull https://bitbucket.org/octobus/mercurial-devel/ -r 778415f0a886
rev-branch-cache: add a function to generate a part
The function is able to produce a rbc part consumed by the function introduced
into previous changesets. More details on usage and impact in the next
changesets.
diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py
--- a/mercurial/bundle2.py
+++ b/mercurial/bundle2.py
@@ -147,6 +147,7 @@ preserve.
from __future__ import absolute_import, division
+import collections
import errno
import os
import re
@@ -1624,6 +1625,28 @@ def addparttagsfnodescache(repo, bundler
if chunks:
bundler.newpart('hgtagsfnodes', data=''.join(chunks))
+def addpartrevbranchcache(repo, bundler, outgoing):
+ # we include the rev branch cache for the bundle changeset
+ # (as an optional parts)
+ cache = repo.revbranchcache()
+ cl = repo.unfiltered().changelog
+ branchesdata = collections.defaultdict(lambda: (set(), set()))
+ for node in outgoing.missing:
+ branch, close = cache.branchinfo(cl.rev(node))
+ branchesdata[branch][close].add(node)
+
+ def generate():
+ for branch, (nodes, closed) in sorted(branchesdata.items()):
+ utf8branch = encoding.fromlocal(branch)
+ yield rbcstruct.pack(len(utf8branch), len(nodes), len(closed))
+ yield utf8branch
+ for n in sorted(nodes):
+ yield n
+ for n in sorted(closed):
+ yield n
+
+ bundler.newpart('cache:rev-branch-cache', data=generate())
+
def buildobsmarkerspart(bundler, markers):
"""add an obsmarker part to the bundler with <markers>
More information about the Mercurial-devel
mailing list