Patchwork [5,of,5] bundle2: support for unbundling simple parameter

login
register
mail settings
Submitter Pierre-Yves David
Date March 19, 2014, 10:02 p.m.
Message ID <00cd3bb9a19a6e1dbb33.1395266526@marginatus.alto.octopoid.net>
Download mbox | patch
Permalink /patch/4000/
State Superseded
Commit c5aaeca0cfbfaad91eaa9c1a40f04b424bce2bd9
Headers show

Comments

Pierre-Yves David - March 19, 2014, 10:02 p.m.
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david@fb.com>
# Date 1395183384 25200
#      Tue Mar 18 15:56:24 2014 -0700
# Node ID 00cd3bb9a19a6e1dbb333f501fd93231eae6de80
# Parent  e98462ffb743dec94550942c5d81e943f161a90e
bundle2: support for unbundling simple parameter

the unbundler now understand simple list of parameter.

Patch

diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py
--- a/mercurial/bundle2.py
+++ b/mercurial/bundle2.py
@@ -133,13 +133,16 @@  class unbundler(object):
         return changegroup.readexactly(self._fp, n)
 
     @util.propertycache
     def params(self):
         """dictionnary of stream level parameters"""
-        paramsize = self._readexact(2)
-        assert paramsize == '\0\0'
-        return {}
+        params = {}
+        paramssize = _unpack(_fstreamparamsize, self._readexact(2))[0]
+        if paramssize:
+            for p in self._readexact(paramssize).split(' '):
+                params[p] = None
+        return params
 
     def __iter__(self):
         """yield all parts contained in the stream"""
         # make sure param have been loaded
         self.params
diff --git a/tests/test-bundle2.t b/tests/test-bundle2.t
--- a/tests/test-bundle2.t
+++ b/tests/test-bundle2.t
@@ -28,10 +28,12 @@  Create an extension to test bundle2 API
   > @command('unbundle2', [], '')
   > def cmdunbundle2(ui, repo):
   >     """read a bundle2 container from standard input"""
   >     unbundler = bundle2.unbundler(sys.stdin)
   >     ui.write('options count: %i\n' % len(unbundler.params))
+  >     for key in sorted(unbundler.params):
+  >         print '-', key
   >     parts = list(unbundler)
   >     ui.write('parts count:   %i\n' % len(parts))
   > EOF
   $ cat >> $HGRCPATH << EOF
   > [extensions]
@@ -81,14 +83,30 @@  Test parameters
 advisory parameters, no value
 -------------------------------
 
 Simplest possible parameters form
 
-Test generation
+Test generation simple option
 
   $ hg bundle2 --param 'caution'
   HG20\x00\x07caution\x00\x00 (no-eol) (esc)
 
+Test unbundling
+
+  $ hg bundle2 --param 'caution' | hg unbundle2
+  options count: 1
+  - caution
+  parts count:   0
+
 Test generation multiple option
 
   $ hg bundle2 --param 'caution' --param 'meal'
   HG20\x00\x0ccaution meal\x00\x00 (no-eol) (esc)
+
+Test unbundling
+
+  $ hg bundle2 --param 'caution' --param 'meal' | hg unbundle2
+  options count: 2
+  - caution
+  - meal
+  parts count:   0
+