292 for part in iterparts: |
292 for part in iterparts: |
293 parttype = part.type |
293 parttype = part.type |
294 # part key are matched lower case |
294 # part key are matched lower case |
295 key = parttype.lower() |
295 key = parttype.lower() |
296 try: |
296 try: |
297 handler = parthandlermapping[key] |
297 handler = parthandlermapping.get(key) |
|
298 if handler is None: |
|
299 raise error.BundleValueError(parttype=key) |
298 op.ui.debug('found a handler for part %r\n' % parttype) |
300 op.ui.debug('found a handler for part %r\n' % parttype) |
299 except KeyError: |
301 unknownparams = part.mandatorykeys - handler.params |
|
302 if unknownparams: |
|
303 unknownparams = list(unknownparams) |
|
304 unknownparams.sort() |
|
305 raise error.BundleValueError(parttype=key, |
|
306 params=unknownparams) |
|
307 except error.BundleValueError, exc: |
300 if key != parttype: # mandatory parts |
308 if key != parttype: # mandatory parts |
301 # todo: |
309 raise |
302 # - use a more precise exception |
310 op.ui.debug('ignoring unsupported advisory part %s\n' % exc) |
303 raise error.BundleValueError(parttype=key) |
|
304 op.ui.debug('ignoring unknown advisory part %r\n' % key) |
|
305 # consuming the part |
311 # consuming the part |
306 part.read() |
312 part.read() |
307 continue |
313 continue |
308 |
314 |
309 unknownparams = part.mandatorykeys - handler.params |
|
310 if unknownparams: |
|
311 unknownparams = list(unknownparams) |
|
312 unknownparams.sort() |
|
313 raise error.BundleValueError(parttype=key, params=unknownparams) |
|
314 |
315 |
315 # handler is called outside the above try block so that we don't |
316 # handler is called outside the above try block so that we don't |
316 # risk catching KeyErrors from anything other than the |
317 # risk catching KeyErrors from anything other than the |
317 # parthandlermapping lookup (any KeyError raised by handler() |
318 # parthandlermapping lookup (any KeyError raised by handler() |
318 # itself represents a defect of a different variety). |
319 # itself represents a defect of a different variety). |