Patchwork D1955: bundlespec: add support for some variants

login
register
mail settings
Submitter phabricator
Date Jan. 31, 2018, 4:25 p.m.
Message ID <differential-rev-PHID-DREV-miaxuzvvfrzbcs7r2is3-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/27093/
State Superseded
Headers show

Comments

phabricator - Jan. 31, 2018, 4:25 p.m.
lothiraldan created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  This way the stream v2 bundle spec can disable the changegroup part while
  enabling the stream v2 part.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D1955

AFFECTED FILES
  mercurial/exchange.py
  tests/test-stream-bundle-v2.t

CHANGE DETAILS




To: lothiraldan, #hg-reviewers
Cc: mercurial-devel
phabricator - March 19, 2018, 9:21 p.m.
indygreg accepted this revision.
indygreg added a comment.
This revision is now accepted and ready to land.


  This looks reasonable to me.
  
  I'll hold off landing due to requirements on an earlier, not yet accepted patch.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D1955

To: lothiraldan, #hg-reviewers, indygreg
Cc: indygreg, mercurial-devel

Patch

diff --git a/tests/test-stream-bundle-v2.t b/tests/test-stream-bundle-v2.t
--- a/tests/test-stream-bundle-v2.t
+++ b/tests/test-stream-bundle-v2.t
@@ -41,14 +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
+  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
diff --git a/mercurial/exchange.py b/mercurial/exchange.py
--- a/mercurial/exchange.py
+++ b/mercurial/exchange.py
@@ -60,6 +60,8 @@ 
     }
 }
 
+_bundlespecvariants = {"streamv2": {"changegroup": False, "streamv2": True}}
+
 # Compression engines allowed in version 1. THIS SHOULD NEVER CHANGE.
 _bundlespecv1compengines = {'gzip', 'bzip2', 'none'}
 
@@ -180,8 +182,14 @@ 
                       ', '.join(sorted(missingreqs)))
 
     # Compute contentops based on the version
+
     contentops = _bundlespeccontentops.get(version, {}).copy()
 
+    # Process the variants
+    if "stream" in params and params["stream"] == "v2":
+        variant = _bundlespecvariants["streamv2"]
+        contentops.update(variant)
+
     if not externalnames:
         engine = util.compengines.forbundlename(compression)
         compression = engine.bundletype()[1]
@@ -268,6 +276,12 @@ 
                                         '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'])
+                params = _formatrequirementsparams(requirements.split())
+                return 'none-v2;stream=v2;%s' % params
 
         if not version:
             raise error.Abort(_('could not identify changegroup version in '