# HG changeset patch # User Augie Fackler # Date 1489854472 14400 # Node ID 291951ad070b3fa39dd1d83503aa1011a20d9a21 # Parent da7d19324b1e3d2ce0636bf73e76bf8f3d68ed27# Parent 10c0ee33853539bd2721a05d4753785c2494d243 merge with stable diff -r da7d19324b1e -r 291951ad070b mercurial/exchange.py --- a/mercurial/exchange.py Sun Mar 05 22:22:32 2017 -0500 +++ b/mercurial/exchange.py Sat Mar 18 12:27:52 2017 -0400 @@ -44,6 +44,9 @@ 'bundle2': '02', #legacy } +# Compression engines allowed in version 1. THIS SHOULD NEVER CHANGE. +_bundlespecv1compengines = set(['gzip', 'bzip2', 'none']) + def parsebundlespec(repo, spec, strict=True, externalnames=False): """Parse a bundle string specification into parts. @@ -127,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' @@ -139,6 +146,12 @@ raise error.UnsupportedBundleSpecification( _('%s is not a recognized bundle specification') % spec) + # Bundle version 1 only supports a known set of compression engines. + if version == 'v1' and compression not in _bundlespecv1compengines: + raise error.UnsupportedBundleSpecification( + _('compression engine %s is not supported on v1 bundles') % + compression) + # The specification for packed1 can optionally declare the data formats # required to apply it. If we see this metadata, compare against what the # repo supports and error if the bundle isn't compatible. diff -r da7d19324b1e -r 291951ad070b tests/test-bundle-type.t --- a/tests/test-bundle-type.t Sun Mar 05 22:22:32 2017 -0500 +++ b/tests/test-bundle-type.t Sat Mar 18 12:27:52 2017 -0400 @@ -33,6 +33,23 @@ summary: a $ cd .. +Unknown compression type is rejected + + $ hg init t3 + $ cd t3 + $ hg -q pull ../b1 + $ hg bundle -a -t unknown out.hg + abort: unknown is not a recognized bundle specification + (see 'hg help bundle' for supported values for --type) + [255] + + $ hg bundle -a -t unknown-v2 out.hg + abort: unknown compression is not supported + (see 'hg help bundle' for supported values for --type) + [255] + + $ cd .. + test bundle types $ testbundle() { @@ -164,6 +181,21 @@ c35a0f9217e65d1fdb90c936ffa7dbe679f83ddf zstd-v2 + +Explicit request for zstd on non-generaldelta repos + + $ hg --config format.usegeneraldelta=false init nogd + $ hg -q -R nogd pull t1 + $ hg -R nogd bundle -a -t zstd nogd-zstd + 1 changesets found + +zstd-v1 always fails + + $ hg -R tzstd bundle -a -t zstd-v1 zstd-v1 + abort: compression engine zstd is not supported on v1 bundles + (see 'hg help bundle' for supported values for --type) + [255] + #else zstd is a valid engine but isn't available