bundle2: make it possible to declare params handled by a part handler
If we are to enforce the mandatory aspect of parameter, we need a way to
discover what a handler supports. The best option we end up with is this a simple
declaration of known parameters at registration time.
We simply plug the list of parameters on the function object because Python lets
us do that and there is no benefit for a more complicated way.
One of the handlers is updated for example and testing.
--- a/mercurial/bundle2.py Wed May 28 15:57:23 2014 -0700
+++ b/mercurial/bundle2.py Tue May 27 11:49:48 2014 -0700
@@ -174,7 +174,7 @@
parthandlermapping = {}
-def parthandler(parttype):
+def parthandler(parttype, params=()):
"""decorator that register a function as a bundle2 part handler
eg::
@@ -188,6 +188,7 @@
lparttype = parttype.lower() # enforce lower case matching.
assert lparttype not in parthandlermapping
parthandlermapping[lparttype] = func
+ func.params = frozenset(params)
return func
return _decorator
@@ -839,7 +840,7 @@
raise error.BundleValueError(**kwargs)
-@parthandler('b2x:error:pushraced')
+@parthandler('b2x:error:pushraced', ('message',))
def handlereplycaps(op, inpart):
"""Used to transmit push race error over the wire"""
raise error.ResponseError(_('push failed:'), inpart.params['message'])