[PATCH 7 of 7] bundle2: force the first char of parameter to be an letter
pierre-yves.david at ens-lyon.org
pierre-yves.david at ens-lyon.org
Fri Mar 21 21:57:32 UTC 2014
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at fb.com>
# Date 1395194168 25200
# Tue Mar 18 18:56:08 2014 -0700
# Node ID eec1f3d69dcd9f8656776045e36f277ec5ebd8f9
# Parent ca51ee1121790c891e1f98cd18d8b664f131ea31
bundle2: force the first char of parameter to be an letter.
We need a case sensitive character to convey mandatory/advisory parameter
semantic in a later patches.
diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py
--- a/mercurial/bundle2.py
+++ b/mercurial/bundle2.py
@@ -45,10 +45,14 @@ Binary format is as follow
The blob contains a space separated list of parameters. parameter with value
are stored in the form `<name>=<value>`. Both name and value are urlquoted.
Empty name are obviously forbidden.
+ Name MUST start with a letter. This first character has to be capitalizable.
+ The capitalisation of the first letter will be used to know if an option is
+ advisory or mandatory. This is not implemented yet.
+
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.
- Textual data allow easy human inspection of a the bundle2 header in case of
@@ -70,10 +74,11 @@ Binary format is as follow
"""
import util
import struct
import urllib
+import string
import changegroup
from i18n import _
_pack = struct.pack
@@ -98,10 +103,12 @@ class bundle20(object):
def addparam(self, name, value=None):
"""add a stream level parameter"""
if not name:
raise ValueError('empty parameter name')
+ if name[0] not in string.letters:
+ raise ValueError('non letter first character: %r' % name)
self._params.append((name, value))
def getchunks(self):
yield _magicstring
param = self._paramchunk()
diff --git a/tests/test-bundle2.t b/tests/test-bundle2.t
--- a/tests/test-bundle2.t
+++ b/tests/test-bundle2.t
@@ -160,5 +160,11 @@ Test buggy input
empty parameter name
$ hg bundle2 --param '' --quiet
abort: empty parameter name
[255]
+
+bad parameter name
+
+ $ hg bundle2 --param 42babar
+ abort: non letter first character: '42babar'
+ [255]
More information about the Mercurial-devel
mailing list