| // Copyright 2020 The LUCI Authors. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| // Code generated by protoc-gen-go. DO NOT EDIT. |
| // versions: |
| // protoc-gen-go v1.33.0 |
| // protoc v5.26.1 |
| // source: go.chromium.org/luci/cv/internal/changelist/storage.proto |
| |
| package changelist |
| |
| import ( |
| gerrit "go.chromium.org/luci/common/proto/gerrit" |
| protoreflect "google.golang.org/protobuf/reflect/protoreflect" |
| protoimpl "google.golang.org/protobuf/runtime/protoimpl" |
| timestamppb "google.golang.org/protobuf/types/known/timestamppb" |
| reflect "reflect" |
| sync "sync" |
| ) |
| |
| const ( |
| // Verify that this generated code is sufficiently up-to-date. |
| _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) |
| // Verify that runtime/protoimpl is sufficiently up-to-date. |
| _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) |
| ) |
| |
| type DepKind int32 |
| |
| const ( |
| DepKind_DEP_KIND_UNSPECIFIED DepKind = 0 |
| // Dep MUST be patched in / submitted before the dependent CL. |
| DepKind_HARD DepKind = 1 |
| // Dep SHOULD be patched in / submitted before the dependent CL, |
| // but doesn't have to be. |
| DepKind_SOFT DepKind = 2 |
| ) |
| |
| // Enum value maps for DepKind. |
| var ( |
| DepKind_name = map[int32]string{ |
| 0: "DEP_KIND_UNSPECIFIED", |
| 1: "HARD", |
| 2: "SOFT", |
| } |
| DepKind_value = map[string]int32{ |
| "DEP_KIND_UNSPECIFIED": 0, |
| "HARD": 1, |
| "SOFT": 2, |
| } |
| ) |
| |
| func (x DepKind) Enum() *DepKind { |
| p := new(DepKind) |
| *p = x |
| return p |
| } |
| |
| func (x DepKind) String() string { |
| return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) |
| } |
| |
| func (DepKind) Descriptor() protoreflect.EnumDescriptor { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_enumTypes[0].Descriptor() |
| } |
| |
| func (DepKind) Type() protoreflect.EnumType { |
| return &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_enumTypes[0] |
| } |
| |
| func (x DepKind) Number() protoreflect.EnumNumber { |
| return protoreflect.EnumNumber(x) |
| } |
| |
| // Deprecated: Use DepKind.Descriptor instead. |
| func (DepKind) EnumDescriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{0} |
| } |
| |
| // Snapshot stores a snapshot of CL info as seen by CV at a certain time. |
| // |
| // When stored in CL entity, represents latest known Gerrit data. |
| // When stored in RunCL entity, represents data pertaining to a fixed patchset. |
| type Snapshot struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| |
| // The timestamp from external system. |
| // Used to determine if re-querying external system is needed. |
| ExternalUpdateTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=external_update_time,json=externalUpdateTime,proto3" json:"external_update_time,omitempty"` |
| // LUCI project in the context of which this snapshot was saved. |
| // |
| // Since a CL isn't a resource of CV, CV can't infer whether specific LUCI |
| // project has access to a CL w/o re-querying Gerrit and effectively |
| // recomputing the snapshot. |
| LuciProject string `protobuf:"bytes,2,opt,name=luci_project,json=luciProject,proto3" json:"luci_project,omitempty"` |
| // Resolved dependencies of a CL. |
| Deps []*Dep `protobuf:"bytes,3,rep,name=deps,proto3" json:"deps,omitempty"` |
| // Patchset is incremental number of the latest patchset (aka revision). |
| Patchset int32 `protobuf:"varint,4,opt,name=patchset,proto3" json:"patchset,omitempty"` |
| // MinEquivalentPatchset is the smallest and hence the earliest patchset |
| // which is code-wise equivalent to the latest one. |
| // |
| // See gerrit.EquivalentPatchsetRange function for details. |
| // |
| // CV tracks this to determine which prior tryjobs can be re-used and which |
| // can be canceled. |
| MinEquivalentPatchset int32 `protobuf:"varint,5,opt,name=min_equivalent_patchset,json=minEquivalentPatchset,proto3" json:"min_equivalent_patchset,omitempty"` |
| // If set, indicates problems while ingesting CL into CV, which ought to be |
| // communicated back to user. |
| Errors []*CLError `protobuf:"bytes,6,rep,name=errors,proto3" json:"errors,omitempty"` |
| // Outdated if set means Snapshot must be considered likely outdated due to |
| // recent CV mutations. |
| // |
| // In particular, Project Manager does not act on the CLs with .Outdated set. |
| Outdated *Snapshot_Outdated `protobuf:"bytes,7,opt,name=outdated,proto3" json:"outdated,omitempty"` |
| // Metadata is an ordered list of key-value pairs, which may later be |
| // interpreted by CV guts. |
| // |
| // For example, |
| // |
| // [("No-Tree-Checks", "True"), ("NOTRY", "TRUE")]. |
| // |
| // In case of Gerrit CLs, these are extracted from CL descriptions, |
| // The Git-Footer-Style keys are normalized. |
| // The values are stripped from beginning and trailing whitespace. |
| Metadata []*StringPair `protobuf:"bytes,8,rep,name=metadata,proto3" json:"metadata,omitempty"` |
| // CL-kind specific data. |
| // |
| // Types that are assignable to Kind: |
| // |
| // *Snapshot_Gerrit |
| Kind isSnapshot_Kind `protobuf_oneof:"kind"` |
| } |
| |
| func (x *Snapshot) Reset() { |
| *x = Snapshot{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[0] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *Snapshot) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*Snapshot) ProtoMessage() {} |
| |
| func (x *Snapshot) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[0] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use Snapshot.ProtoReflect.Descriptor instead. |
| func (*Snapshot) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{0} |
| } |
| |
| func (x *Snapshot) GetExternalUpdateTime() *timestamppb.Timestamp { |
| if x != nil { |
| return x.ExternalUpdateTime |
| } |
| return nil |
| } |
| |
| func (x *Snapshot) GetLuciProject() string { |
| if x != nil { |
| return x.LuciProject |
| } |
| return "" |
| } |
| |
| func (x *Snapshot) GetDeps() []*Dep { |
| if x != nil { |
| return x.Deps |
| } |
| return nil |
| } |
| |
| func (x *Snapshot) GetPatchset() int32 { |
| if x != nil { |
| return x.Patchset |
| } |
| return 0 |
| } |
| |
| func (x *Snapshot) GetMinEquivalentPatchset() int32 { |
| if x != nil { |
| return x.MinEquivalentPatchset |
| } |
| return 0 |
| } |
| |
| func (x *Snapshot) GetErrors() []*CLError { |
| if x != nil { |
| return x.Errors |
| } |
| return nil |
| } |
| |
| func (x *Snapshot) GetOutdated() *Snapshot_Outdated { |
| if x != nil { |
| return x.Outdated |
| } |
| return nil |
| } |
| |
| func (x *Snapshot) GetMetadata() []*StringPair { |
| if x != nil { |
| return x.Metadata |
| } |
| return nil |
| } |
| |
| func (m *Snapshot) GetKind() isSnapshot_Kind { |
| if m != nil { |
| return m.Kind |
| } |
| return nil |
| } |
| |
| func (x *Snapshot) GetGerrit() *Gerrit { |
| if x, ok := x.GetKind().(*Snapshot_Gerrit); ok { |
| return x.Gerrit |
| } |
| return nil |
| } |
| |
| type isSnapshot_Kind interface { |
| isSnapshot_Kind() |
| } |
| |
| type Snapshot_Gerrit struct { |
| Gerrit *Gerrit `protobuf:"bytes,11,opt,name=gerrit,proto3,oneof"` |
| } |
| |
| func (*Snapshot_Gerrit) isSnapshot_Kind() {} |
| |
| type Dep struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| |
| // CLID is internal CV ID of a CL which is the dependency. |
| Clid int64 `protobuf:"varint,1,opt,name=clid,proto3" json:"clid,omitempty"` |
| Kind DepKind `protobuf:"varint,2,opt,name=kind,proto3,enum=cv.internal.changelist.DepKind" json:"kind,omitempty"` |
| } |
| |
| func (x *Dep) Reset() { |
| *x = Dep{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[1] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *Dep) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*Dep) ProtoMessage() {} |
| |
| func (x *Dep) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[1] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use Dep.ProtoReflect.Descriptor instead. |
| func (*Dep) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{1} |
| } |
| |
| func (x *Dep) GetClid() int64 { |
| if x != nil { |
| return x.Clid |
| } |
| return 0 |
| } |
| |
| func (x *Dep) GetKind() DepKind { |
| if x != nil { |
| return x.Kind |
| } |
| return DepKind_DEP_KIND_UNSPECIFIED |
| } |
| |
| type Gerrit struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| |
| // Gerrit host. |
| Host string `protobuf:"bytes,5,opt,name=host,proto3" json:"host,omitempty"` |
| // Info contains subset of ChangeInfo listed below. |
| // |
| // NOTE: keep this list in sync with RemoveUnusedGerritInfo() function. |
| // - number |
| // - owner |
| // - id |
| // - email (may be not set) |
| // - project |
| // - ref |
| // - status |
| // - current_revision |
| // - revisions |
| // - kind |
| // - number |
| // - ref |
| // - created |
| // - commit |
| // - id |
| // - parents |
| // - labels |
| // - optional |
| // - all (only if vote != 0) |
| // - user |
| // - id |
| // - email (may be not set) |
| // - value |
| // - messages |
| // - id |
| // - date |
| // - message |
| // - author |
| // - id |
| // - realauthor |
| // - id |
| // - updated |
| // - created |
| Info *gerrit.ChangeInfo `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` |
| // Files are filenames touched in the current revision. |
| // |
| // It's derived from gerrit.ListFilesResponse, see |
| // https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#list-files. |
| Files []string `protobuf:"bytes,2,rep,name=files,proto3" json:"files,omitempty"` |
| // Git dependencies of the current revision. |
| GitDeps []*GerritGitDep `protobuf:"bytes,3,rep,name=git_deps,json=gitDeps,proto3" json:"git_deps,omitempty"` |
| // Free-form dependencies. Currently, sourced from CQ-Depend footers. |
| // In the future, this may be derived from Gerrit hashtags, topics, or other |
| // mechanisms. |
| SoftDeps []*GerritSoftDep `protobuf:"bytes,4,rep,name=soft_deps,json=softDeps,proto3" json:"soft_deps,omitempty"` |
| } |
| |
| func (x *Gerrit) Reset() { |
| *x = Gerrit{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[2] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *Gerrit) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*Gerrit) ProtoMessage() {} |
| |
| func (x *Gerrit) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[2] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use Gerrit.ProtoReflect.Descriptor instead. |
| func (*Gerrit) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{2} |
| } |
| |
| func (x *Gerrit) GetHost() string { |
| if x != nil { |
| return x.Host |
| } |
| return "" |
| } |
| |
| func (x *Gerrit) GetInfo() *gerrit.ChangeInfo { |
| if x != nil { |
| return x.Info |
| } |
| return nil |
| } |
| |
| func (x *Gerrit) GetFiles() []string { |
| if x != nil { |
| return x.Files |
| } |
| return nil |
| } |
| |
| func (x *Gerrit) GetGitDeps() []*GerritGitDep { |
| if x != nil { |
| return x.GitDeps |
| } |
| return nil |
| } |
| |
| func (x *Gerrit) GetSoftDeps() []*GerritSoftDep { |
| if x != nil { |
| return x.SoftDeps |
| } |
| return nil |
| } |
| |
| // GerritGitDep is a dependency discovered via Git child->parent chain for one Gerrit CL. |
| type GerritGitDep struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| |
| // Gerrit Change number. |
| Change int64 `protobuf:"varint,1,opt,name=change,proto3" json:"change,omitempty"` |
| // Immediate is set iff this dep is an immediate parent of the Gerrit CL. |
| // |
| // Immediate dep must be submitted before its child. |
| // Non-immediate CLs don't necessarily have to be submitted before: |
| // |
| // for example, for a chain <base> <- A1 <- B1 <- C1 <- D1 |
| // D1's deps are [A,B,C] but only C is immediate, and 1 stands for patchset. |
| // Developer may then swap B,C without re-uploading D (say, to avoid |
| // patchset churn), resulting in a new logical chain: |
| // <base> <- A1 <- C2 <- B2 |
| // \ |
| // <- B1 <- C1 <- D1 |
| // |
| // In this case, Gerrit's related changes for D1 will still return A1,B1,C1, |
| // which CV interprets as C must be landed before D, while B and A should |
| // be landed before D. |
| Immediate bool `protobuf:"varint,2,opt,name=immediate,proto3" json:"immediate,omitempty"` |
| } |
| |
| func (x *GerritGitDep) Reset() { |
| *x = GerritGitDep{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[3] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *GerritGitDep) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*GerritGitDep) ProtoMessage() {} |
| |
| func (x *GerritGitDep) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[3] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use GerritGitDep.ProtoReflect.Descriptor instead. |
| func (*GerritGitDep) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{3} |
| } |
| |
| func (x *GerritGitDep) GetChange() int64 { |
| if x != nil { |
| return x.Change |
| } |
| return 0 |
| } |
| |
| func (x *GerritGitDep) GetImmediate() bool { |
| if x != nil { |
| return x.Immediate |
| } |
| return false |
| } |
| |
| type GerritSoftDep struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| |
| // Gerrit host. |
| Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` |
| // Gerrit change number. |
| Change int64 `protobuf:"varint,2,opt,name=change,proto3" json:"change,omitempty"` |
| } |
| |
| func (x *GerritSoftDep) Reset() { |
| *x = GerritSoftDep{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[4] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *GerritSoftDep) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*GerritSoftDep) ProtoMessage() {} |
| |
| func (x *GerritSoftDep) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[4] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use GerritSoftDep.ProtoReflect.Descriptor instead. |
| func (*GerritSoftDep) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{4} |
| } |
| |
| func (x *GerritSoftDep) GetHost() string { |
| if x != nil { |
| return x.Host |
| } |
| return "" |
| } |
| |
| func (x *GerritSoftDep) GetChange() int64 { |
| if x != nil { |
| return x.Change |
| } |
| return 0 |
| } |
| |
| // ApplicableConfig keeps track of configs applicable to a CL. |
| // |
| // This is computed based on known set of LUCI project configs, versions of |
| // which are updated by CV independently, so the ApplicableConfig are also |
| // eventually consistent. |
| // |
| // Normally, there is 1 applicable configs = exactly 1 project with 1 config |
| // group. If CL is no longer watched by CV, there will be 0 applicable configs. |
| // |
| // Sometimes, there can be 2+ applicable configs. This happens if either: |
| // - eventual consistency: responsibility for CL is moved from one LUCI project |
| // to another. Three is no way to make this atomically, so CL may temporarily |
| // end up with 0 or 2 projects watching it, before settling on just 1. |
| // - misconfiguration: two projects or 2 different ConfigGroups within the same |
| // project watch the same CL. |
| // |
| // In either case, CV refuses to guess and will abstain from processing such |
| // CLs, but storing the list is very useful for CV debugging and potentially for |
| // better diagnostic messages to CV users and LUCI project owners. |
| type ApplicableConfig struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| |
| Projects []*ApplicableConfig_Project `protobuf:"bytes,2,rep,name=projects,proto3" json:"projects,omitempty"` |
| } |
| |
| func (x *ApplicableConfig) Reset() { |
| *x = ApplicableConfig{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[5] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *ApplicableConfig) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*ApplicableConfig) ProtoMessage() {} |
| |
| func (x *ApplicableConfig) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[5] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use ApplicableConfig.ProtoReflect.Descriptor instead. |
| func (*ApplicableConfig) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{5} |
| } |
| |
| func (x *ApplicableConfig) GetProjects() []*ApplicableConfig_Project { |
| if x != nil { |
| return x.Projects |
| } |
| return nil |
| } |
| |
| // Access records which LUCI project can or can't see a CL. |
| // |
| // If a LUCI project has Access, it means both: |
| // |
| // (1) the project can read details of the CL (via Git/Gerrit ACLs); |
| // (2) the project is the only LUCI project watching this CL in CV |
| // (via the CV config). |
| // Note: there can still be several applicable ConfigGroups of the same |
| // project (see ApplicableConfig). |
| // |
| // In practice, .Access is set in 4 cases: |
| // |
| // (a) `CQ-Depend: host:number` Gerrit CL footers allow users to specify |
| // |
| // arbitrary dependencies, which typically happens due to typos, |
| // but malicious actors can try to get CL details of restricted projects. |
| // Either way, CV must not be a confused deputy here and must keep track |
| // which project can see what. |
| // |
| // (b) due to recent re-configuration of one or more LUCI projects, either |
| // |
| // in CV config and/or in Gerrit ACLs, the previously watched & readable CL |
| // becomes unwatched and/or unreadable. |
| // |
| // (c) a previously existing CL was deleted (e.g. by its owner or Gerrit |
| // |
| // administrators). |
| // |
| // (d) eventual consistency of Gerrit masquerading as HTTP 404 on stale replica, |
| // |
| // while quorum of replicas think CL actually exists and specific LUCI |
| // project having access to it. |
| // |
| // Unfortunately, (d) isn't easy to distinguish from (b) and (c), so CV resorts |
| // to tracking time since CL became invisible -- the longer, the more likely it |
| // is (b) or (c). |
| // |
| // Furthermore, in case of (a), iff CV knows nothing about specific Gerrit CL |
| // identified as `CQ-Depend: host:change`, CV in general can't determine which |
| // LUCI project is allowed to watch this CL *before* fetching Gerrit project |
| // (repo) and target ref. |
| // |
| // NOTE on CV as confused deputy. |
| // |
| // CV works with multiple LUCI projects. As of this writing (June 2021), |
| // unfortunately, CV doesn't verify that Gerrit repos watched by a LUCI project |
| // are in fact owned by that LUCI project. Thus, nothing prevents one LUCI |
| // project from starting to watch repos de-facto owned by another LUCI project. |
| // This in turn brings 2 problems: |
| // |
| // (1) Denial of service: unsolved. |
| // |
| // Mitigation: CV will refuse to work with CLs which are watched by more |
| // than 1 project. Since CV will communicate by posting message to affected |
| // CL, this should be noticed and fixed quickly. |
| // |
| // (2) Information leaks: solved. |
| // |
| // Each LUCI project MUST use project-scoped service account (PSSA) |
| // (migration is under way, see https://crbug.com/824492). |
| // CV uses this account for all interaction with Gerrit on behalf a specific |
| // LUCI project. Corresponding Gerrit repos: |
| // * SHOULD limit read access to its own PSSA + developers, |
| // * MUST limit Submit rights to its own PSSA and possibly developers. |
| // |
| // For example, |
| // - `infra` project has all its Gerrit CLs public and doesn't care about |
| // information leaks. All other LUCI projects can read its CLs, as well |
| // as the whole Internet. |
| // - `infra-internal` project protects its Gerrit CLs, making them visible |
| // to `infra-internal-scoped@...` account only. |
| // When CV queries Gerrit on `infra-internal` behalf, CV uses |
| // `infra-internal-scoped` account and can fetch the data. |
| // - Suppose malicious actor compromised `infra` repo, and placed a new CV |
| // config there to start watching CLs of the `infra-internal` project |
| // as well as super/secret/repo, which wasn't watched by any CV before. |
| // - Unfortunately, CV can't currently object to the new config. |
| // - However, when querying Gerrit on `infra` behalf, CV uses |
| // `infra-scoped@...` account, which presumably won't be configured with |
| // read access to neither infra-internal nor super/secret/repo. |
| // - So, corresponding CLs will have .Access entry recording that |
| // `infra` has no access to them. |
| // - NOTE: CLs of infra-internal will also have .ApplicableConfig with two |
| // projects there, which will prevent normal operation of |
| // `infra-internal` CV but will not cause any leaks. |
| type Access struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| |
| ByProject map[string]*Access_Project `protobuf:"bytes,1,rep,name=by_project,json=byProject,proto3" json:"by_project,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // TODO(tandrii): per-project ApplicableConfig here. |
| } |
| |
| func (x *Access) Reset() { |
| *x = Access{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[6] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *Access) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*Access) ProtoMessage() {} |
| |
| func (x *Access) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[6] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use Access.ProtoReflect.Descriptor instead. |
| func (*Access) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{6} |
| } |
| |
| func (x *Access) GetByProject() map[string]*Access_Project { |
| if x != nil { |
| return x.ByProject |
| } |
| return nil |
| } |
| |
| // CLError encapsulates all kinds of CL errors, which ultimately result in |
| // purging of the CL while communicating the reason to the relevant users. |
| // |
| // The primary goal of the CLError is to transport via CV guts sufficient |
| // information to generate a clear user-friendly error message. |
| type CLError struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| |
| // Next tag is 12. |
| // |
| // Types that are assignable to Kind: |
| // |
| // *CLError_OwnerLacksEmail |
| // *CLError_WatchedByManyConfigGroups_ |
| // *CLError_WatchedByManyProjects_ |
| // *CLError_InvalidDeps_ |
| // *CLError_UnsupportedMode |
| // *CLError_SelfCqDepend |
| // *CLError_CorruptGerritMetadata |
| // *CLError_ReusedTrigger_ |
| // *CLError_CommitBlocked |
| // *CLError_TriggerDeps_ |
| // *CLError_DepRunFailed |
| Kind isCLError_Kind `protobuf_oneof:"kind"` |
| } |
| |
| func (x *CLError) Reset() { |
| *x = CLError{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[7] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *CLError) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*CLError) ProtoMessage() {} |
| |
| func (x *CLError) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[7] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use CLError.ProtoReflect.Descriptor instead. |
| func (*CLError) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{7} |
| } |
| |
| func (m *CLError) GetKind() isCLError_Kind { |
| if m != nil { |
| return m.Kind |
| } |
| return nil |
| } |
| |
| func (x *CLError) GetOwnerLacksEmail() bool { |
| if x, ok := x.GetKind().(*CLError_OwnerLacksEmail); ok { |
| return x.OwnerLacksEmail |
| } |
| return false |
| } |
| |
| func (x *CLError) GetWatchedByManyConfigGroups() *CLError_WatchedByManyConfigGroups { |
| if x, ok := x.GetKind().(*CLError_WatchedByManyConfigGroups_); ok { |
| return x.WatchedByManyConfigGroups |
| } |
| return nil |
| } |
| |
| func (x *CLError) GetWatchedByManyProjects() *CLError_WatchedByManyProjects { |
| if x, ok := x.GetKind().(*CLError_WatchedByManyProjects_); ok { |
| return x.WatchedByManyProjects |
| } |
| return nil |
| } |
| |
| func (x *CLError) GetInvalidDeps() *CLError_InvalidDeps { |
| if x, ok := x.GetKind().(*CLError_InvalidDeps_); ok { |
| return x.InvalidDeps |
| } |
| return nil |
| } |
| |
| func (x *CLError) GetUnsupportedMode() string { |
| if x, ok := x.GetKind().(*CLError_UnsupportedMode); ok { |
| return x.UnsupportedMode |
| } |
| return "" |
| } |
| |
| func (x *CLError) GetSelfCqDepend() bool { |
| if x, ok := x.GetKind().(*CLError_SelfCqDepend); ok { |
| return x.SelfCqDepend |
| } |
| return false |
| } |
| |
| func (x *CLError) GetCorruptGerritMetadata() string { |
| if x, ok := x.GetKind().(*CLError_CorruptGerritMetadata); ok { |
| return x.CorruptGerritMetadata |
| } |
| return "" |
| } |
| |
| func (x *CLError) GetReusedTrigger() *CLError_ReusedTrigger { |
| if x, ok := x.GetKind().(*CLError_ReusedTrigger_); ok { |
| return x.ReusedTrigger |
| } |
| return nil |
| } |
| |
| func (x *CLError) GetCommitBlocked() bool { |
| if x, ok := x.GetKind().(*CLError_CommitBlocked); ok { |
| return x.CommitBlocked |
| } |
| return false |
| } |
| |
| func (x *CLError) GetTriggerDeps() *CLError_TriggerDeps { |
| if x, ok := x.GetKind().(*CLError_TriggerDeps_); ok { |
| return x.TriggerDeps |
| } |
| return nil |
| } |
| |
| func (x *CLError) GetDepRunFailed() int64 { |
| if x, ok := x.GetKind().(*CLError_DepRunFailed); ok { |
| return x.DepRunFailed |
| } |
| return 0 |
| } |
| |
| type isCLError_Kind interface { |
| isCLError_Kind() |
| } |
| |
| type CLError_OwnerLacksEmail struct { |
| OwnerLacksEmail bool `protobuf:"varint,1,opt,name=owner_lacks_email,json=ownerLacksEmail,proto3,oneof"` |
| } |
| |
| type CLError_WatchedByManyConfigGroups_ struct { |
| WatchedByManyConfigGroups *CLError_WatchedByManyConfigGroups `protobuf:"bytes,2,opt,name=watched_by_many_config_groups,json=watchedByManyConfigGroups,proto3,oneof"` |
| } |
| |
| type CLError_WatchedByManyProjects_ struct { |
| WatchedByManyProjects *CLError_WatchedByManyProjects `protobuf:"bytes,8,opt,name=watched_by_many_projects,json=watchedByManyProjects,proto3,oneof"` |
| } |
| |
| type CLError_InvalidDeps_ struct { |
| InvalidDeps *CLError_InvalidDeps `protobuf:"bytes,3,opt,name=invalid_deps,json=invalidDeps,proto3,oneof"` |
| } |
| |
| type CLError_UnsupportedMode struct { |
| UnsupportedMode string `protobuf:"bytes,4,opt,name=unsupported_mode,json=unsupportedMode,proto3,oneof"` |
| } |
| |
| type CLError_SelfCqDepend struct { |
| SelfCqDepend bool `protobuf:"varint,5,opt,name=self_cq_depend,json=selfCqDepend,proto3,oneof"` |
| } |
| |
| type CLError_CorruptGerritMetadata struct { |
| CorruptGerritMetadata string `protobuf:"bytes,6,opt,name=corrupt_gerrit_metadata,json=corruptGerritMetadata,proto3,oneof"` |
| } |
| |
| type CLError_ReusedTrigger_ struct { |
| ReusedTrigger *CLError_ReusedTrigger `protobuf:"bytes,7,opt,name=reused_trigger,json=reusedTrigger,proto3,oneof"` |
| } |
| |
| type CLError_CommitBlocked struct { |
| // Set to true when the footer "Commit: false" is present. |
| CommitBlocked bool `protobuf:"varint,9,opt,name=commit_blocked,json=commitBlocked,proto3,oneof"` |
| } |
| |
| type CLError_TriggerDeps_ struct { |
| TriggerDeps *CLError_TriggerDeps `protobuf:"bytes,10,opt,name=trigger_deps,json=triggerDeps,proto3,oneof"` |
| } |
| |
| type CLError_DepRunFailed struct { |
| // Set with the CL ID of a failed Run, if the purge-requested-CL depends on |
| // the CL. |
| DepRunFailed int64 `protobuf:"varint,11,opt,name=dep_run_failed,json=depRunFailed,proto3,oneof"` |
| } |
| |
| func (*CLError_OwnerLacksEmail) isCLError_Kind() {} |
| |
| func (*CLError_WatchedByManyConfigGroups_) isCLError_Kind() {} |
| |
| func (*CLError_WatchedByManyProjects_) isCLError_Kind() {} |
| |
| func (*CLError_InvalidDeps_) isCLError_Kind() {} |
| |
| func (*CLError_UnsupportedMode) isCLError_Kind() {} |
| |
| func (*CLError_SelfCqDepend) isCLError_Kind() {} |
| |
| func (*CLError_CorruptGerritMetadata) isCLError_Kind() {} |
| |
| func (*CLError_ReusedTrigger_) isCLError_Kind() {} |
| |
| func (*CLError_CommitBlocked) isCLError_Kind() {} |
| |
| func (*CLError_TriggerDeps_) isCLError_Kind() {} |
| |
| func (*CLError_DepRunFailed) isCLError_Kind() {} |
| |
| // CLUpdatedEvent is just a CL ID pinned to its latest known EVersion. |
| type CLUpdatedEvent struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| |
| Clid int64 `protobuf:"varint,1,opt,name=clid,proto3" json:"clid,omitempty"` |
| Eversion int64 `protobuf:"varint,2,opt,name=eversion,proto3" json:"eversion,omitempty"` |
| } |
| |
| func (x *CLUpdatedEvent) Reset() { |
| *x = CLUpdatedEvent{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[8] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *CLUpdatedEvent) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*CLUpdatedEvent) ProtoMessage() {} |
| |
| func (x *CLUpdatedEvent) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[8] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use CLUpdatedEvent.ProtoReflect.Descriptor instead. |
| func (*CLUpdatedEvent) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{8} |
| } |
| |
| func (x *CLUpdatedEvent) GetClid() int64 { |
| if x != nil { |
| return x.Clid |
| } |
| return 0 |
| } |
| |
| func (x *CLUpdatedEvent) GetEversion() int64 { |
| if x != nil { |
| return x.Eversion |
| } |
| return 0 |
| } |
| |
| // CLUpdatedEvents is a batch of CLUpdatedEvents. |
| type CLUpdatedEvents struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| |
| Events []*CLUpdatedEvent `protobuf:"bytes,1,rep,name=events,proto3" json:"events,omitempty"` |
| } |
| |
| func (x *CLUpdatedEvents) Reset() { |
| *x = CLUpdatedEvents{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[9] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *CLUpdatedEvents) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*CLUpdatedEvents) ProtoMessage() {} |
| |
| func (x *CLUpdatedEvents) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[9] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use CLUpdatedEvents.ProtoReflect.Descriptor instead. |
| func (*CLUpdatedEvents) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{9} |
| } |
| |
| func (x *CLUpdatedEvents) GetEvents() []*CLUpdatedEvent { |
| if x != nil { |
| return x.Events |
| } |
| return nil |
| } |
| |
| // A string key-value pair. |
| type StringPair struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| |
| Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` |
| Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` |
| } |
| |
| func (x *StringPair) Reset() { |
| *x = StringPair{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[10] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *StringPair) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*StringPair) ProtoMessage() {} |
| |
| func (x *StringPair) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[10] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use StringPair.ProtoReflect.Descriptor instead. |
| func (*StringPair) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{10} |
| } |
| |
| func (x *StringPair) GetKey() string { |
| if x != nil { |
| return x.Key |
| } |
| return "" |
| } |
| |
| func (x *StringPair) GetValue() string { |
| if x != nil { |
| return x.Value |
| } |
| return "" |
| } |
| |
| // Outdated establishes conditions for refreshing Snapshot after CV mutations. |
| type Snapshot_Outdated struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| } |
| |
| func (x *Snapshot_Outdated) Reset() { |
| *x = Snapshot_Outdated{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[11] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *Snapshot_Outdated) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*Snapshot_Outdated) ProtoMessage() {} |
| |
| func (x *Snapshot_Outdated) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[11] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use Snapshot_Outdated.ProtoReflect.Descriptor instead. |
| func (*Snapshot_Outdated) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{0, 0} |
| } |
| |
| type ApplicableConfig_Project struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| |
| Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` |
| // ID of the specific ConfigGroup. See cv/internal/config.ConfigGroupID. |
| // |
| // The referenced version may no longer be available to datastore, |
| // commonly happening if CL wasn't active for a long time. |
| ConfigGroupIds []string `protobuf:"bytes,2,rep,name=config_group_ids,json=configGroupIds,proto3" json:"config_group_ids,omitempty"` |
| } |
| |
| func (x *ApplicableConfig_Project) Reset() { |
| *x = ApplicableConfig_Project{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[12] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *ApplicableConfig_Project) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*ApplicableConfig_Project) ProtoMessage() {} |
| |
| func (x *ApplicableConfig_Project) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[12] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use ApplicableConfig_Project.ProtoReflect.Descriptor instead. |
| func (*ApplicableConfig_Project) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{5, 0} |
| } |
| |
| func (x *ApplicableConfig_Project) GetName() string { |
| if x != nil { |
| return x.Name |
| } |
| return "" |
| } |
| |
| func (x *ApplicableConfig_Project) GetConfigGroupIds() []string { |
| if x != nil { |
| return x.ConfigGroupIds |
| } |
| return nil |
| } |
| |
| type Access_Project struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| |
| // Deprecated. Use no_access_time instead. |
| NoAccess bool `protobuf:"varint,1,opt,name=no_access,json=noAccess,proto3" json:"no_access,omitempty"` |
| // The time when this was last re-confirmed. |
| UpdateTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` |
| // The time after which CV should consider lack of access stable. |
| // |
| // TODO(crbug/1216630): may be unset until backfil is done, |
| // in which case use `no_access` field. |
| NoAccessTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=no_access_time,json=noAccessTime,proto3" json:"no_access_time,omitempty"` |
| } |
| |
| func (x *Access_Project) Reset() { |
| *x = Access_Project{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[13] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *Access_Project) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*Access_Project) ProtoMessage() {} |
| |
| func (x *Access_Project) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[13] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use Access_Project.ProtoReflect.Descriptor instead. |
| func (*Access_Project) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{6, 0} |
| } |
| |
| func (x *Access_Project) GetNoAccess() bool { |
| if x != nil { |
| return x.NoAccess |
| } |
| return false |
| } |
| |
| func (x *Access_Project) GetUpdateTime() *timestamppb.Timestamp { |
| if x != nil { |
| return x.UpdateTime |
| } |
| return nil |
| } |
| |
| func (x *Access_Project) GetNoAccessTime() *timestamppb.Timestamp { |
| if x != nil { |
| return x.NoAccessTime |
| } |
| return nil |
| } |
| |
| type CLError_WatchedByManyConfigGroups struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| |
| // Config group names without LUCI project prefix. |
| ConfigGroups []string `protobuf:"bytes,1,rep,name=config_groups,json=configGroups,proto3" json:"config_groups,omitempty"` |
| } |
| |
| func (x *CLError_WatchedByManyConfigGroups) Reset() { |
| *x = CLError_WatchedByManyConfigGroups{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[15] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *CLError_WatchedByManyConfigGroups) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*CLError_WatchedByManyConfigGroups) ProtoMessage() {} |
| |
| func (x *CLError_WatchedByManyConfigGroups) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[15] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use CLError_WatchedByManyConfigGroups.ProtoReflect.Descriptor instead. |
| func (*CLError_WatchedByManyConfigGroups) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{7, 0} |
| } |
| |
| func (x *CLError_WatchedByManyConfigGroups) GetConfigGroups() []string { |
| if x != nil { |
| return x.ConfigGroups |
| } |
| return nil |
| } |
| |
| type CLError_WatchedByManyProjects struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| |
| Projects []string `protobuf:"bytes,1,rep,name=projects,proto3" json:"projects,omitempty"` |
| } |
| |
| func (x *CLError_WatchedByManyProjects) Reset() { |
| *x = CLError_WatchedByManyProjects{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[16] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *CLError_WatchedByManyProjects) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*CLError_WatchedByManyProjects) ProtoMessage() {} |
| |
| func (x *CLError_WatchedByManyProjects) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[16] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use CLError_WatchedByManyProjects.ProtoReflect.Descriptor instead. |
| func (*CLError_WatchedByManyProjects) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{7, 1} |
| } |
| |
| func (x *CLError_WatchedByManyProjects) GetProjects() []string { |
| if x != nil { |
| return x.Projects |
| } |
| return nil |
| } |
| |
| type CLError_InvalidDeps struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| |
| // Deps not watched by the same LUCI project as the dependent. |
| Unwatched []*Dep `protobuf:"bytes,1,rep,name=unwatched,proto3" json:"unwatched,omitempty"` |
| // Deps watched by the same LUCI project but different config group. |
| WrongConfigGroup []*Dep `protobuf:"bytes,2,rep,name=wrong_config_group,json=wrongConfigGroup,proto3" json:"wrong_config_group,omitempty"` |
| // Not yet submitted deps of a full run in non-combinable mode. |
| SingleFullDeps []*Dep `protobuf:"bytes,3,rep,name=single_full_deps,json=singleFullDeps,proto3" json:"single_full_deps,omitempty"` |
| // Not yet CQ-ed deps of a Run in combinable mode. |
| CombinableUntriggered []*Dep `protobuf:"bytes,4,rep,name=combinable_untriggered,json=combinableUntriggered,proto3" json:"combinable_untriggered,omitempty"` |
| // CQ-ed deps of a different mode. |
| CombinableMismatchedMode []*Dep `protobuf:"bytes,5,rep,name=combinable_mismatched_mode,json=combinableMismatchedMode,proto3" json:"combinable_mismatched_mode,omitempty"` |
| // There are more non-submitted deps than is supported by CV. |
| TooMany *CLError_InvalidDeps_TooMany `protobuf:"bytes,6,opt,name=too_many,json=tooMany,proto3" json:"too_many,omitempty"` |
| } |
| |
| func (x *CLError_InvalidDeps) Reset() { |
| *x = CLError_InvalidDeps{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[17] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *CLError_InvalidDeps) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*CLError_InvalidDeps) ProtoMessage() {} |
| |
| func (x *CLError_InvalidDeps) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[17] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use CLError_InvalidDeps.ProtoReflect.Descriptor instead. |
| func (*CLError_InvalidDeps) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{7, 2} |
| } |
| |
| func (x *CLError_InvalidDeps) GetUnwatched() []*Dep { |
| if x != nil { |
| return x.Unwatched |
| } |
| return nil |
| } |
| |
| func (x *CLError_InvalidDeps) GetWrongConfigGroup() []*Dep { |
| if x != nil { |
| return x.WrongConfigGroup |
| } |
| return nil |
| } |
| |
| func (x *CLError_InvalidDeps) GetSingleFullDeps() []*Dep { |
| if x != nil { |
| return x.SingleFullDeps |
| } |
| return nil |
| } |
| |
| func (x *CLError_InvalidDeps) GetCombinableUntriggered() []*Dep { |
| if x != nil { |
| return x.CombinableUntriggered |
| } |
| return nil |
| } |
| |
| func (x *CLError_InvalidDeps) GetCombinableMismatchedMode() []*Dep { |
| if x != nil { |
| return x.CombinableMismatchedMode |
| } |
| return nil |
| } |
| |
| func (x *CLError_InvalidDeps) GetTooMany() *CLError_InvalidDeps_TooMany { |
| if x != nil { |
| return x.TooMany |
| } |
| return nil |
| } |
| |
| // ReusedTrigger means a CL trigger (e.g. CQ+1 vote) has already resulted in |
| // a CQ Run which was finalized. |
| // |
| // Two known cases when this happens with a Gerrit CL: |
| // 1. A user uploads a CL on ref A, then votes CQ+1. |
| // Before the Dry Run completes, the CL is moved to ref B, while |
| // preserving the CQ+1 vote. |
| // The old Run is finalized, but the new Run has the exact same trigger, |
| // which in CQDaemon-compatible mode means the new Run's ID is exactly the |
| // same as the old one, so CV can't create a new Run. |
| // TODO(crbug/1223349): after CQDaemon is deleted, the Run ID generation scheme |
| // can take into account the ref of a CL, and this use case can be allowed. |
| // 2. The same as above but instead of moving CL between refs, abandon and |
| // restore the CL. |
| type CLError_ReusedTrigger struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| |
| // ID of the finalized Run. |
| Run string `protobuf:"bytes,1,opt,name=run,proto3" json:"run,omitempty"` |
| } |
| |
| func (x *CLError_ReusedTrigger) Reset() { |
| *x = CLError_ReusedTrigger{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[18] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *CLError_ReusedTrigger) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*CLError_ReusedTrigger) ProtoMessage() {} |
| |
| func (x *CLError_ReusedTrigger) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[18] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use CLError_ReusedTrigger.ProtoReflect.Descriptor instead. |
| func (*CLError_ReusedTrigger) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{7, 3} |
| } |
| |
| func (x *CLError_ReusedTrigger) GetRun() string { |
| if x != nil { |
| return x.Run |
| } |
| return "" |
| } |
| |
| // TriggerDeps indicates failures for triggering deps. |
| type CLError_TriggerDeps struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| |
| // IDs of CLs for which trigger attempts failed due to permission denied. |
| PermissionDenied []*CLError_TriggerDeps_PermissionDenied `protobuf:"bytes,1,rep,name=permission_denied,json=permissionDenied,proto3" json:"permission_denied,omitempty"` |
| // IDs of CLs for which trigger attempts failed because they were not found |
| // in Gerrit. |
| NotFound []int64 `protobuf:"varint,2,rep,packed,name=not_found,json=notFound,proto3" json:"not_found,omitempty"` |
| // IDs of CLs for which trigger attempts failed due to internal Gerrit |
| // error. |
| InternalGerritError []int64 `protobuf:"varint,3,rep,packed,name=internal_gerrit_error,json=internalGerritError,proto3" json:"internal_gerrit_error,omitempty"` |
| } |
| |
| func (x *CLError_TriggerDeps) Reset() { |
| *x = CLError_TriggerDeps{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[19] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *CLError_TriggerDeps) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*CLError_TriggerDeps) ProtoMessage() {} |
| |
| func (x *CLError_TriggerDeps) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[19] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use CLError_TriggerDeps.ProtoReflect.Descriptor instead. |
| func (*CLError_TriggerDeps) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{7, 4} |
| } |
| |
| func (x *CLError_TriggerDeps) GetPermissionDenied() []*CLError_TriggerDeps_PermissionDenied { |
| if x != nil { |
| return x.PermissionDenied |
| } |
| return nil |
| } |
| |
| func (x *CLError_TriggerDeps) GetNotFound() []int64 { |
| if x != nil { |
| return x.NotFound |
| } |
| return nil |
| } |
| |
| func (x *CLError_TriggerDeps) GetInternalGerritError() []int64 { |
| if x != nil { |
| return x.InternalGerritError |
| } |
| return nil |
| } |
| |
| type CLError_InvalidDeps_TooMany struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| |
| Actual int32 `protobuf:"varint,1,opt,name=actual,proto3" json:"actual,omitempty"` |
| MaxAllowed int32 `protobuf:"varint,2,opt,name=max_allowed,json=maxAllowed,proto3" json:"max_allowed,omitempty"` |
| } |
| |
| func (x *CLError_InvalidDeps_TooMany) Reset() { |
| *x = CLError_InvalidDeps_TooMany{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[20] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *CLError_InvalidDeps_TooMany) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*CLError_InvalidDeps_TooMany) ProtoMessage() {} |
| |
| func (x *CLError_InvalidDeps_TooMany) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[20] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use CLError_InvalidDeps_TooMany.ProtoReflect.Descriptor instead. |
| func (*CLError_InvalidDeps_TooMany) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{7, 2, 0} |
| } |
| |
| func (x *CLError_InvalidDeps_TooMany) GetActual() int32 { |
| if x != nil { |
| return x.Actual |
| } |
| return 0 |
| } |
| |
| func (x *CLError_InvalidDeps_TooMany) GetMaxAllowed() int32 { |
| if x != nil { |
| return x.MaxAllowed |
| } |
| return 0 |
| } |
| |
| type CLError_TriggerDeps_PermissionDenied struct { |
| state protoimpl.MessageState |
| sizeCache protoimpl.SizeCache |
| unknownFields protoimpl.UnknownFields |
| |
| Clid int64 `protobuf:"varint,1,opt,name=clid,proto3" json:"clid,omitempty"` |
| // If set, the vote was attempted on behalf of the Gerrit user. |
| Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` |
| } |
| |
| func (x *CLError_TriggerDeps_PermissionDenied) Reset() { |
| *x = CLError_TriggerDeps_PermissionDenied{} |
| if protoimpl.UnsafeEnabled { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[21] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| } |
| |
| func (x *CLError_TriggerDeps_PermissionDenied) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*CLError_TriggerDeps_PermissionDenied) ProtoMessage() {} |
| |
| func (x *CLError_TriggerDeps_PermissionDenied) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[21] |
| if protoimpl.UnsafeEnabled && x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use CLError_TriggerDeps_PermissionDenied.ProtoReflect.Descriptor instead. |
| func (*CLError_TriggerDeps_PermissionDenied) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP(), []int{7, 4, 0} |
| } |
| |
| func (x *CLError_TriggerDeps_PermissionDenied) GetClid() int64 { |
| if x != nil { |
| return x.Clid |
| } |
| return 0 |
| } |
| |
| func (x *CLError_TriggerDeps_PermissionDenied) GetEmail() string { |
| if x != nil { |
| return x.Email |
| } |
| return "" |
| } |
| |
| var File_go_chromium_org_luci_cv_internal_changelist_storage_proto protoreflect.FileDescriptor |
| |
| var file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDesc = []byte{ |
| 0x0a, 0x39, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, |
| 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x63, 0x76, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, |
| 0x61, 0x6c, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x73, 0x74, |
| 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x63, 0x76, 0x2e, |
| 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, |
| 0x69, 0x73, 0x74, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, |
| 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, |
| 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x35, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, |
| 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, |
| 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x2f, 0x67, |
| 0x65, 0x72, 0x72, 0x69, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8e, 0x04, 0x0a, 0x08, |
| 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x4c, 0x0a, 0x14, 0x65, 0x78, 0x74, 0x65, |
| 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, |
| 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, |
| 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, |
| 0x6d, 0x70, 0x52, 0x12, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x55, 0x70, 0x64, 0x61, |
| 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x75, 0x63, 0x69, 0x5f, 0x70, |
| 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6c, 0x75, |
| 0x63, 0x69, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x64, 0x65, 0x70, |
| 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x76, 0x2e, 0x69, 0x6e, 0x74, |
| 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x69, 0x73, 0x74, |
| 0x2e, 0x44, 0x65, 0x70, 0x52, 0x04, 0x64, 0x65, 0x70, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, |
| 0x74, 0x63, 0x68, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, |
| 0x74, 0x63, 0x68, 0x73, 0x65, 0x74, 0x12, 0x36, 0x0a, 0x17, 0x6d, 0x69, 0x6e, 0x5f, 0x65, 0x71, |
| 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x63, 0x68, 0x73, 0x65, |
| 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x6d, 0x69, 0x6e, 0x45, 0x71, 0x75, 0x69, |
| 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x74, 0x63, 0x68, 0x73, 0x65, 0x74, 0x12, 0x37, |
| 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, |
| 0x2e, 0x63, 0x76, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, |
| 0x6e, 0x67, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x43, 0x4c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, |
| 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x45, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x64, 0x61, |
| 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x76, 0x2e, 0x69, |
| 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x69, |
| 0x73, 0x74, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, 0x4f, 0x75, 0x74, 0x64, |
| 0x61, 0x74, 0x65, 0x64, 0x52, 0x08, 0x6f, 0x75, 0x74, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x3e, |
| 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, |
| 0x32, 0x22, 0x2e, 0x63, 0x76, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, |
| 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, |
| 0x50, 0x61, 0x69, 0x72, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x38, |
| 0x0a, 0x06, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, |
| 0x2e, 0x63, 0x76, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, |
| 0x6e, 0x67, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x48, 0x00, |
| 0x52, 0x06, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x1a, 0x0a, 0x0a, 0x08, 0x4f, 0x75, 0x74, 0x64, |
| 0x61, 0x74, 0x65, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x4e, 0x0a, 0x03, |
| 0x44, 0x65, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6c, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, |
| 0x03, 0x52, 0x04, 0x63, 0x6c, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, |
| 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x63, 0x76, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, |
| 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x44, |
| 0x65, 0x70, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0xdf, 0x01, 0x0a, |
| 0x06, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, |
| 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x04, 0x69, |
| 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x65, 0x72, 0x72, |
| 0x69, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, |
| 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, |
| 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x08, 0x67, 0x69, 0x74, |
| 0x5f, 0x64, 0x65, 0x70, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x76, |
| 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, |
| 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x47, 0x69, 0x74, 0x44, 0x65, |
| 0x70, 0x52, 0x07, 0x67, 0x69, 0x74, 0x44, 0x65, 0x70, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x73, 0x6f, |
| 0x66, 0x74, 0x5f, 0x64, 0x65, 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, |
| 0x63, 0x76, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, |
| 0x67, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x53, 0x6f, 0x66, |
| 0x74, 0x44, 0x65, 0x70, 0x52, 0x08, 0x73, 0x6f, 0x66, 0x74, 0x44, 0x65, 0x70, 0x73, 0x22, 0x44, |
| 0x0a, 0x0c, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x47, 0x69, 0x74, 0x44, 0x65, 0x70, 0x12, 0x16, |
| 0x0a, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, |
| 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, |
| 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x6d, 0x6d, 0x65, 0x64, |
| 0x69, 0x61, 0x74, 0x65, 0x22, 0x3b, 0x0a, 0x0d, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x53, 0x6f, |
| 0x66, 0x74, 0x44, 0x65, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, |
| 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x68, 0x61, |
| 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, |
| 0x65, 0x22, 0xa9, 0x01, 0x0a, 0x10, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x62, 0x6c, 0x65, |
| 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4c, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, |
| 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x76, 0x2e, 0x69, 0x6e, |
| 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x69, 0x73, |
| 0x74, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, |
| 0x69, 0x67, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x6a, |
| 0x65, 0x63, 0x74, 0x73, 0x1a, 0x47, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, |
| 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, |
| 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x67, 0x72, |
| 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x63, |
| 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x73, 0x22, 0xe4, 0x02, |
| 0x0a, 0x06, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x4c, 0x0a, 0x0a, 0x62, 0x79, 0x5f, 0x70, |
| 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, |
| 0x76, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, |
| 0x65, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2e, 0x42, 0x79, 0x50, |
| 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x62, 0x79, 0x50, |
| 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x1a, 0xa5, 0x01, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, |
| 0x63, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, |
| 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x6f, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, |
| 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, |
| 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, |
| 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, |
| 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0e, |
| 0x6e, 0x6f, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, |
| 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, |
| 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, |
| 0x52, 0x0c, 0x6e, 0x6f, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x64, |
| 0x0a, 0x0e, 0x42, 0x79, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, |
| 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, |
| 0x65, 0x79, 0x12, 0x3c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, |
| 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x76, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, |
| 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, |
| 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, |
| 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd0, 0x0d, 0x0a, 0x07, 0x43, 0x4c, 0x45, 0x72, 0x72, 0x6f, 0x72, |
| 0x12, 0x2c, 0x0a, 0x11, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x6c, 0x61, 0x63, 0x6b, 0x73, 0x5f, |
| 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0f, 0x6f, |
| 0x77, 0x6e, 0x65, 0x72, 0x4c, 0x61, 0x63, 0x6b, 0x73, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x7d, |
| 0x0a, 0x1d, 0x77, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x6d, 0x61, 0x6e, |
| 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, |
| 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x76, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, |
| 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x43, |
| 0x4c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x42, 0x79, |
| 0x4d, 0x61, 0x6e, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, |
| 0x48, 0x00, 0x52, 0x19, 0x77, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x42, 0x79, 0x4d, 0x61, 0x6e, |
| 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x70, 0x0a, |
| 0x18, 0x77, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x6d, 0x61, 0x6e, 0x79, |
| 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, |
| 0x35, 0x2e, 0x63, 0x76, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, |
| 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x43, 0x4c, 0x45, 0x72, 0x72, 0x6f, 0x72, |
| 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x42, 0x79, 0x4d, 0x61, 0x6e, 0x79, 0x50, 0x72, |
| 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x48, 0x00, 0x52, 0x15, 0x77, 0x61, 0x74, 0x63, 0x68, 0x65, |
| 0x64, 0x42, 0x79, 0x4d, 0x61, 0x6e, 0x79, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, |
| 0x50, 0x0a, 0x0c, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x64, 0x65, 0x70, 0x73, 0x18, |
| 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x76, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, |
| 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x43, |
| 0x4c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x44, 0x65, |
| 0x70, 0x73, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x44, 0x65, 0x70, |
| 0x73, 0x12, 0x2b, 0x0a, 0x10, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, |
| 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0f, 0x75, |
| 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x26, |
| 0x0a, 0x0e, 0x73, 0x65, 0x6c, 0x66, 0x5f, 0x63, 0x71, 0x5f, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, |
| 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x43, 0x71, |
| 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x38, 0x0a, 0x17, 0x63, 0x6f, 0x72, 0x72, 0x75, 0x70, |
| 0x74, 0x5f, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, |
| 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x15, 0x63, 0x6f, 0x72, 0x72, 0x75, |
| 0x70, 0x74, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, |
| 0x12, 0x56, 0x0a, 0x0e, 0x72, 0x65, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, |
| 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x76, 0x2e, 0x69, 0x6e, |
| 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x69, 0x73, |
| 0x74, 0x2e, 0x43, 0x4c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x52, 0x65, 0x75, 0x73, 0x65, 0x64, |
| 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x72, 0x65, 0x75, 0x73, 0x65, |
| 0x64, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, |
| 0x69, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, |
| 0x48, 0x00, 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, |
| 0x64, 0x12, 0x50, 0x0a, 0x0c, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x70, |
| 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x76, 0x2e, 0x69, 0x6e, 0x74, |
| 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x69, 0x73, 0x74, |
| 0x2e, 0x43, 0x4c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, |
| 0x44, 0x65, 0x70, 0x73, 0x48, 0x00, 0x52, 0x0b, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x44, |
| 0x65, 0x70, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x66, |
| 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x0c, 0x64, |
| 0x65, 0x70, 0x52, 0x75, 0x6e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x1a, 0x40, 0x0a, 0x19, 0x57, |
| 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x42, 0x79, 0x4d, 0x61, 0x6e, 0x79, 0x43, 0x6f, 0x6e, 0x66, |
| 0x69, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, |
| 0x69, 0x67, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, |
| 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x1a, 0x33, 0x0a, |
| 0x15, 0x57, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x42, 0x79, 0x4d, 0x61, 0x6e, 0x79, 0x50, 0x72, |
| 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, |
| 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, |
| 0x74, 0x73, 0x1a, 0x9d, 0x04, 0x0a, 0x0b, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x44, 0x65, |
| 0x70, 0x73, 0x12, 0x39, 0x0a, 0x09, 0x75, 0x6e, 0x77, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x18, |
| 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x76, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, |
| 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x44, |
| 0x65, 0x70, 0x52, 0x09, 0x75, 0x6e, 0x77, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x12, 0x49, 0x0a, |
| 0x12, 0x77, 0x72, 0x6f, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x67, 0x72, |
| 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x76, 0x2e, 0x69, |
| 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x69, |
| 0x73, 0x74, 0x2e, 0x44, 0x65, 0x70, 0x52, 0x10, 0x77, 0x72, 0x6f, 0x6e, 0x67, 0x43, 0x6f, 0x6e, |
| 0x66, 0x69, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x45, 0x0a, 0x10, 0x73, 0x69, 0x6e, 0x67, |
| 0x6c, 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x73, 0x18, 0x03, 0x20, 0x03, |
| 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x76, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, |
| 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x70, 0x52, |
| 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x44, 0x65, 0x70, 0x73, 0x12, |
| 0x52, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x75, 0x6e, |
| 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, |
| 0x1b, 0x2e, 0x63, 0x76, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, |
| 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x70, 0x52, 0x15, 0x63, 0x6f, |
| 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x6e, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, |
| 0x72, 0x65, 0x64, 0x12, 0x59, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x62, 0x6c, |
| 0x65, 0x5f, 0x6d, 0x69, 0x73, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x6d, 0x6f, 0x64, |
| 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x76, 0x2e, 0x69, 0x6e, 0x74, |
| 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x69, 0x73, 0x74, |
| 0x2e, 0x44, 0x65, 0x70, 0x52, 0x18, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x62, 0x6c, 0x65, |
| 0x4d, 0x69, 0x73, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x4e, |
| 0x0a, 0x08, 0x74, 0x6f, 0x6f, 0x5f, 0x6d, 0x61, 0x6e, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, |
| 0x32, 0x33, 0x2e, 0x63, 0x76, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, |
| 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x43, 0x4c, 0x45, 0x72, 0x72, 0x6f, |
| 0x72, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x44, 0x65, 0x70, 0x73, 0x2e, 0x54, 0x6f, |
| 0x6f, 0x4d, 0x61, 0x6e, 0x79, 0x52, 0x07, 0x74, 0x6f, 0x6f, 0x4d, 0x61, 0x6e, 0x79, 0x1a, 0x42, |
| 0x0a, 0x07, 0x54, 0x6f, 0x6f, 0x4d, 0x61, 0x6e, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, |
| 0x75, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x61, 0x63, 0x74, 0x75, 0x61, |
| 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, |
| 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x41, 0x6c, 0x6c, 0x6f, 0x77, |
| 0x65, 0x64, 0x1a, 0x21, 0x0a, 0x0d, 0x52, 0x65, 0x75, 0x73, 0x65, 0x64, 0x54, 0x72, 0x69, 0x67, |
| 0x67, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x75, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, |
| 0x52, 0x03, 0x72, 0x75, 0x6e, 0x1a, 0x87, 0x02, 0x0a, 0x0b, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, |
| 0x72, 0x44, 0x65, 0x70, 0x73, 0x12, 0x69, 0x0a, 0x11, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, |
| 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x65, 0x6e, 0x69, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, |
| 0x32, 0x3c, 0x2e, 0x63, 0x76, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, |
| 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x43, 0x4c, 0x45, 0x72, 0x72, 0x6f, |
| 0x72, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x44, 0x65, 0x70, 0x73, 0x2e, 0x50, 0x65, |
| 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6e, 0x69, 0x65, 0x64, 0x52, 0x10, |
| 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6e, 0x69, 0x65, 0x64, |
| 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x74, 0x5f, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, |
| 0x03, 0x28, 0x03, 0x52, 0x08, 0x6e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x32, 0x0a, |
| 0x15, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74, |
| 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x13, 0x69, 0x6e, |
| 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x45, 0x72, 0x72, 0x6f, |
| 0x72, 0x1a, 0x3c, 0x0a, 0x10, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, |
| 0x65, 0x6e, 0x69, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6c, 0x69, 0x64, 0x18, 0x01, 0x20, |
| 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6c, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, |
| 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x42, |
| 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x40, 0x0a, 0x0e, 0x43, 0x4c, 0x55, 0x70, 0x64, |
| 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6c, 0x69, |
| 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6c, 0x69, 0x64, 0x12, 0x1a, 0x0a, |
| 0x08, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, |
| 0x08, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x0f, 0x43, 0x4c, 0x55, |
| 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3e, 0x0a, 0x06, |
| 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, |
| 0x76, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, |
| 0x65, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x43, 0x4c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x45, |
| 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x34, 0x0a, 0x0a, |
| 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, |
| 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, |
| 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, |
| 0x75, 0x65, 0x2a, 0x37, 0x0a, 0x07, 0x44, 0x65, 0x70, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x18, 0x0a, |
| 0x14, 0x44, 0x45, 0x50, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, |
| 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x41, 0x52, 0x44, 0x10, |
| 0x01, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x4f, 0x46, 0x54, 0x10, 0x02, 0x42, 0x2d, 0x5a, 0x2b, 0x67, |
| 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, |
| 0x75, 0x63, 0x69, 0x2f, 0x63, 0x76, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, |
| 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, |
| 0x6f, 0x33, |
| } |
| |
| var ( |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescOnce sync.Once |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescData = file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDesc |
| ) |
| |
| func file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescGZIP() []byte { |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescOnce.Do(func() { |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescData = protoimpl.X.CompressGZIP(file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescData) |
| }) |
| return file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDescData |
| } |
| |
| var file_go_chromium_org_luci_cv_internal_changelist_storage_proto_enumTypes = make([]protoimpl.EnumInfo, 1) |
| var file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes = make([]protoimpl.MessageInfo, 22) |
| var file_go_chromium_org_luci_cv_internal_changelist_storage_proto_goTypes = []interface{}{ |
| (DepKind)(0), // 0: cv.internal.changelist.DepKind |
| (*Snapshot)(nil), // 1: cv.internal.changelist.Snapshot |
| (*Dep)(nil), // 2: cv.internal.changelist.Dep |
| (*Gerrit)(nil), // 3: cv.internal.changelist.Gerrit |
| (*GerritGitDep)(nil), // 4: cv.internal.changelist.GerritGitDep |
| (*GerritSoftDep)(nil), // 5: cv.internal.changelist.GerritSoftDep |
| (*ApplicableConfig)(nil), // 6: cv.internal.changelist.ApplicableConfig |
| (*Access)(nil), // 7: cv.internal.changelist.Access |
| (*CLError)(nil), // 8: cv.internal.changelist.CLError |
| (*CLUpdatedEvent)(nil), // 9: cv.internal.changelist.CLUpdatedEvent |
| (*CLUpdatedEvents)(nil), // 10: cv.internal.changelist.CLUpdatedEvents |
| (*StringPair)(nil), // 11: cv.internal.changelist.StringPair |
| (*Snapshot_Outdated)(nil), // 12: cv.internal.changelist.Snapshot.Outdated |
| (*ApplicableConfig_Project)(nil), // 13: cv.internal.changelist.ApplicableConfig.Project |
| (*Access_Project)(nil), // 14: cv.internal.changelist.Access.Project |
| nil, // 15: cv.internal.changelist.Access.ByProjectEntry |
| (*CLError_WatchedByManyConfigGroups)(nil), // 16: cv.internal.changelist.CLError.WatchedByManyConfigGroups |
| (*CLError_WatchedByManyProjects)(nil), // 17: cv.internal.changelist.CLError.WatchedByManyProjects |
| (*CLError_InvalidDeps)(nil), // 18: cv.internal.changelist.CLError.InvalidDeps |
| (*CLError_ReusedTrigger)(nil), // 19: cv.internal.changelist.CLError.ReusedTrigger |
| (*CLError_TriggerDeps)(nil), // 20: cv.internal.changelist.CLError.TriggerDeps |
| (*CLError_InvalidDeps_TooMany)(nil), // 21: cv.internal.changelist.CLError.InvalidDeps.TooMany |
| (*CLError_TriggerDeps_PermissionDenied)(nil), // 22: cv.internal.changelist.CLError.TriggerDeps.PermissionDenied |
| (*timestamppb.Timestamp)(nil), // 23: google.protobuf.Timestamp |
| (*gerrit.ChangeInfo)(nil), // 24: gerrit.ChangeInfo |
| } |
| var file_go_chromium_org_luci_cv_internal_changelist_storage_proto_depIdxs = []int32{ |
| 23, // 0: cv.internal.changelist.Snapshot.external_update_time:type_name -> google.protobuf.Timestamp |
| 2, // 1: cv.internal.changelist.Snapshot.deps:type_name -> cv.internal.changelist.Dep |
| 8, // 2: cv.internal.changelist.Snapshot.errors:type_name -> cv.internal.changelist.CLError |
| 12, // 3: cv.internal.changelist.Snapshot.outdated:type_name -> cv.internal.changelist.Snapshot.Outdated |
| 11, // 4: cv.internal.changelist.Snapshot.metadata:type_name -> cv.internal.changelist.StringPair |
| 3, // 5: cv.internal.changelist.Snapshot.gerrit:type_name -> cv.internal.changelist.Gerrit |
| 0, // 6: cv.internal.changelist.Dep.kind:type_name -> cv.internal.changelist.DepKind |
| 24, // 7: cv.internal.changelist.Gerrit.info:type_name -> gerrit.ChangeInfo |
| 4, // 8: cv.internal.changelist.Gerrit.git_deps:type_name -> cv.internal.changelist.GerritGitDep |
| 5, // 9: cv.internal.changelist.Gerrit.soft_deps:type_name -> cv.internal.changelist.GerritSoftDep |
| 13, // 10: cv.internal.changelist.ApplicableConfig.projects:type_name -> cv.internal.changelist.ApplicableConfig.Project |
| 15, // 11: cv.internal.changelist.Access.by_project:type_name -> cv.internal.changelist.Access.ByProjectEntry |
| 16, // 12: cv.internal.changelist.CLError.watched_by_many_config_groups:type_name -> cv.internal.changelist.CLError.WatchedByManyConfigGroups |
| 17, // 13: cv.internal.changelist.CLError.watched_by_many_projects:type_name -> cv.internal.changelist.CLError.WatchedByManyProjects |
| 18, // 14: cv.internal.changelist.CLError.invalid_deps:type_name -> cv.internal.changelist.CLError.InvalidDeps |
| 19, // 15: cv.internal.changelist.CLError.reused_trigger:type_name -> cv.internal.changelist.CLError.ReusedTrigger |
| 20, // 16: cv.internal.changelist.CLError.trigger_deps:type_name -> cv.internal.changelist.CLError.TriggerDeps |
| 9, // 17: cv.internal.changelist.CLUpdatedEvents.events:type_name -> cv.internal.changelist.CLUpdatedEvent |
| 23, // 18: cv.internal.changelist.Access.Project.update_time:type_name -> google.protobuf.Timestamp |
| 23, // 19: cv.internal.changelist.Access.Project.no_access_time:type_name -> google.protobuf.Timestamp |
| 14, // 20: cv.internal.changelist.Access.ByProjectEntry.value:type_name -> cv.internal.changelist.Access.Project |
| 2, // 21: cv.internal.changelist.CLError.InvalidDeps.unwatched:type_name -> cv.internal.changelist.Dep |
| 2, // 22: cv.internal.changelist.CLError.InvalidDeps.wrong_config_group:type_name -> cv.internal.changelist.Dep |
| 2, // 23: cv.internal.changelist.CLError.InvalidDeps.single_full_deps:type_name -> cv.internal.changelist.Dep |
| 2, // 24: cv.internal.changelist.CLError.InvalidDeps.combinable_untriggered:type_name -> cv.internal.changelist.Dep |
| 2, // 25: cv.internal.changelist.CLError.InvalidDeps.combinable_mismatched_mode:type_name -> cv.internal.changelist.Dep |
| 21, // 26: cv.internal.changelist.CLError.InvalidDeps.too_many:type_name -> cv.internal.changelist.CLError.InvalidDeps.TooMany |
| 22, // 27: cv.internal.changelist.CLError.TriggerDeps.permission_denied:type_name -> cv.internal.changelist.CLError.TriggerDeps.PermissionDenied |
| 28, // [28:28] is the sub-list for method output_type |
| 28, // [28:28] is the sub-list for method input_type |
| 28, // [28:28] is the sub-list for extension type_name |
| 28, // [28:28] is the sub-list for extension extendee |
| 0, // [0:28] is the sub-list for field type_name |
| } |
| |
| func init() { file_go_chromium_org_luci_cv_internal_changelist_storage_proto_init() } |
| func file_go_chromium_org_luci_cv_internal_changelist_storage_proto_init() { |
| if File_go_chromium_org_luci_cv_internal_changelist_storage_proto != nil { |
| return |
| } |
| if !protoimpl.UnsafeEnabled { |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*Snapshot); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*Dep); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*Gerrit); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*GerritGitDep); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*GerritSoftDep); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*ApplicableConfig); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*Access); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*CLError); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*CLUpdatedEvent); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*CLUpdatedEvents); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*StringPair); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*Snapshot_Outdated); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*ApplicableConfig_Project); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*Access_Project); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*CLError_WatchedByManyConfigGroups); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*CLError_WatchedByManyProjects); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*CLError_InvalidDeps); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*CLError_ReusedTrigger); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*CLError_TriggerDeps); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*CLError_InvalidDeps_TooMany); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { |
| switch v := v.(*CLError_TriggerDeps_PermissionDenied); i { |
| case 0: |
| return &v.state |
| case 1: |
| return &v.sizeCache |
| case 2: |
| return &v.unknownFields |
| default: |
| return nil |
| } |
| } |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[0].OneofWrappers = []interface{}{ |
| (*Snapshot_Gerrit)(nil), |
| } |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes[7].OneofWrappers = []interface{}{ |
| (*CLError_OwnerLacksEmail)(nil), |
| (*CLError_WatchedByManyConfigGroups_)(nil), |
| (*CLError_WatchedByManyProjects_)(nil), |
| (*CLError_InvalidDeps_)(nil), |
| (*CLError_UnsupportedMode)(nil), |
| (*CLError_SelfCqDepend)(nil), |
| (*CLError_CorruptGerritMetadata)(nil), |
| (*CLError_ReusedTrigger_)(nil), |
| (*CLError_CommitBlocked)(nil), |
| (*CLError_TriggerDeps_)(nil), |
| (*CLError_DepRunFailed)(nil), |
| } |
| type x struct{} |
| out := protoimpl.TypeBuilder{ |
| File: protoimpl.DescBuilder{ |
| GoPackagePath: reflect.TypeOf(x{}).PkgPath(), |
| RawDescriptor: file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDesc, |
| NumEnums: 1, |
| NumMessages: 22, |
| NumExtensions: 0, |
| NumServices: 0, |
| }, |
| GoTypes: file_go_chromium_org_luci_cv_internal_changelist_storage_proto_goTypes, |
| DependencyIndexes: file_go_chromium_org_luci_cv_internal_changelist_storage_proto_depIdxs, |
| EnumInfos: file_go_chromium_org_luci_cv_internal_changelist_storage_proto_enumTypes, |
| MessageInfos: file_go_chromium_org_luci_cv_internal_changelist_storage_proto_msgTypes, |
| }.Build() |
| File_go_chromium_org_luci_cv_internal_changelist_storage_proto = out.File |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_rawDesc = nil |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_goTypes = nil |
| file_go_chromium_org_luci_cv_internal_changelist_storage_proto_depIdxs = nil |
| } |