changeset 21623:5b26d82e4e2a

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.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Tue, 27 May 2014 11:49:48 -0700
parents 457492741007
children d61066d787c8
files mercurial/bundle2.py
diffstat 1 files changed, 3 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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'])