changeset 31474:10c0ee338535 stable

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.
author Gregory Szorc <gregory.szorc@gmail.com>
date Thu, 16 Mar 2017 12:33:15 -0700
parents ffed3bf5cd4c
children 291951ad070b 2915cc1d3429
files mercurial/exchange.py tests/test-bundle-type.t
diffstat 2 files changed, 5 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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