Comments
Patch
@@ -41,13 +41,11 @@ Binary format is as follow
A blob of `params size` containing the serialized version of all stream level
parameters.
The blob contains a space separated list of parameters. parameter with value
- are stored in the form `<name>=<value>`.
-
- Special character in param name are not supported yet.
+ are stored in the form `<name>=<value>`. Both name and value are urlquoted.
Stream parameters use a simple textual format for two main reasons:
- Stream level parameters should remains simple and we want to discourage any
crazy usage.
@@ -70,10 +68,11 @@ Binary format is as follow
Currently forced to 0 in the current state of the implementation
"""
import util
import struct
+import urllib
import changegroup
from i18n import _
_pack = struct.pack
@@ -114,12 +113,13 @@ class bundle20(object):
def _paramchunk(self):
"""return a encoded version of all stream parameters"""
blocks = []
for par, value in self._params:
- # XXX no escaping yet
+ par = urllib.quote(par)
if value is not None:
+ value = urllib.quote(value)
par = '%s=%s' % (par, value)
blocks.append(par)
return ' '.join(blocks)
class unbundle20(object):
@@ -130,5 +130,13 @@ Test unbundling
- caution
- elephants
- meal
vegan
parts count: 0
+
+parameter with special char in value
+---------------------------------------------------
+
+Test generation
+
+ $ hg bundle2 --param 'e|! 7/=babar%#==tutu' --param simple
+ HG20\x00)e%7C%21%207/=babar%25%23%3D%3Dtutu simple\x00\x00 (no-eol) (esc)