Mercurial > hg
changeset 21136:b6fd496e5c72
bundle2: support for capabilities with values
The capabilities attributes of `bundle20` is now a dictionary and the reply caps
can encode capabilities with values.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Thu, 17 Apr 2014 11:44:49 -0400 |
parents | 98fbf3adfd83 |
children | 341a083603a5 |
files | mercurial/bundle2.py tests/test-bundle2.t |
diffstat | 2 files changed, 31 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/bundle2.py Thu Apr 17 11:32:30 2014 -0400 +++ b/mercurial/bundle2.py Thu Apr 17 11:44:49 2014 -0400 @@ -344,7 +344,7 @@ self.ui = ui self._params = [] self._parts = [] - self.capabilities = set(capabilities) + self.capabilities = dict(capabilities) def addparam(self, name, value=None): """add a stream level parameter""" @@ -697,8 +697,22 @@ def handlereplycaps(op, inpart): """Notify that a reply bundle should be created - the part payload is a list of capabilities (one per line)""" - caps = [c for c in inpart.read().splitlines() if c] + The part payload is a list of capabilities (one per line) + Capabilities may have values using a line of form:: + + capability=value1,value2,value3 + + The value are alway a list.""" + caps = {} + for line in inpart.read().splitlines(): + if not line: + continue + if '=' not in line: + key, vals = line, () + else: + key, vals = line.split('=', 1) + vals = vals.split(',') + caps[key] = vals if op.reply is None: op.reply = bundle20(op.ui, caps)
--- a/tests/test-bundle2.t Thu Apr 17 11:32:30 2014 -0400 +++ b/tests/test-bundle2.t Thu Apr 17 11:44:49 2014 -0400 @@ -51,6 +51,9 @@ > op.ui.write('debugreply: capabilities:\n') > for cap in sorted(op.reply.capabilities): > op.ui.write('debugreply: %r\n' % cap) + > for val in op.reply.capabilities[cap]: + > op.ui.write('debugreply: %r\n' % val) + > > @command('bundle2', > [('', 'param', [], 'stream level parameter'), > ('', 'unknown', False, 'include an unknown mandatory part in the bundle'), @@ -69,7 +72,7 @@ > raise util.Abort('%s' % exc) > > if opts['reply']: - > capsstring = 'ping-pong\nelephants' + > capsstring = 'ping-pong\nelephants=babar,celeste\ncity=celesteville' > bundler.addpart(bundle2.bundlepart('replycaps', data=capsstring)) > > revs = opts['rev'] @@ -544,8 +547,12 @@ Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko. - \x00\x00\x00\x00\x00\x1b\x06output\x00\x00\x00\x01\x00\x01\x0b\x01in-reply-to4\x00\x00\x00Rdebugreply: capabilities: (esc) + \x00\x00\x00\x00\x00\x1b\x06output\x00\x00\x00\x01\x00\x01\x0b\x01in-reply-to4\x00\x00\x00\xc6debugreply: capabilities: (esc) + debugreply: 'city' + debugreply: 'celesteville' debugreply: 'elephants' + debugreply: 'babar' + debugreply: 'celeste' debugreply: 'ping-pong' \x00\x00\x00\x00\x00\x1e test:pong\x00\x00\x00\x02\x01\x00\x0b\x01in-reply-to6\x00\x00\x00\x00\x00\x1b\x06output\x00\x00\x00\x03\x00\x01\x0b\x01in-reply-to6\x00\x00\x00=received ping request (id 6) (esc) replying to ping request (id 6) @@ -562,7 +569,7 @@ :output: mandatory: 0 advisory: 1 - payload: 82 bytes + payload: 198 bytes :test:pong: mandatory: 1 advisory: 0 @@ -581,7 +588,11 @@ remote: Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko remote: Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko. remote: debugreply: capabilities: + remote: debugreply: 'city' + remote: debugreply: 'celesteville' remote: debugreply: 'elephants' + remote: debugreply: 'babar' + remote: debugreply: 'celeste' remote: debugreply: 'ping-pong' remote: received ping request (id 6) remote: replying to ping request (id 6)