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

_sym_db = _symbol_database.Default()


from chromite.api.gen_sdk.chromiumos import builder_config_pb2 as chromiumos_dot_builder__config__pb2
from chromite.api.gen_sdk.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')

_globals = globals()
_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'
  _globals['_GENERATEBUILDPLANREQUEST']._serialized_start=111
  _globals['_GENERATEBUILDPLANREQUEST']._serialized_end=403
  _globals['_GENERATEBUILDPLANREQUEST_PATH']._serialized_start=383
  _globals['_GENERATEBUILDPLANREQUEST_PATH']._serialized_end=403
  _globals['_GENERATEBUILDPLANRESPONSE']._serialized_start=406
  _globals['_GENERATEBUILDPLANRESPONSE']._serialized_end=622
# @@protoc_insertion_point(module_scope)
