comparison mercurial/bundle2.py @ 23010:73f394f4affc

bundle2: add an UnsupportedPartError We need the BundleValueError for format errors not related to part support. So we add a specific class for part-support errors.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Wed, 15 Oct 2014 03:22:47 -0700
parents 90f86ad3d4ff
children 006a81d07e57
comparison
equal deleted inserted replaced
23009:90f86ad3d4ff 23010:73f394f4affc
319 # part key are matched lower case 319 # part key are matched lower case
320 key = parttype.lower() 320 key = parttype.lower()
321 try: 321 try:
322 handler = parthandlermapping.get(key) 322 handler = parthandlermapping.get(key)
323 if handler is None: 323 if handler is None:
324 raise error.BundleValueError(parttype=key) 324 raise error.UnsupportedPartError(parttype=key)
325 op.ui.debug('found a handler for part %r\n' % parttype) 325 op.ui.debug('found a handler for part %r\n' % parttype)
326 unknownparams = part.mandatorykeys - handler.params 326 unknownparams = part.mandatorykeys - handler.params
327 if unknownparams: 327 if unknownparams:
328 unknownparams = list(unknownparams) 328 unknownparams = list(unknownparams)
329 unknownparams.sort() 329 unknownparams.sort()
330 raise error.BundleValueError(parttype=key, 330 raise error.UnsupportedPartError(parttype=key,
331 params=unknownparams) 331 params=unknownparams)
332 except error.BundleValueError, exc: 332 except error.UnsupportedPartError, exc:
333 if key != parttype: # mandatory parts 333 if key != parttype: # mandatory parts
334 raise 334 raise
335 op.ui.debug('ignoring unsupported advisory part %s\n' % exc) 335 op.ui.debug('ignoring unsupported advisory part %s\n' % exc)
336 return # skip to part processing 336 return # skip to part processing
337 337
536 # Some logic will be later added here to try to process the option for 536 # Some logic will be later added here to try to process the option for
537 # a dict of known parameter. 537 # a dict of known parameter.
538 if name[0].islower(): 538 if name[0].islower():
539 self.ui.debug("ignoring unknown parameter %r\n" % name) 539 self.ui.debug("ignoring unknown parameter %r\n" % name)
540 else: 540 else:
541 raise error.BundleValueError(params=(name,)) 541 raise error.UnsupportedPartError(params=(name,))
542 542
543 543
544 def iterparts(self): 544 def iterparts(self):
545 """yield all parts contained in the stream""" 545 """yield all parts contained in the stream"""
546 # make sure param have been loaded 546 # make sure param have been loaded
892 kwargs['parttype'] = parttype 892 kwargs['parttype'] = parttype
893 params = inpart.params.get('params') 893 params = inpart.params.get('params')
894 if params is not None: 894 if params is not None:
895 kwargs['params'] = params.split('\0') 895 kwargs['params'] = params.split('\0')
896 896
897 raise error.BundleValueError(**kwargs) 897 raise error.UnsupportedPartError(**kwargs)
898 898
899 @parthandler('b2x:error:pushraced', ('message',)) 899 @parthandler('b2x:error:pushraced', ('message',))
900 def handlereplycaps(op, inpart): 900 def handlereplycaps(op, inpart):
901 """Used to transmit push race error over the wire""" 901 """Used to transmit push race error over the wire"""
902 raise error.ResponseError(_('push failed:'), inpart.params['message']) 902 raise error.ResponseError(_('push failed:'), inpart.params['message'])