def generate_arg_parser()

in tools/dossier_codesigningtool/dossier_codesigningtool.py [0:0]


def generate_arg_parser():
  """Generate argument parser for tool."""
  parser = argparse.ArgumentParser(
      description='Tool for signing iOS bundles using dossiers.',
      fromfile_prefix_chars='@')
  subparsers = parser.add_subparsers(help='Sub-commands')

  sign_parser = subparsers.add_parser(
      'sign', help='Sign an apple bundle using a dossier.')
  sign_parser.add_argument(
      '--dossier',
      help='Path to input dossier location. Can be a directory or .zip file.')
  sign_parser.add_argument(
      '--codesign', required=True, type=str, help='Path to codesign binary')
  sign_parser.add_argument('bundle', help='Path to the bundle')
  sign_parser.set_defaults(func=_sign_bundle)

  generate_parser = subparsers.add_parser(
      'generate', help='Generate a dossier from a signed bundle.')
  generate_parser.add_argument(
      '--output',
      required=True,
      help='Path to output manifest dossier location.')
  generate_parser.add_argument(
      '--zip',
      action='store_true',
      help='Zip the final dossier into a file at specified location.')
  generate_parser.add_argument(
      '--codesign', required=True, type=str, help='Path to codesign binary')
  generate_parser.add_argument('bundle', help='Path to the bundle')
  generate_parser.set_defaults(func=_generate_manifest_dossier)

  create_parser = subparsers.add_parser('create', help='Create a dossier.')
  create_parser.add_argument(
      '--output',
      required=True,
      help='Path to output manifest dossier location.')
  create_parser.add_argument(
      '--zip',
      action='store_true',
      help='Zip the final dossier into a file at specified location.')
  identity_group = create_parser.add_mutually_exclusive_group(required=True)
  identity_group.add_argument(
      '--codesign_identity', type=str, help='Codesigning identity to be used.')
  identity_group.add_argument(
      '--infer_identity',
      action='store_true',
      help='Infer the codesigning identity based on provisioning profile at signing time. If this option is passed, the provisioning profile is mandatory.'
  )
  create_parser.add_argument(
      '--provisioning_profile',
      type=str,
      help='Optional provisioning profile to be used.')
  create_parser.add_argument(
      '--entitlements_file',
      type=str,
      help='Optional path to optional entitlements')
  create_parser.add_argument(
      '--embedded_dossier',
      action='append',
      nargs=2,
      help='Specifies an embedded bundle dossier to be included in created dossier. Should be in form [relative path of artifact dossier signs] [path to dossier]'
  )
  create_parser.set_defaults(func=_create_dossier)

  embed_parser = subparsers.add_parser(
      'embed',
      help='Embeds a dossier into an existing dossier. Only supports embedding at the top level of the existing dossier.'
  )
  embed_parser.add_argument(
      '--dossier', required=True, help='Path to dossier location to edit.')
  embed_parser.add_argument(
      '--embedded_relative_artifact_path',
      required=True,
      type=str,
      help='Relative path of artifact the dossier to be embedded signs')
  embed_parser.add_argument(
      '--embedded_dossier_path',
      required=True,
      type=str,
      help='Path to dossier to be embedded')
  embed_parser.set_defaults(func=_embed_dossier)

  return parser