# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: chromiumos/generate_build_plan.proto
"""Generated protocol buffer code."""
from chromite.third_party.google.protobuf.internal import builder as _builder
from chromite.third_party.google.protobuf import descriptor as _descriptor
from chromite.third_party.google.protobuf import descriptor_pool as _descriptor_pool
from chromite.third_party.google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()


from chromite.api.gen.chromiumos import builder_config_pb2 as chromiumos_dot_builder__config__pb2
from chromite.api.gen.chromiumos import common_pb2 as chromiumos_dot_common__pb2


DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$chromiumos/generate_build_plan.proto\x12\nchromiumos\x1a\x1f\x63hromiumos/builder_config.proto\x1a\x17\x63hromiumos/common.proto\"\xa4\x02\n\x18GenerateBuildPlanRequest\x12\x41\n\x0e\x61\x66\x66\x65\x63ted_paths\x18\x05 \x03(\x0b\x32).chromiumos.GenerateBuildPlanRequest.Path\x12.\n\x0egerrit_changes\x18\x01 \x03(\x0b\x32\x16.chromiumos.ProtoBytes\x12.\n\x0egitiles_commit\x18\x04 \x01(\x0b\x32\x16.chromiumos.ProtoBytes\x12\x1b\n\x0fmanifest_commit\x18\x02 \x01(\tB\x02\x18\x01\x12\x32\n\x0f\x62uilder_configs\x18\x03 \x03(\x0b\x32\x19.chromiumos.BuilderConfig\x1a\x14\n\x04Path\x12\x0c\n\x04path\x18\x01 \x01(\t\"\xd8\x01\n\x19GenerateBuildPlanResponse\x12\x33\n\rbuilds_to_run\x18\x01 \x03(\x0b\x32\x1c.chromiumos.BuilderConfig.Id\x12G\n!skip_for_global_build_irrelevance\x18\x02 \x03(\x0b\x32\x1c.chromiumos.BuilderConfig.Id\x12=\n\x17skip_for_run_when_rules\x18\x03 \x03(\x0b\x32\x1c.chromiumos.BuilderConfig.IdBY\n!com.google.chrome.crosinfra.protoZ4go.chromium.org/chromiumos/infra/proto/go/chromiumosb\x06proto3')

_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chromiumos.generate_build_plan_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:

  DESCRIPTOR._options = None
  DESCRIPTOR._serialized_options = b'\n!com.google.chrome.crosinfra.protoZ4go.chromium.org/chromiumos/infra/proto/go/chromiumos'
  _GENERATEBUILDPLANREQUEST.fields_by_name['manifest_commit']._options = None
  _GENERATEBUILDPLANREQUEST.fields_by_name['manifest_commit']._serialized_options = b'\030\001'
  _GENERATEBUILDPLANREQUEST._serialized_start=111
  _GENERATEBUILDPLANREQUEST._serialized_end=403
  _GENERATEBUILDPLANREQUEST_PATH._serialized_start=383
  _GENERATEBUILDPLANREQUEST_PATH._serialized_end=403
  _GENERATEBUILDPLANRESPONSE._serialized_start=406
  _GENERATEBUILDPLANRESPONSE._serialized_end=622
# @@protoc_insertion_point(module_scope)
