exchange: use v2 bundles for modern compression engines (issue5506)
Previously, `hg bundle zstd` on a non-generaldelta repo would
attempt to use a v1 bundle. This would fail because zstd is not
supported on v1 bundles.
This patch changes the behavior to automatically use a v2 bundle
when the user explicitly requests a bundlespec that is a compression
engine not supported on v1. If the bundlespec is <engine>-v1, it is
still explicitly rejected because that request cannot be fulfilled.
--- a/mercurial/exchange.py Thu Mar 16 12:23:56 2017 -0700
+++ b/mercurial/exchange.py Thu Mar 16 12:33:15 2017 -0700
@@ -130,8 +130,12 @@
if spec in util.compengines.supportedbundlenames:
compression = spec
version = 'v1'
+ # Generaldelta repos require v2.
if 'generaldelta' in repo.requirements:
version = 'v2'
+ # Modern compression engines require v2.
+ if compression not in _bundlespecv1compengines:
+ version = 'v2'
elif spec in _bundlespeccgversions:
if spec == 'packed1':
compression = 'none'
--- a/tests/test-bundle-type.t Thu Mar 16 12:23:56 2017 -0700
+++ b/tests/test-bundle-type.t Thu Mar 16 12:33:15 2017 -0700
@@ -187,9 +187,7 @@
$ hg --config format.usegeneraldelta=false init nogd
$ hg -q -R nogd pull t1
$ hg -R nogd bundle -a -t zstd nogd-zstd
- abort: compression engine zstd is not supported on v1 bundles
- (see 'hg help bundle' for supported values for --type)
- [255]
+ 1 changesets found
zstd-v1 always fails