comparison mercurial/bundle2.py @ 34259:07e4170f02f3

bundle2: move handler validation out of processpart As part of refactoring bundle part processing let's move handler validation to its own function. Differential Revision: https://phab.mercurial-scm.org/D707
author Durham Goode <durham@fb.com>
date Thu, 14 Sep 2017 10:20:05 -0700
parents e71890f27767
children cc7b37c90616
comparison
equal deleted inserted replaced
34258:e71890f27767 34259:07e4170f02f3
458 op.records.add('changegroup', { 458 op.records.add('changegroup', {
459 'return': ret, 459 'return': ret,
460 }) 460 })
461 return ret 461 return ret
462 462
463 def _gethandler(op, part):
464 status = 'unknown' # used by debug output
465 try:
466 handler = parthandlermapping.get(part.type)
467 if handler is None:
468 status = 'unsupported-type'
469 raise error.BundleUnknownFeatureError(parttype=part.type)
470 indebug(op.ui, 'found a handler for part %r' % part.type)
471 unknownparams = part.mandatorykeys - handler.params
472 if unknownparams:
473 unknownparams = list(unknownparams)
474 unknownparams.sort()
475 status = 'unsupported-params (%s)' % unknownparams
476 raise error.BundleUnknownFeatureError(parttype=part.type,
477 params=unknownparams)
478 status = 'supported'
479 except error.BundleUnknownFeatureError as exc:
480 if part.mandatory: # mandatory parts
481 raise
482 indebug(op.ui, 'ignoring unsupported advisory part %s' % exc)
483 return # skip to part processing
484 finally:
485 if op.ui.debugflag:
486 msg = ['bundle2-input-part: "%s"' % part.type]
487 if not part.mandatory:
488 msg.append(' (advisory)')
489 nbmp = len(part.mandatorykeys)
490 nbap = len(part.params) - nbmp
491 if nbmp or nbap:
492 msg.append(' (params:')
493 if nbmp:
494 msg.append(' %i mandatory' % nbmp)
495 if nbap:
496 msg.append(' %i advisory' % nbmp)
497 msg.append(')')
498 msg.append(' %s\n' % status)
499 op.ui.debug(''.join(msg))
500
501 return handler
502
463 def _processpart(op, part): 503 def _processpart(op, part):
464 """process a single part from a bundle 504 """process a single part from a bundle
465 505
466 The part is guaranteed to have been fully consumed when the function exits 506 The part is guaranteed to have been fully consumed when the function exits
467 (even if an exception is raised).""" 507 (even if an exception is raised)."""
468 status = 'unknown' # used by debug output
469 try: 508 try:
470 try: 509 handler = _gethandler(op, part)
471 handler = parthandlermapping.get(part.type) 510 if handler is None:
472 if handler is None: 511 return
473 status = 'unsupported-type'
474 raise error.BundleUnknownFeatureError(parttype=part.type)
475 indebug(op.ui, 'found a handler for part %r' % part.type)
476 unknownparams = part.mandatorykeys - handler.params
477 if unknownparams:
478 unknownparams = list(unknownparams)
479 unknownparams.sort()
480 status = 'unsupported-params (%s)' % unknownparams
481 raise error.BundleUnknownFeatureError(parttype=part.type,
482 params=unknownparams)
483 status = 'supported'
484 except error.BundleUnknownFeatureError as exc:
485 if part.mandatory: # mandatory parts
486 raise
487 indebug(op.ui, 'ignoring unsupported advisory part %s' % exc)
488 return # skip to part processing
489 finally:
490 if op.ui.debugflag:
491 msg = ['bundle2-input-part: "%s"' % part.type]
492 if not part.mandatory:
493 msg.append(' (advisory)')
494 nbmp = len(part.mandatorykeys)
495 nbap = len(part.params) - nbmp
496 if nbmp or nbap:
497 msg.append(' (params:')
498 if nbmp:
499 msg.append(' %i mandatory' % nbmp)
500 if nbap:
501 msg.append(' %i advisory' % nbmp)
502 msg.append(')')
503 msg.append(' %s\n' % status)
504 op.ui.debug(''.join(msg))
505 512
506 # handler is called outside the above try block so that we don't 513 # handler is called outside the above try block so that we don't
507 # risk catching KeyErrors from anything other than the 514 # risk catching KeyErrors from anything other than the
508 # parthandlermapping lookup (any KeyError raised by handler() 515 # parthandlermapping lookup (any KeyError raised by handler()
509 # itself represents a defect of a different variety). 516 # itself represents a defect of a different variety).