bundle2: make it possible to declare params handled by a part handler
authorPierre-Yves David <pierre-yves.david@fb.com>
Tue, 27 May 2014 11:49:48 -0700
changeset 21623 5b26d82e4e2a
parent 21622 457492741007
child 21624 d61066d787c8
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.
mercurial/bundle2.py
--- 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'])