comparison mercurial/bundle2.py @ 21626:985d139c8e8f

bundle2: ignore advisory part with unknown parameters Advisory parts are advisory. If a handler exists but does not support the proper parameters, we can safely ignore it. Test has been updated to include this case.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Tue, 27 May 2014 12:16:45 -0700
parents 511f5fa63aa2
children 3e8bcc90f07c
comparison
equal deleted inserted replaced
21625:511f5fa63aa2 21626:985d139c8e8f
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).