bundlespec: add support for some variants
This way the stream v2 bundle spec can disable the changegroup part while
enabling the stream v2 part.
Differential Revision: https://phab.mercurial-scm.org/D1955
--- a/mercurial/exchange.py Wed Jan 31 11:09:20 2018 +0100
+++ b/mercurial/exchange.py Wed Jan 31 11:10:55 2018 +0100
@@ -76,6 +76,10 @@
}
_bundlespeccontentopts['bundle2'] = _bundlespeccontentopts['v2']
+_bundlespecvariants = {"streamv2": {"changegroup": False, "streamv2": True,
+ "tagsfnodescache": False,
+ "revbranchcache": False}}
+
# Compression engines allowed in version 1. THIS SHOULD NEVER CHANGE.
_bundlespecv1compengines = {'gzip', 'bzip2', 'none'}
@@ -206,6 +210,11 @@
# Compute contentopts based on the version
contentopts = _bundlespeccontentopts.get(version, {}).copy()
+ # Process the variants
+ if "stream" in params and params["stream"] == "v2":
+ variant = _bundlespecvariants["streamv2"]
+ contentopts.update(variant)
+
if not externalnames:
engine = util.compengines.forbundlename(compression)
compression = engine.bundletype()[1]
@@ -281,6 +290,13 @@
'a known bundlespec') % version,
hint=_('try upgrading your Mercurial '
'client'))
+ elif part.type == 'stream2' and version is None:
+ # A stream2 part requires to be part of a v2 bundle
+ version = "v2"
+ requirements = urlreq.unquote(part.params['requirements'])
+ splitted = requirements.split()
+ params = bundle2._formatrequirementsparams(splitted)
+ return 'none-v2;stream=v2;%s' % params
if not version:
raise error.Abort(_('could not identify changegroup version in '
--- a/tests/test-stream-bundle-v2.t Wed Jan 31 11:09:20 2018 +0100
+++ b/tests/test-stream-bundle-v2.t Wed Jan 31 11:10:55 2018 +0100
@@ -41,15 +41,8 @@
> EOF
$ hg bundle -a --type="none-v2;stream=v2" bundle.hg
- 5 changesets found
$ hg debugbundle bundle.hg
Stream params: {}
- changegroup -- {nbchanges: 5, version: 02}
- 426bada5c67598ca65036d57d9e4b64b0c1ce7a0
- 112478962961147124edd43549aedd1a335e44bf
- 26805aba1e600a82e93661149f2313866a221a7b
- f585351a92f85104bff7c284233c338b10eb1df7
- 9bc730a19041f9ec7cb33c626e811aa233efb18c
- cache:rev-branch-cache -- {}
+ stream2 -- {bytecount: 1693, filecount: 11, requirements: dotencode%2Cfncache%2Cgeneraldelta%2Crevlogv1%2Cstore}
$ hg debugbundle --spec bundle.hg
- none-v2
+ none-v2;stream=v2;requirements%3Ddotencode%2Cfncache%2Cgeneraldelta%2Crevlogv1%2Cstore