Mercurial > public > mercurial-scm > hg-stable
diff mercurial/bundle2.py @ 46726:bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Each repo will advertise the sidedata categories it requires (categories being
unique and canonical), and have a set of "computers", functions to generate
sidedata from `(repo, revlog, rev, previous_sidedata)`, for a given category.
The set of computers can be a superset of the set of the wanted categories, but
not smaller: repos are expected to be coherent in their handling of sidedata.
Differential Revision: https://phab.mercurial-scm.org/D10028
author | Rapha?l Gom?s <rgomes@octobus.net> |
---|---|
date | Fri, 19 Feb 2021 10:53:27 +0100 |
parents | 7015b0232c5e |
children | 6266d19556ad |
line wrap: on
line diff
--- a/mercurial/bundle2.py Thu Feb 18 18:18:35 2021 +0100 +++ b/mercurial/bundle2.py Fri Feb 19 10:53:27 2021 +0100 @@ -1812,6 +1812,28 @@ return params +def format_remote_wanted_sidedata(repo): + """Formats a repo's wanted sidedata categories into a bytestring for + capabilities exchange.""" + wanted = b"" + if repo._wanted_sidedata: + wanted = b','.join( + pycompat.bytestr(c) for c in sorted(repo._wanted_sidedata) + ) + return wanted + + +def read_remote_wanted_sidedata(remote): + sidedata_categories = remote.capable(b'exp-wanted-sidedata') + return read_wanted_sidedata(sidedata_categories) + + +def read_wanted_sidedata(formatted): + if formatted: + return set(formatted.split(b',')) + return set() + + def addpartbundlestream2(bundler, repo, **kwargs): if not kwargs.get('stream', False): return @@ -1957,6 +1979,7 @@ b'version', b'nbchanges', b'exp-sidedata', + b'exp-wanted-sidedata', b'treemanifest', b'targetphase', ), @@ -1999,6 +2022,10 @@ targetphase = inpart.params.get(b'targetphase') if targetphase is not None: extrakwargs['targetphase'] = int(targetphase) + + remote_sidedata = inpart.params.get(b'exp-wanted-sidedata') + extrakwargs['sidedata_categories'] = read_wanted_sidedata(remote_sidedata) + ret = _processchangegroup( op, cg, @@ -2559,5 +2586,7 @@ part.addparam(b'treemanifest', b'1') if b'exp-sidedata-flag' in repo.requirements: part.addparam(b'exp-sidedata', b'1') + wanted = format_remote_wanted_sidedata(repo) + part.addparam(b'exp-wanted-sidedata', wanted) return bundler