# HG changeset patch # User Pierre-Yves David # Date 1401216588 25200 # Node ID 5b26d82e4e2aeb41525d0cb991e5939a90db89ee # Parent 457492741007fd361b906f5e48e10e8e9d6d7254 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. diff -r 457492741007 -r 5b26d82e4e2a 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'])