equal
deleted
inserted
replaced
342 |
342 |
343 def __init__(self, ui, capabilities=()): |
343 def __init__(self, ui, capabilities=()): |
344 self.ui = ui |
344 self.ui = ui |
345 self._params = [] |
345 self._params = [] |
346 self._parts = [] |
346 self._parts = [] |
347 self.capabilities = set(capabilities) |
347 self.capabilities = dict(capabilities) |
348 |
348 |
349 def addparam(self, name, value=None): |
349 def addparam(self, name, value=None): |
350 """add a stream level parameter""" |
350 """add a stream level parameter""" |
351 if not name: |
351 if not name: |
352 raise ValueError('empty parameter name') |
352 raise ValueError('empty parameter name') |
695 |
695 |
696 @parthandler('replycaps') |
696 @parthandler('replycaps') |
697 def handlereplycaps(op, inpart): |
697 def handlereplycaps(op, inpart): |
698 """Notify that a reply bundle should be created |
698 """Notify that a reply bundle should be created |
699 |
699 |
700 the part payload is a list of capabilities (one per line)""" |
700 The part payload is a list of capabilities (one per line) |
701 caps = [c for c in inpart.read().splitlines() if c] |
701 Capabilities may have values using a line of form:: |
|
702 |
|
703 capability=value1,value2,value3 |
|
704 |
|
705 The value are alway a list.""" |
|
706 caps = {} |
|
707 for line in inpart.read().splitlines(): |
|
708 if not line: |
|
709 continue |
|
710 if '=' not in line: |
|
711 key, vals = line, () |
|
712 else: |
|
713 key, vals = line.split('=', 1) |
|
714 vals = vals.split(',') |
|
715 caps[key] = vals |
702 if op.reply is None: |
716 if op.reply is None: |
703 op.reply = bundle20(op.ui, caps) |
717 op.reply = bundle20(op.ui, caps) |
704 |
718 |