--- a/mercurial/changegroup.py Wed May 10 16:17:58 2017 -0700
+++ b/mercurial/changegroup.py Mon May 15 09:35:27 2017 -0700
@@ -494,9 +494,18 @@
class cg1packer(object):
deltaheader = _CHANGEGROUPV1_DELTA_HEADER
version = '01'
- def __init__(self, repo):
+ def __init__(self, repo, bundlecaps=None):
"""Given a source repo, construct a bundler.
+
+ bundlecaps is optional and can be used to specify the set of
+ capabilities which can be used to build the bundle. While bundlecaps is
+ unused in core Mercurial, extensions rely on this feature to communicate
+ capabilities to customize the changegroup packer.
"""
+ # Set of capabilities we can use to build the bundle.
+ if bundlecaps is None:
+ bundlecaps = set()
+ self._bundlecaps = bundlecaps
# experimental config: bundle.reorder
reorder = repo.ui.config('bundle', 'reorder', 'auto')
if reorder == 'auto':
@@ -800,8 +809,8 @@
version = '02'
deltaheader = _CHANGEGROUPV2_DELTA_HEADER
- def __init__(self, repo):
- super(cg2packer, self).__init__(repo)
+ def __init__(self, repo, bundlecaps=None):
+ super(cg2packer, self).__init__(repo, bundlecaps)
if self._reorder is None:
# Since generaldelta is directly supported by cg2, reordering
# generally doesn't help, so we disable it by default (treating
@@ -895,9 +904,9 @@
assert versions
return min(versions)
-def getbundler(version, repo):
+def getbundler(version, repo, bundlecaps=None):
assert version in supportedoutgoingversions(repo)
- return _packermap[version][0](repo)
+ return _packermap[version][0](repo, bundlecaps)
def getunbundler(version, fh, alg, extras=None):
return _packermap[version][1](fh, alg, extras=extras)
@@ -948,24 +957,26 @@
bundler = getbundler(version, repo)
return getsubset(repo, outgoing, bundler, source)
-def getlocalchangegroupraw(repo, source, outgoing, version='01'):
+def getlocalchangegroupraw(repo, source, outgoing, bundlecaps=None,
+ version='01'):
"""Like getbundle, but taking a discovery.outgoing as an argument.
This is only implemented for local repos and reuses potentially
precomputed sets in outgoing. Returns a raw changegroup generator."""
if not outgoing.missing:
return None
- bundler = getbundler(version, repo)
+ bundler = getbundler(version, repo, bundlecaps)
return getsubsetraw(repo, outgoing, bundler, source)
-def getchangegroup(repo, source, outgoing, version='01'):
+def getchangegroup(repo, source, outgoing, bundlecaps=None,
+ version='01'):
"""Like getbundle, but taking a discovery.outgoing as an argument.
This is only implemented for local repos and reuses potentially
precomputed sets in outgoing."""
if not outgoing.missing:
return None
- bundler = getbundler(version, repo)
+ bundler = getbundler(version, repo, bundlecaps)
return getsubset(repo, outgoing, bundler, source)
def getlocalchangegroup(repo, *args, **kwargs):