Mercurial > public > mercurial-scm > hg
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). |