detached c671ff4

feat(proto): merge request mergeability, its Watch event and the merge commit mode

commit
c671ff44c6025b2c1819dced069baee101b836c1
author
brice · · 2026-10-19 12:32 UTC
committer
brice · · 2026-10-19 14:35 UTC
parent
2aff1f7
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
14 files · +717 -298
M docs/services.md +2 -2
@@ -5,10 +5,10 @@
55 | `RepoService` | `ListRepos`, `GetRepo`, `CreateRepo`, `UpdateRepo` (field mask, merge settings), `DeleteRepo` |
66 | `GitService` | `ListRefs`, `GetTree`, `ListPaths`, `GetBlob` (streamed), `ListCommits`, `GetCommit` (structured diff), `ResolveRevision` |
77 | `TokenService` | `CreateToken` (secret shown once), `ListTokens`, `RevokeToken` |
8-| `MergeRequestService` | `CreateMergeRequest`, `ListMergeRequests`, `GetMergeRequest` (commits, diff, comments), `AddComment`, `EditComment`, `DeleteComment`, `ResolveComment`, `CloseMergeRequest`, `MergeMergeRequest`, `MarkRead` |
8+| `MergeRequestService` | `CreateMergeRequest`, `ListMergeRequests`, `GetMergeRequest` (commits, diff, comments), `AddComment`, `EditComment`, `DeleteComment`, `ResolveComment`, `CloseMergeRequest`, `MergeMergeRequest` (modes fast-forward, squash, merge commit), `MarkRead`. Open merge requests carry `mergeability` (up to date, behind, conflict, or checking) and `Watch` publishes `MergeRequestMergeability` when it changes (feature `merge_requests.mergeability`) |
99 | `IssueService` | `CreateIssue`, `ListIssues`, `GetIssue` (comments), `AddIssueComment`, `CloseIssue`, `ReopenIssue`; owner only: `ListPendingIssues`, `ApproveIssue`, `RejectIssue`. Feature `issues`. Issues share numbers with merge requests |
1010 | `SessionService` | `CreateLoginLink`, `SignOutEverywhere` (owner only) |
11-| `EventService` | `Watch` (streamed, resumable). Topics `home`, `repo:<name>` and `owner` (owner rights only). Events 17–21: `issue_opened`, `issue_closed`, `issue_reopened`, `issue_commented`, and `issue_submitted` (only on `owner`, no content) |
11+| `EventService` | `Watch` (streamed, resumable). Topics `home`, `repo:<name>` and `owner` (owner rights only). Events 17–21: `issue_opened`, `issue_closed`, `issue_reopened`, `issue_commented`, and `issue_submitted` (only on `owner`, no content). Event 22: `merge_request_mergeability` |
1212 | `ServerService` | `GetVersion` (version and features), `GetSigningKey`, `RotateOIDCKey` (owner only) |
1313 | `TrustedKeyService` | `ListTrustedKeys`, `AddTrustedKey` and `RemoveTrustedKey` (owner only). `Commit.verification` carries the result of the check (feature `commit_signatures`) |
1414 | `RunService` | `ListRuns`, `GetRun`, `GetJob`, `GetJobLog` (streamed, follow), `ListAnnotations`, `GetStepSummaries`, `CancelRun`, `RerunRun`, `DispatchWorkflow`, `ListWorkflows`, `DisableWorkflow`, `EnableWorkflow`, `ListChecks`, `ListRunners`, `RemoveRunner` |
@@ -5,10 +5,10 @@
5 | `RepoService` | `ListRepos`, `GetRepo`, `CreateRepo`, `UpdateRepo` (field mask, merge settings), `DeleteRepo` |5 | `RepoService` | `ListRepos`, `GetRepo`, `CreateRepo`, `UpdateRepo` (field mask, merge settings), `DeleteRepo` |
6 | `GitService` | `ListRefs`, `GetTree`, `ListPaths`, `GetBlob` (streamed), `ListCommits`, `GetCommit` (structured diff), `ResolveRevision` |6 | `GitService` | `ListRefs`, `GetTree`, `ListPaths`, `GetBlob` (streamed), `ListCommits`, `GetCommit` (structured diff), `ResolveRevision` |
7 | `TokenService` | `CreateToken` (secret shown once), `ListTokens`, `RevokeToken` |7 | `TokenService` | `CreateToken` (secret shown once), `ListTokens`, `RevokeToken` |
8-| `MergeRequestService` | `CreateMergeRequest`, `ListMergeRequests`, `GetMergeRequest` (commits, diff, comments), `AddComment`, `EditComment`, `DeleteComment`, `ResolveComment`, `CloseMergeRequest`, `MergeMergeRequest`, `MarkRead` |8+| `MergeRequestService` | `CreateMergeRequest`, `ListMergeRequests`, `GetMergeRequest` (commits, diff, comments), `AddComment`, `EditComment`, `DeleteComment`, `ResolveComment`, `CloseMergeRequest`, `MergeMergeRequest` (modes fast-forward, squash, merge commit), `MarkRead`. Open merge requests carry `mergeability` (up to date, behind, conflict, or checking) and `Watch` publishes `MergeRequestMergeability` when it changes (feature `merge_requests.mergeability`) |
9 | `IssueService` | `CreateIssue`, `ListIssues`, `GetIssue` (comments), `AddIssueComment`, `CloseIssue`, `ReopenIssue`; owner only: `ListPendingIssues`, `ApproveIssue`, `RejectIssue`. Feature `issues`. Issues share numbers with merge requests |9 | `IssueService` | `CreateIssue`, `ListIssues`, `GetIssue` (comments), `AddIssueComment`, `CloseIssue`, `ReopenIssue`; owner only: `ListPendingIssues`, `ApproveIssue`, `RejectIssue`. Feature `issues`. Issues share numbers with merge requests |
10 | `SessionService` | `CreateLoginLink`, `SignOutEverywhere` (owner only) |10 | `SessionService` | `CreateLoginLink`, `SignOutEverywhere` (owner only) |
11-| `EventService` | `Watch` (streamed, resumable). Topics `home`, `repo:<name>` and `owner` (owner rights only). Events 17–21: `issue_opened`, `issue_closed`, `issue_reopened`, `issue_commented`, and `issue_submitted` (only on `owner`, no content) |11+| `EventService` | `Watch` (streamed, resumable). Topics `home`, `repo:<name>` and `owner` (owner rights only). Events 17–21: `issue_opened`, `issue_closed`, `issue_reopened`, `issue_commented`, and `issue_submitted` (only on `owner`, no content). Event 22: `merge_request_mergeability` |
12 | `ServerService` | `GetVersion` (version and features), `GetSigningKey`, `RotateOIDCKey` (owner only) |12 | `ServerService` | `GetVersion` (version and features), `GetSigningKey`, `RotateOIDCKey` (owner only) |
13 | `TrustedKeyService` | `ListTrustedKeys`, `AddTrustedKey` and `RemoveTrustedKey` (owner only). `Commit.verification` carries the result of the check (feature `commit_signatures`) |13 | `TrustedKeyService` | `ListTrustedKeys`, `AddTrustedKey` and `RemoveTrustedKey` (owner only). `Commit.verification` carries the result of the check (feature `commit_signatures`) |
14 | `RunService` | `ListRuns`, `GetRun`, `GetJob`, `GetJobLog` (streamed, follow), `ListAnnotations`, `GetStepSummaries`, `CancelRun`, `RerunRun`, `DispatchWorkflow`, `ListWorkflows`, `DisableWorkflow`, `EnableWorkflow`, `ListChecks`, `ListRunners`, `RemoveRunner` |14 | `RunService` | `ListRuns`, `GetRun`, `GetJob`, `GetJobLog` (streamed, follow), `ListAnnotations`, `GetStepSummaries`, `CancelRun`, `RerunRun`, `DispatchWorkflow`, `ListWorkflows`, `DisableWorkflow`, `EnableWorkflow`, `ListChecks`, `ListRunners`, `RemoveRunner` |
M gen/ermite/ermiteconnect/merge_request.connect.go +12 -6
@@ -127,9 +127,12 @@ type MergeRequestServiceClient interface {
127127 // never merged unseen. Fails with invalid_argument if head_id is empty or
128128 // not a commit id, and with failed_precondition if the merge request is not
129129 // open, if the source branch no longer points to head_id ("branch moved,
130- // read again"), if the target is not an ancestor of the head (rebase and
131- // push again), if the mode is not allowed by RepoSettings, or if a check
132- // fails and RepoSettings.failing_checks_block is set. Merges of one
130+ // read again"), if the mode is fast-forward and the target is not an
131+ // ancestor of the head (rebase and push again, or merge with squash or
132+ // merge commit), if the mode is squash or merge commit and the head
133+ // conflicts with the target or shares no history with it (rebase and push
134+ // again), if the mode is not allowed by RepoSettings, or if a check fails
135+ // and RepoSettings.failing_checks_block is set. Merges of one
133136 // repository run one at a time. Repeating a call that succeeded fails with
134137 // failed_precondition (not open). On success the server publishes
135138 // MergeRequestMerged then Pushed for the target branch.
@@ -339,9 +342,12 @@ type MergeRequestServiceHandler interface {
339342 // never merged unseen. Fails with invalid_argument if head_id is empty or
340343 // not a commit id, and with failed_precondition if the merge request is not
341344 // open, if the source branch no longer points to head_id ("branch moved,
342- // read again"), if the target is not an ancestor of the head (rebase and
343- // push again), if the mode is not allowed by RepoSettings, or if a check
344- // fails and RepoSettings.failing_checks_block is set. Merges of one
345+ // read again"), if the mode is fast-forward and the target is not an
346+ // ancestor of the head (rebase and push again, or merge with squash or
347+ // merge commit), if the mode is squash or merge commit and the head
348+ // conflicts with the target or shares no history with it (rebase and push
349+ // again), if the mode is not allowed by RepoSettings, or if a check fails
350+ // and RepoSettings.failing_checks_block is set. Merges of one
345351 // repository run one at a time. Repeating a call that succeeded fails with
346352 // failed_precondition (not open). On success the server publishes
347353 // MergeRequestMerged then Pushed for the target branch.
@@ -127,9 +127,12 @@ type MergeRequestServiceClient interface {
127 // never merged unseen. Fails with invalid_argument if head_id is empty or127 // never merged unseen. Fails with invalid_argument if head_id is empty or
128 // not a commit id, and with failed_precondition if the merge request is not128 // not a commit id, and with failed_precondition if the merge request is not
129 // open, if the source branch no longer points to head_id ("branch moved,129 // open, if the source branch no longer points to head_id ("branch moved,
130- // read again"), if the target is not an ancestor of the head (rebase and130+ // read again"), if the mode is fast-forward and the target is not an
131- // push again), if the mode is not allowed by RepoSettings, or if a check131+ // ancestor of the head (rebase and push again, or merge with squash or
132- // fails and RepoSettings.failing_checks_block is set. Merges of one132+ // merge commit), if the mode is squash or merge commit and the head
133+ // conflicts with the target or shares no history with it (rebase and push
134+ // again), if the mode is not allowed by RepoSettings, or if a check fails
135+ // and RepoSettings.failing_checks_block is set. Merges of one
133 // repository run one at a time. Repeating a call that succeeded fails with136 // repository run one at a time. Repeating a call that succeeded fails with
134 // failed_precondition (not open). On success the server publishes137 // failed_precondition (not open). On success the server publishes
135 // MergeRequestMerged then Pushed for the target branch.138 // MergeRequestMerged then Pushed for the target branch.
@@ -339,9 +342,12 @@ type MergeRequestServiceHandler interface {
339 // never merged unseen. Fails with invalid_argument if head_id is empty or342 // never merged unseen. Fails with invalid_argument if head_id is empty or
340 // not a commit id, and with failed_precondition if the merge request is not343 // not a commit id, and with failed_precondition if the merge request is not
341 // open, if the source branch no longer points to head_id ("branch moved,344 // open, if the source branch no longer points to head_id ("branch moved,
342- // read again"), if the target is not an ancestor of the head (rebase and345+ // read again"), if the mode is fast-forward and the target is not an
343- // push again), if the mode is not allowed by RepoSettings, or if a check346+ // ancestor of the head (rebase and push again, or merge with squash or
344- // fails and RepoSettings.failing_checks_block is set. Merges of one347+ // merge commit), if the mode is squash or merge commit and the head
348+ // conflicts with the target or shares no history with it (rebase and push
349+ // again), if the mode is not allowed by RepoSettings, or if a check fails
350+ // and RepoSettings.failing_checks_block is set. Merges of one
345 // repository run one at a time. Repeating a call that succeeded fails with351 // repository run one at a time. Repeating a call that succeeded fails with
346 // failed_precondition (not open). On success the server publishes352 // failed_precondition (not open). On success the server publishes
347 // MergeRequestMerged then Pushed for the target branch.353 // MergeRequestMerged then Pushed for the target branch.
M gen/ermite/ermiteconnect/server.connect.go +2 -2
@@ -53,7 +53,7 @@ type ServerServiceClient interface {
5353 // it first to check compatibility.
5454 GetVersion(context.Context, *connect.Request[ermite.GetVersionRequest]) (*connect.Response[ermite.GetVersionResponse], error)
5555 // GetSigningKey returns the public key with which the server signs the
56- // commits it creates (squash merges, see MergeMode). It needs no
56+ // commits it creates (squash and merge commits, see MergeMode). It needs no
5757 // authentication: the key is public, and anyone verifying a commit needs it.
5858 // Servers that implement it list "signing_key" in
5959 // GetVersionResponse.features.
@@ -132,7 +132,7 @@ type ServerServiceHandler interface {
132132 // it first to check compatibility.
133133 GetVersion(context.Context, *connect.Request[ermite.GetVersionRequest]) (*connect.Response[ermite.GetVersionResponse], error)
134134 // GetSigningKey returns the public key with which the server signs the
135- // commits it creates (squash merges, see MergeMode). It needs no
135+ // commits it creates (squash and merge commits, see MergeMode). It needs no
136136 // authentication: the key is public, and anyone verifying a commit needs it.
137137 // Servers that implement it list "signing_key" in
138138 // GetVersionResponse.features.
@@ -53,7 +53,7 @@ type ServerServiceClient interface {
53 // it first to check compatibility.53 // it first to check compatibility.
54 GetVersion(context.Context, *connect.Request[ermite.GetVersionRequest]) (*connect.Response[ermite.GetVersionResponse], error)54 GetVersion(context.Context, *connect.Request[ermite.GetVersionRequest]) (*connect.Response[ermite.GetVersionResponse], error)
55 // GetSigningKey returns the public key with which the server signs the55 // GetSigningKey returns the public key with which the server signs the
56- // commits it creates (squash merges, see MergeMode). It needs no56+ // commits it creates (squash and merge commits, see MergeMode). It needs no
57 // authentication: the key is public, and anyone verifying a commit needs it.57 // authentication: the key is public, and anyone verifying a commit needs it.
58 // Servers that implement it list "signing_key" in58 // Servers that implement it list "signing_key" in
59 // GetVersionResponse.features.59 // GetVersionResponse.features.
@@ -132,7 +132,7 @@ type ServerServiceHandler interface {
132 // it first to check compatibility.132 // it first to check compatibility.
133 GetVersion(context.Context, *connect.Request[ermite.GetVersionRequest]) (*connect.Response[ermite.GetVersionResponse], error)133 GetVersion(context.Context, *connect.Request[ermite.GetVersionRequest]) (*connect.Response[ermite.GetVersionResponse], error)
134 // GetSigningKey returns the public key with which the server signs the134 // GetSigningKey returns the public key with which the server signs the
135- // commits it creates (squash merges, see MergeMode). It needs no135+ // commits it creates (squash and merge commits, see MergeMode). It needs no
136 // authentication: the key is public, and anyone verifying a commit needs it.136 // authentication: the key is public, and anyone verifying a commit needs it.
137 // Servers that implement it list "signing_key" in137 // Servers that implement it list "signing_key" in
138 // GetVersionResponse.features.138 // GetVersionResponse.features.
M gen/ermite/event.pb.go +207 -112 generated file: collapsed
M gen/ermite/merge_request.pb.go +375 -159
@@ -191,6 +191,186 @@ func (Verdict) EnumDescriptor() ([]byte, []int) {
191191 return file_ermite_merge_request_proto_rawDescGZIP(), []int{2}
192192 }
193193
194+// MergeabilityState tells whether the head of an open merge request can be
195+// merged into its target.
196+type MergeabilityState int32
197+
198+const (
199+ // Not set.
200+ MergeabilityState_MERGEABILITY_STATE_UNSPECIFIED MergeabilityState = 0
201+ // The server has no result yet for the current tips of both branches. It
202+ // is replaced by another state when the check completes.
203+ MergeabilityState_MERGEABILITY_STATE_CHECKING MergeabilityState = 1
204+ // The target is an ancestor of the head: every mode can merge.
205+ MergeabilityState_MERGEABILITY_STATE_UP_TO_DATE MergeabilityState = 2
206+ // The target has commits the head lacks, but the head merges cleanly:
207+ // squash and merge commit can merge, fast-forward cannot.
208+ MergeabilityState_MERGEABILITY_STATE_BEHIND MergeabilityState = 3
209+ // The head does not merge cleanly into the target, or the branches share no
210+ // history: no mode can merge.
211+ MergeabilityState_MERGEABILITY_STATE_CONFLICT MergeabilityState = 4
212+)
213+
214+// Enum value maps for MergeabilityState.
215+var (
216+ MergeabilityState_name = map[int32]string{
217+ 0: "MERGEABILITY_STATE_UNSPECIFIED",
218+ 1: "MERGEABILITY_STATE_CHECKING",
219+ 2: "MERGEABILITY_STATE_UP_TO_DATE",
220+ 3: "MERGEABILITY_STATE_BEHIND",
221+ 4: "MERGEABILITY_STATE_CONFLICT",
222+ }
223+ MergeabilityState_value = map[string]int32{
224+ "MERGEABILITY_STATE_UNSPECIFIED": 0,
225+ "MERGEABILITY_STATE_CHECKING": 1,
226+ "MERGEABILITY_STATE_UP_TO_DATE": 2,
227+ "MERGEABILITY_STATE_BEHIND": 3,
228+ "MERGEABILITY_STATE_CONFLICT": 4,
229+ }
230+)
231+
232+func (x MergeabilityState) Enum() *MergeabilityState {
233+ p := new(MergeabilityState)
234+ *p = x
235+ return p
236+}
237+
238+func (x MergeabilityState) String() string {
239+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
240+}
241+
242+func (MergeabilityState) Descriptor() protoreflect.EnumDescriptor {
243+ return file_ermite_merge_request_proto_enumTypes[3].Descriptor()
244+}
245+
246+func (MergeabilityState) Type() protoreflect.EnumType {
247+ return &file_ermite_merge_request_proto_enumTypes[3]
248+}
249+
250+func (x MergeabilityState) Number() protoreflect.EnumNumber {
251+ return protoreflect.EnumNumber(x)
252+}
253+
254+// Deprecated: Use MergeabilityState.Descriptor instead.
255+func (MergeabilityState) EnumDescriptor() ([]byte, []int) {
256+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{3}
257+}
258+
259+// Mergeability is the result of checking an open merge request against the
260+// tips of its branches.
261+type Mergeability struct {
262+ state protoimpl.MessageState `protogen:"open.v1"`
263+ // State is the result.
264+ State MergeabilityState `protobuf:"varint,1,opt,name=state,proto3,enum=ermite.MergeabilityState" json:"state,omitempty"`
265+ // TargetId is the commit the target branch pointed to when checked. Empty
266+ // while CHECKING.
267+ TargetId string `protobuf:"bytes,2,opt,name=target_id,json=targetId,proto3" json:"target_id,omitempty"`
268+ // HeadId is the commit the source branch pointed to when checked. Empty
269+ // while CHECKING.
270+ HeadId string `protobuf:"bytes,3,opt,name=head_id,json=headId,proto3" json:"head_id,omitempty"`
271+ // Behind is the number of commits of the target that the head lacks. Set
272+ // only when state is BEHIND.
273+ Behind int32 `protobuf:"varint,4,opt,name=behind,proto3" json:"behind,omitempty"`
274+ // BehindCapped says that Behind is a lower bound: the server stops counting
275+ // at 1,000.
276+ BehindCapped bool `protobuf:"varint,5,opt,name=behind_capped,json=behindCapped,proto3" json:"behind_capped,omitempty"`
277+ // ConflictPaths are the paths that conflict, at most 20. Set only when
278+ // state is CONFLICT; empty when the branches share no history.
279+ ConflictPaths []string `protobuf:"bytes,6,rep,name=conflict_paths,json=conflictPaths,proto3" json:"conflict_paths,omitempty"`
280+ // ConflictPathsTruncated says that more paths conflict than listed.
281+ ConflictPathsTruncated bool `protobuf:"varint,7,opt,name=conflict_paths_truncated,json=conflictPathsTruncated,proto3" json:"conflict_paths_truncated,omitempty"`
282+ // CheckedAt is when the server computed the result. Unset while CHECKING.
283+ CheckedAt *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=checked_at,json=checkedAt,proto3" json:"checked_at,omitempty"`
284+ unknownFields protoimpl.UnknownFields
285+ sizeCache protoimpl.SizeCache
286+}
287+
288+func (x *Mergeability) Reset() {
289+ *x = Mergeability{}
290+ mi := &file_ermite_merge_request_proto_msgTypes[0]
291+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
292+ ms.StoreMessageInfo(mi)
293+}
294+
295+func (x *Mergeability) String() string {
296+ return protoimpl.X.MessageStringOf(x)
297+}
298+
299+func (*Mergeability) ProtoMessage() {}
300+
301+func (x *Mergeability) ProtoReflect() protoreflect.Message {
302+ mi := &file_ermite_merge_request_proto_msgTypes[0]
303+ if x != nil {
304+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
305+ if ms.LoadMessageInfo() == nil {
306+ ms.StoreMessageInfo(mi)
307+ }
308+ return ms
309+ }
310+ return mi.MessageOf(x)
311+}
312+
313+// Deprecated: Use Mergeability.ProtoReflect.Descriptor instead.
314+func (*Mergeability) Descriptor() ([]byte, []int) {
315+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{0}
316+}
317+
318+func (x *Mergeability) GetState() MergeabilityState {
319+ if x != nil {
320+ return x.State
321+ }
322+ return MergeabilityState_MERGEABILITY_STATE_UNSPECIFIED
323+}
324+
325+func (x *Mergeability) GetTargetId() string {
326+ if x != nil {
327+ return x.TargetId
328+ }
329+ return ""
330+}
331+
332+func (x *Mergeability) GetHeadId() string {
333+ if x != nil {
334+ return x.HeadId
335+ }
336+ return ""
337+}
338+
339+func (x *Mergeability) GetBehind() int32 {
340+ if x != nil {
341+ return x.Behind
342+ }
343+ return 0
344+}
345+
346+func (x *Mergeability) GetBehindCapped() bool {
347+ if x != nil {
348+ return x.BehindCapped
349+ }
350+ return false
351+}
352+
353+func (x *Mergeability) GetConflictPaths() []string {
354+ if x != nil {
355+ return x.ConflictPaths
356+ }
357+ return nil
358+}
359+
360+func (x *Mergeability) GetConflictPathsTruncated() bool {
361+ if x != nil {
362+ return x.ConflictPathsTruncated
363+ }
364+ return false
365+}
366+
367+func (x *Mergeability) GetCheckedAt() *timestamppb.Timestamp {
368+ if x != nil {
369+ return x.CheckedAt
370+ }
371+ return nil
372+}
373+
194374 // MergeRequest asks to merge one branch of a repository into another branch
195375 // of the same repository. It is about a branch, not about who wrote it.
196376 type MergeRequest struct {
@@ -229,19 +409,26 @@ type MergeRequest struct {
229409 // merged or closed it is the head at that moment.
230410 HeadId string `protobuf:"bytes,11,opt,name=head_id,json=headId,proto3" json:"head_id,omitempty"`
231411 // MergedCommitId is the id of the commit the target branch points to after
232- // the merge: the head for a fast-forward, the new commit for a squash.
412+ // the merge: the head for a fast-forward, the new commit for a squash or a
413+ // merge commit.
233414 // Empty unless state is MERGED.
234415 MergedCommitId string `protobuf:"bytes,12,opt,name=merged_commit_id,json=mergedCommitId,proto3" json:"merged_commit_id,omitempty"`
235416 // MergeMode is how the merge request was merged. MERGE_MODE_UNSPECIFIED
236417 // unless state is MERGED.
237- MergeMode MergeMode `protobuf:"varint,13,opt,name=merge_mode,json=mergeMode,proto3,enum=ermite.MergeMode" json:"merge_mode,omitempty"`
418+ MergeMode MergeMode `protobuf:"varint,13,opt,name=merge_mode,json=mergeMode,proto3,enum=ermite.MergeMode" json:"merge_mode,omitempty"`
419+ // Mergeability tells whether the head can be merged into the target. Set
420+ // while the merge request is OPEN, with state CHECKING until the server has
421+ // a result for the current tips; never set once merged or closed. It is a
422+ // hint: MergeMergeRequest checks again. Set only by servers with the
423+ // "merge_requests.mergeability" feature.
424+ Mergeability *Mergeability `protobuf:"bytes,14,opt,name=mergeability,proto3" json:"mergeability,omitempty"`
238425 unknownFields protoimpl.UnknownFields
239426 sizeCache protoimpl.SizeCache
240427 }
241428
242429 func (x *MergeRequest) Reset() {
243430 *x = MergeRequest{}
244- mi := &file_ermite_merge_request_proto_msgTypes[0]
431+ mi := &file_ermite_merge_request_proto_msgTypes[1]
245432 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
246433 ms.StoreMessageInfo(mi)
247434 }
@@ -253,7 +440,7 @@ func (x *MergeRequest) String() string {
253440 func (*MergeRequest) ProtoMessage() {}
254441
255442 func (x *MergeRequest) ProtoReflect() protoreflect.Message {
256- mi := &file_ermite_merge_request_proto_msgTypes[0]
443+ mi := &file_ermite_merge_request_proto_msgTypes[1]
257444 if x != nil {
258445 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
259446 if ms.LoadMessageInfo() == nil {
@@ -266,7 +453,7 @@ func (x *MergeRequest) ProtoReflect() protoreflect.Message {
266453
267454 // Deprecated: Use MergeRequest.ProtoReflect.Descriptor instead.
268455 func (*MergeRequest) Descriptor() ([]byte, []int) {
269- return file_ermite_merge_request_proto_rawDescGZIP(), []int{0}
456+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{1}
270457 }
271458
272459 func (x *MergeRequest) GetRepo() string {
@@ -360,6 +547,13 @@ func (x *MergeRequest) GetMergeMode() MergeMode {
360547 return MergeMode_MERGE_MODE_UNSPECIFIED
361548 }
362549
550+func (x *MergeRequest) GetMergeability() *Mergeability {
551+ if x != nil {
552+ return x.Mergeability
553+ }
554+ return nil
555+}
556+
363557 // Comment is a note on a merge request, either general or attached to a line
364558 // of its diff.
365559 type Comment struct {
@@ -412,7 +606,7 @@ type Comment struct {
412606
413607 func (x *Comment) Reset() {
414608 *x = Comment{}
415- mi := &file_ermite_merge_request_proto_msgTypes[1]
609+ mi := &file_ermite_merge_request_proto_msgTypes[2]
416610 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
417611 ms.StoreMessageInfo(mi)
418612 }
@@ -424,7 +618,7 @@ func (x *Comment) String() string {
424618 func (*Comment) ProtoMessage() {}
425619
426620 func (x *Comment) ProtoReflect() protoreflect.Message {
427- mi := &file_ermite_merge_request_proto_msgTypes[1]
621+ mi := &file_ermite_merge_request_proto_msgTypes[2]
428622 if x != nil {
429623 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
430624 if ms.LoadMessageInfo() == nil {
@@ -437,7 +631,7 @@ func (x *Comment) ProtoReflect() protoreflect.Message {
437631
438632 // Deprecated: Use Comment.ProtoReflect.Descriptor instead.
439633 func (*Comment) Descriptor() ([]byte, []int) {
440- return file_ermite_merge_request_proto_rawDescGZIP(), []int{1}
634+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{2}
441635 }
442636
443637 func (x *Comment) GetId() string {
@@ -561,7 +755,7 @@ type AuthorVerdict struct {
561755
562756 func (x *AuthorVerdict) Reset() {
563757 *x = AuthorVerdict{}
564- mi := &file_ermite_merge_request_proto_msgTypes[2]
758+ mi := &file_ermite_merge_request_proto_msgTypes[3]
565759 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
566760 ms.StoreMessageInfo(mi)
567761 }
@@ -573,7 +767,7 @@ func (x *AuthorVerdict) String() string {
573767 func (*AuthorVerdict) ProtoMessage() {}
574768
575769 func (x *AuthorVerdict) ProtoReflect() protoreflect.Message {
576- mi := &file_ermite_merge_request_proto_msgTypes[2]
770+ mi := &file_ermite_merge_request_proto_msgTypes[3]
577771 if x != nil {
578772 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
579773 if ms.LoadMessageInfo() == nil {
@@ -586,7 +780,7 @@ func (x *AuthorVerdict) ProtoReflect() protoreflect.Message {
586780
587781 // Deprecated: Use AuthorVerdict.ProtoReflect.Descriptor instead.
588782 func (*AuthorVerdict) Descriptor() ([]byte, []int) {
589- return file_ermite_merge_request_proto_rawDescGZIP(), []int{2}
783+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{3}
590784 }
591785
592786 func (x *AuthorVerdict) GetAuthor() string {
@@ -653,7 +847,7 @@ type CreateMergeRequestRequest struct {
653847
654848 func (x *CreateMergeRequestRequest) Reset() {
655849 *x = CreateMergeRequestRequest{}
656- mi := &file_ermite_merge_request_proto_msgTypes[3]
850+ mi := &file_ermite_merge_request_proto_msgTypes[4]
657851 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
658852 ms.StoreMessageInfo(mi)
659853 }
@@ -665,7 +859,7 @@ func (x *CreateMergeRequestRequest) String() string {
665859 func (*CreateMergeRequestRequest) ProtoMessage() {}
666860
667861 func (x *CreateMergeRequestRequest) ProtoReflect() protoreflect.Message {
668- mi := &file_ermite_merge_request_proto_msgTypes[3]
862+ mi := &file_ermite_merge_request_proto_msgTypes[4]
669863 if x != nil {
670864 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
671865 if ms.LoadMessageInfo() == nil {
@@ -678,7 +872,7 @@ func (x *CreateMergeRequestRequest) ProtoReflect() protoreflect.Message {
678872
679873 // Deprecated: Use CreateMergeRequestRequest.ProtoReflect.Descriptor instead.
680874 func (*CreateMergeRequestRequest) Descriptor() ([]byte, []int) {
681- return file_ermite_merge_request_proto_rawDescGZIP(), []int{3}
875+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{4}
682876 }
683877
684878 func (x *CreateMergeRequestRequest) GetRepo() string {
@@ -727,7 +921,7 @@ type CreateMergeRequestResponse struct {
727921
728922 func (x *CreateMergeRequestResponse) Reset() {
729923 *x = CreateMergeRequestResponse{}
730- mi := &file_ermite_merge_request_proto_msgTypes[4]
924+ mi := &file_ermite_merge_request_proto_msgTypes[5]
731925 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
732926 ms.StoreMessageInfo(mi)
733927 }
@@ -739,7 +933,7 @@ func (x *CreateMergeRequestResponse) String() string {
739933 func (*CreateMergeRequestResponse) ProtoMessage() {}
740934
741935 func (x *CreateMergeRequestResponse) ProtoReflect() protoreflect.Message {
742- mi := &file_ermite_merge_request_proto_msgTypes[4]
936+ mi := &file_ermite_merge_request_proto_msgTypes[5]
743937 if x != nil {
744938 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
745939 if ms.LoadMessageInfo() == nil {
@@ -752,7 +946,7 @@ func (x *CreateMergeRequestResponse) ProtoReflect() protoreflect.Message {
752946
753947 // Deprecated: Use CreateMergeRequestResponse.ProtoReflect.Descriptor instead.
754948 func (*CreateMergeRequestResponse) Descriptor() ([]byte, []int) {
755- return file_ermite_merge_request_proto_rawDescGZIP(), []int{4}
949+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{5}
756950 }
757951
758952 func (x *CreateMergeRequestResponse) GetMergeRequest() *MergeRequest {
@@ -782,7 +976,7 @@ type ListMergeRequestsRequest struct {
782976
783977 func (x *ListMergeRequestsRequest) Reset() {
784978 *x = ListMergeRequestsRequest{}
785- mi := &file_ermite_merge_request_proto_msgTypes[5]
979+ mi := &file_ermite_merge_request_proto_msgTypes[6]
786980 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
787981 ms.StoreMessageInfo(mi)
788982 }
@@ -794,7 +988,7 @@ func (x *ListMergeRequestsRequest) String() string {
794988 func (*ListMergeRequestsRequest) ProtoMessage() {}
795989
796990 func (x *ListMergeRequestsRequest) ProtoReflect() protoreflect.Message {
797- mi := &file_ermite_merge_request_proto_msgTypes[5]
991+ mi := &file_ermite_merge_request_proto_msgTypes[6]
798992 if x != nil {
799993 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
800994 if ms.LoadMessageInfo() == nil {
@@ -807,7 +1001,7 @@ func (x *ListMergeRequestsRequest) ProtoReflect() protoreflect.Message {
8071001
8081002 // Deprecated: Use ListMergeRequestsRequest.ProtoReflect.Descriptor instead.
8091003 func (*ListMergeRequestsRequest) Descriptor() ([]byte, []int) {
810- return file_ermite_merge_request_proto_rawDescGZIP(), []int{5}
1004+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{6}
8111005 }
8121006
8131007 func (x *ListMergeRequestsRequest) GetRepo() string {
@@ -852,7 +1046,7 @@ type ListMergeRequestsResponse struct {
8521046
8531047 func (x *ListMergeRequestsResponse) Reset() {
8541048 *x = ListMergeRequestsResponse{}
855- mi := &file_ermite_merge_request_proto_msgTypes[6]
1049+ mi := &file_ermite_merge_request_proto_msgTypes[7]
8561050 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
8571051 ms.StoreMessageInfo(mi)
8581052 }
@@ -864,7 +1058,7 @@ func (x *ListMergeRequestsResponse) String() string {
8641058 func (*ListMergeRequestsResponse) ProtoMessage() {}
8651059
8661060 func (x *ListMergeRequestsResponse) ProtoReflect() protoreflect.Message {
867- mi := &file_ermite_merge_request_proto_msgTypes[6]
1061+ mi := &file_ermite_merge_request_proto_msgTypes[7]
8681062 if x != nil {
8691063 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
8701064 if ms.LoadMessageInfo() == nil {
@@ -877,7 +1071,7 @@ func (x *ListMergeRequestsResponse) ProtoReflect() protoreflect.Message {
8771071
8781072 // Deprecated: Use ListMergeRequestsResponse.ProtoReflect.Descriptor instead.
8791073 func (*ListMergeRequestsResponse) Descriptor() ([]byte, []int) {
880- return file_ermite_merge_request_proto_rawDescGZIP(), []int{6}
1074+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{7}
8811075 }
8821076
8831077 func (x *ListMergeRequestsResponse) GetMergeRequests() []*MergeRequest {
@@ -914,7 +1108,7 @@ type GetMergeRequestRequest struct {
9141108
9151109 func (x *GetMergeRequestRequest) Reset() {
9161110 *x = GetMergeRequestRequest{}
917- mi := &file_ermite_merge_request_proto_msgTypes[7]
1111+ mi := &file_ermite_merge_request_proto_msgTypes[8]
9181112 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
9191113 ms.StoreMessageInfo(mi)
9201114 }
@@ -926,7 +1120,7 @@ func (x *GetMergeRequestRequest) String() string {
9261120 func (*GetMergeRequestRequest) ProtoMessage() {}
9271121
9281122 func (x *GetMergeRequestRequest) ProtoReflect() protoreflect.Message {
929- mi := &file_ermite_merge_request_proto_msgTypes[7]
1123+ mi := &file_ermite_merge_request_proto_msgTypes[8]
9301124 if x != nil {
9311125 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
9321126 if ms.LoadMessageInfo() == nil {
@@ -939,7 +1133,7 @@ func (x *GetMergeRequestRequest) ProtoReflect() protoreflect.Message {
9391133
9401134 // Deprecated: Use GetMergeRequestRequest.ProtoReflect.Descriptor instead.
9411135 func (*GetMergeRequestRequest) Descriptor() ([]byte, []int) {
942- return file_ermite_merge_request_proto_rawDescGZIP(), []int{7}
1136+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{8}
9431137 }
9441138
9451139 func (x *GetMergeRequestRequest) GetRepo() string {
@@ -1005,7 +1199,7 @@ type GetMergeRequestResponse struct {
10051199
10061200 func (x *GetMergeRequestResponse) Reset() {
10071201 *x = GetMergeRequestResponse{}
1008- mi := &file_ermite_merge_request_proto_msgTypes[8]
1202+ mi := &file_ermite_merge_request_proto_msgTypes[9]
10091203 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
10101204 ms.StoreMessageInfo(mi)
10111205 }
@@ -1017,7 +1211,7 @@ func (x *GetMergeRequestResponse) String() string {
10171211 func (*GetMergeRequestResponse) ProtoMessage() {}
10181212
10191213 func (x *GetMergeRequestResponse) ProtoReflect() protoreflect.Message {
1020- mi := &file_ermite_merge_request_proto_msgTypes[8]
1214+ mi := &file_ermite_merge_request_proto_msgTypes[9]
10211215 if x != nil {
10221216 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
10231217 if ms.LoadMessageInfo() == nil {
@@ -1030,7 +1224,7 @@ func (x *GetMergeRequestResponse) ProtoReflect() protoreflect.Message {
10301224
10311225 // Deprecated: Use GetMergeRequestResponse.ProtoReflect.Descriptor instead.
10321226 func (*GetMergeRequestResponse) Descriptor() ([]byte, []int) {
1033- return file_ermite_merge_request_proto_rawDescGZIP(), []int{8}
1227+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{9}
10341228 }
10351229
10361230 func (x *GetMergeRequestResponse) GetMergeRequest() *MergeRequest {
@@ -1139,7 +1333,7 @@ type AddCommentRequest struct {
11391333
11401334 func (x *AddCommentRequest) Reset() {
11411335 *x = AddCommentRequest{}
1142- mi := &file_ermite_merge_request_proto_msgTypes[9]
1336+ mi := &file_ermite_merge_request_proto_msgTypes[10]
11431337 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
11441338 ms.StoreMessageInfo(mi)
11451339 }
@@ -1151,7 +1345,7 @@ func (x *AddCommentRequest) String() string {
11511345 func (*AddCommentRequest) ProtoMessage() {}
11521346
11531347 func (x *AddCommentRequest) ProtoReflect() protoreflect.Message {
1154- mi := &file_ermite_merge_request_proto_msgTypes[9]
1348+ mi := &file_ermite_merge_request_proto_msgTypes[10]
11551349 if x != nil {
11561350 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
11571351 if ms.LoadMessageInfo() == nil {
@@ -1164,7 +1358,7 @@ func (x *AddCommentRequest) ProtoReflect() protoreflect.Message {
11641358
11651359 // Deprecated: Use AddCommentRequest.ProtoReflect.Descriptor instead.
11661360 func (*AddCommentRequest) Descriptor() ([]byte, []int) {
1167- return file_ermite_merge_request_proto_rawDescGZIP(), []int{9}
1361+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{10}
11681362 }
11691363
11701364 func (x *AddCommentRequest) GetRepo() string {
@@ -1241,7 +1435,7 @@ type AddCommentResponse struct {
12411435
12421436 func (x *AddCommentResponse) Reset() {
12431437 *x = AddCommentResponse{}
1244- mi := &file_ermite_merge_request_proto_msgTypes[10]
1438+ mi := &file_ermite_merge_request_proto_msgTypes[11]
12451439 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
12461440 ms.StoreMessageInfo(mi)
12471441 }
@@ -1253,7 +1447,7 @@ func (x *AddCommentResponse) String() string {
12531447 func (*AddCommentResponse) ProtoMessage() {}
12541448
12551449 func (x *AddCommentResponse) ProtoReflect() protoreflect.Message {
1256- mi := &file_ermite_merge_request_proto_msgTypes[10]
1450+ mi := &file_ermite_merge_request_proto_msgTypes[11]
12571451 if x != nil {
12581452 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
12591453 if ms.LoadMessageInfo() == nil {
@@ -1266,7 +1460,7 @@ func (x *AddCommentResponse) ProtoReflect() protoreflect.Message {
12661460
12671461 // Deprecated: Use AddCommentResponse.ProtoReflect.Descriptor instead.
12681462 func (*AddCommentResponse) Descriptor() ([]byte, []int) {
1269- return file_ermite_merge_request_proto_rawDescGZIP(), []int{10}
1463+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{11}
12701464 }
12711465
12721466 func (x *AddCommentResponse) GetComment() *Comment {
@@ -1294,7 +1488,7 @@ type EditCommentRequest struct {
12941488
12951489 func (x *EditCommentRequest) Reset() {
12961490 *x = EditCommentRequest{}
1297- mi := &file_ermite_merge_request_proto_msgTypes[11]
1491+ mi := &file_ermite_merge_request_proto_msgTypes[12]
12981492 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
12991493 ms.StoreMessageInfo(mi)
13001494 }
@@ -1306,7 +1500,7 @@ func (x *EditCommentRequest) String() string {
13061500 func (*EditCommentRequest) ProtoMessage() {}
13071501
13081502 func (x *EditCommentRequest) ProtoReflect() protoreflect.Message {
1309- mi := &file_ermite_merge_request_proto_msgTypes[11]
1503+ mi := &file_ermite_merge_request_proto_msgTypes[12]
13101504 if x != nil {
13111505 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
13121506 if ms.LoadMessageInfo() == nil {
@@ -1319,7 +1513,7 @@ func (x *EditCommentRequest) ProtoReflect() protoreflect.Message {
13191513
13201514 // Deprecated: Use EditCommentRequest.ProtoReflect.Descriptor instead.
13211515 func (*EditCommentRequest) Descriptor() ([]byte, []int) {
1322- return file_ermite_merge_request_proto_rawDescGZIP(), []int{11}
1516+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{12}
13231517 }
13241518
13251519 func (x *EditCommentRequest) GetRepo() string {
@@ -1361,7 +1555,7 @@ type EditCommentResponse struct {
13611555
13621556 func (x *EditCommentResponse) Reset() {
13631557 *x = EditCommentResponse{}
1364- mi := &file_ermite_merge_request_proto_msgTypes[12]
1558+ mi := &file_ermite_merge_request_proto_msgTypes[13]
13651559 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
13661560 ms.StoreMessageInfo(mi)
13671561 }
@@ -1373,7 +1567,7 @@ func (x *EditCommentResponse) String() string {
13731567 func (*EditCommentResponse) ProtoMessage() {}
13741568
13751569 func (x *EditCommentResponse) ProtoReflect() protoreflect.Message {
1376- mi := &file_ermite_merge_request_proto_msgTypes[12]
1570+ mi := &file_ermite_merge_request_proto_msgTypes[13]
13771571 if x != nil {
13781572 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
13791573 if ms.LoadMessageInfo() == nil {
@@ -1386,7 +1580,7 @@ func (x *EditCommentResponse) ProtoReflect() protoreflect.Message {
13861580
13871581 // Deprecated: Use EditCommentResponse.ProtoReflect.Descriptor instead.
13881582 func (*EditCommentResponse) Descriptor() ([]byte, []int) {
1389- return file_ermite_merge_request_proto_rawDescGZIP(), []int{12}
1583+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{13}
13901584 }
13911585
13921586 func (x *EditCommentResponse) GetComment() *Comment {
@@ -1411,7 +1605,7 @@ type DeleteCommentRequest struct {
14111605
14121606 func (x *DeleteCommentRequest) Reset() {
14131607 *x = DeleteCommentRequest{}
1414- mi := &file_ermite_merge_request_proto_msgTypes[13]
1608+ mi := &file_ermite_merge_request_proto_msgTypes[14]
14151609 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
14161610 ms.StoreMessageInfo(mi)
14171611 }
@@ -1423,7 +1617,7 @@ func (x *DeleteCommentRequest) String() string {
14231617 func (*DeleteCommentRequest) ProtoMessage() {}
14241618
14251619 func (x *DeleteCommentRequest) ProtoReflect() protoreflect.Message {
1426- mi := &file_ermite_merge_request_proto_msgTypes[13]
1620+ mi := &file_ermite_merge_request_proto_msgTypes[14]
14271621 if x != nil {
14281622 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
14291623 if ms.LoadMessageInfo() == nil {
@@ -1436,7 +1630,7 @@ func (x *DeleteCommentRequest) ProtoReflect() protoreflect.Message {
14361630
14371631 // Deprecated: Use DeleteCommentRequest.ProtoReflect.Descriptor instead.
14381632 func (*DeleteCommentRequest) Descriptor() ([]byte, []int) {
1439- return file_ermite_merge_request_proto_rawDescGZIP(), []int{13}
1633+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{14}
14401634 }
14411635
14421636 func (x *DeleteCommentRequest) GetRepo() string {
@@ -1471,7 +1665,7 @@ type DeleteCommentResponse struct {
14711665
14721666 func (x *DeleteCommentResponse) Reset() {
14731667 *x = DeleteCommentResponse{}
1474- mi := &file_ermite_merge_request_proto_msgTypes[14]
1668+ mi := &file_ermite_merge_request_proto_msgTypes[15]
14751669 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
14761670 ms.StoreMessageInfo(mi)
14771671 }
@@ -1483,7 +1677,7 @@ func (x *DeleteCommentResponse) String() string {
14831677 func (*DeleteCommentResponse) ProtoMessage() {}
14841678
14851679 func (x *DeleteCommentResponse) ProtoReflect() protoreflect.Message {
1486- mi := &file_ermite_merge_request_proto_msgTypes[14]
1680+ mi := &file_ermite_merge_request_proto_msgTypes[15]
14871681 if x != nil {
14881682 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
14891683 if ms.LoadMessageInfo() == nil {
@@ -1496,7 +1690,7 @@ func (x *DeleteCommentResponse) ProtoReflect() protoreflect.Message {
14961690
14971691 // Deprecated: Use DeleteCommentResponse.ProtoReflect.Descriptor instead.
14981692 func (*DeleteCommentResponse) Descriptor() ([]byte, []int) {
1499- return file_ermite_merge_request_proto_rawDescGZIP(), []int{14}
1693+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{15}
15001694 }
15011695
15021696 func (x *DeleteCommentResponse) GetComment() *Comment {
@@ -1523,7 +1717,7 @@ type ResolveCommentRequest struct {
15231717
15241718 func (x *ResolveCommentRequest) Reset() {
15251719 *x = ResolveCommentRequest{}
1526- mi := &file_ermite_merge_request_proto_msgTypes[15]
1720+ mi := &file_ermite_merge_request_proto_msgTypes[16]
15271721 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
15281722 ms.StoreMessageInfo(mi)
15291723 }
@@ -1535,7 +1729,7 @@ func (x *ResolveCommentRequest) String() string {
15351729 func (*ResolveCommentRequest) ProtoMessage() {}
15361730
15371731 func (x *ResolveCommentRequest) ProtoReflect() protoreflect.Message {
1538- mi := &file_ermite_merge_request_proto_msgTypes[15]
1732+ mi := &file_ermite_merge_request_proto_msgTypes[16]
15391733 if x != nil {
15401734 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
15411735 if ms.LoadMessageInfo() == nil {
@@ -1548,7 +1742,7 @@ func (x *ResolveCommentRequest) ProtoReflect() protoreflect.Message {
15481742
15491743 // Deprecated: Use ResolveCommentRequest.ProtoReflect.Descriptor instead.
15501744 func (*ResolveCommentRequest) Descriptor() ([]byte, []int) {
1551- return file_ermite_merge_request_proto_rawDescGZIP(), []int{15}
1745+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{16}
15521746 }
15531747
15541748 func (x *ResolveCommentRequest) GetRepo() string {
@@ -1590,7 +1784,7 @@ type ResolveCommentResponse struct {
15901784
15911785 func (x *ResolveCommentResponse) Reset() {
15921786 *x = ResolveCommentResponse{}
1593- mi := &file_ermite_merge_request_proto_msgTypes[16]
1787+ mi := &file_ermite_merge_request_proto_msgTypes[17]
15941788 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
15951789 ms.StoreMessageInfo(mi)
15961790 }
@@ -1602,7 +1796,7 @@ func (x *ResolveCommentResponse) String() string {
16021796 func (*ResolveCommentResponse) ProtoMessage() {}
16031797
16041798 func (x *ResolveCommentResponse) ProtoReflect() protoreflect.Message {
1605- mi := &file_ermite_merge_request_proto_msgTypes[16]
1799+ mi := &file_ermite_merge_request_proto_msgTypes[17]
16061800 if x != nil {
16071801 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
16081802 if ms.LoadMessageInfo() == nil {
@@ -1615,7 +1809,7 @@ func (x *ResolveCommentResponse) ProtoReflect() protoreflect.Message {
16151809
16161810 // Deprecated: Use ResolveCommentResponse.ProtoReflect.Descriptor instead.
16171811 func (*ResolveCommentResponse) Descriptor() ([]byte, []int) {
1618- return file_ermite_merge_request_proto_rawDescGZIP(), []int{16}
1812+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{17}
16191813 }
16201814
16211815 func (x *ResolveCommentResponse) GetComment() *Comment {
@@ -1638,7 +1832,7 @@ type CloseMergeRequestRequest struct {
16381832
16391833 func (x *CloseMergeRequestRequest) Reset() {
16401834 *x = CloseMergeRequestRequest{}
1641- mi := &file_ermite_merge_request_proto_msgTypes[17]
1835+ mi := &file_ermite_merge_request_proto_msgTypes[18]
16421836 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
16431837 ms.StoreMessageInfo(mi)
16441838 }
@@ -1650,7 +1844,7 @@ func (x *CloseMergeRequestRequest) String() string {
16501844 func (*CloseMergeRequestRequest) ProtoMessage() {}
16511845
16521846 func (x *CloseMergeRequestRequest) ProtoReflect() protoreflect.Message {
1653- mi := &file_ermite_merge_request_proto_msgTypes[17]
1847+ mi := &file_ermite_merge_request_proto_msgTypes[18]
16541848 if x != nil {
16551849 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
16561850 if ms.LoadMessageInfo() == nil {
@@ -1663,7 +1857,7 @@ func (x *CloseMergeRequestRequest) ProtoReflect() protoreflect.Message {
16631857
16641858 // Deprecated: Use CloseMergeRequestRequest.ProtoReflect.Descriptor instead.
16651859 func (*CloseMergeRequestRequest) Descriptor() ([]byte, []int) {
1666- return file_ermite_merge_request_proto_rawDescGZIP(), []int{17}
1860+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{18}
16671861 }
16681862
16691863 func (x *CloseMergeRequestRequest) GetRepo() string {
@@ -1691,7 +1885,7 @@ type CloseMergeRequestResponse struct {
16911885
16921886 func (x *CloseMergeRequestResponse) Reset() {
16931887 *x = CloseMergeRequestResponse{}
1694- mi := &file_ermite_merge_request_proto_msgTypes[18]
1888+ mi := &file_ermite_merge_request_proto_msgTypes[19]
16951889 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
16961890 ms.StoreMessageInfo(mi)
16971891 }
@@ -1703,7 +1897,7 @@ func (x *CloseMergeRequestResponse) String() string {
17031897 func (*CloseMergeRequestResponse) ProtoMessage() {}
17041898
17051899 func (x *CloseMergeRequestResponse) ProtoReflect() protoreflect.Message {
1706- mi := &file_ermite_merge_request_proto_msgTypes[18]
1900+ mi := &file_ermite_merge_request_proto_msgTypes[19]
17071901 if x != nil {
17081902 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
17091903 if ms.LoadMessageInfo() == nil {
@@ -1716,7 +1910,7 @@ func (x *CloseMergeRequestResponse) ProtoReflect() protoreflect.Message {
17161910
17171911 // Deprecated: Use CloseMergeRequestResponse.ProtoReflect.Descriptor instead.
17181912 func (*CloseMergeRequestResponse) Descriptor() ([]byte, []int) {
1719- return file_ermite_merge_request_proto_rawDescGZIP(), []int{18}
1913+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{19}
17201914 }
17211915
17221916 func (x *CloseMergeRequestResponse) GetMergeRequest() *MergeRequest {
@@ -1752,7 +1946,7 @@ type MergeMergeRequestRequest struct {
17521946
17531947 func (x *MergeMergeRequestRequest) Reset() {
17541948 *x = MergeMergeRequestRequest{}
1755- mi := &file_ermite_merge_request_proto_msgTypes[19]
1949+ mi := &file_ermite_merge_request_proto_msgTypes[20]
17561950 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
17571951 ms.StoreMessageInfo(mi)
17581952 }
@@ -1764,7 +1958,7 @@ func (x *MergeMergeRequestRequest) String() string {
17641958 func (*MergeMergeRequestRequest) ProtoMessage() {}
17651959
17661960 func (x *MergeMergeRequestRequest) ProtoReflect() protoreflect.Message {
1767- mi := &file_ermite_merge_request_proto_msgTypes[19]
1961+ mi := &file_ermite_merge_request_proto_msgTypes[20]
17681962 if x != nil {
17691963 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
17701964 if ms.LoadMessageInfo() == nil {
@@ -1777,7 +1971,7 @@ func (x *MergeMergeRequestRequest) ProtoReflect() protoreflect.Message {
17771971
17781972 // Deprecated: Use MergeMergeRequestRequest.ProtoReflect.Descriptor instead.
17791973 func (*MergeMergeRequestRequest) Descriptor() ([]byte, []int) {
1780- return file_ermite_merge_request_proto_rawDescGZIP(), []int{19}
1974+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{20}
17811975 }
17821976
17831977 func (x *MergeMergeRequestRequest) GetRepo() string {
@@ -1832,7 +2026,7 @@ type MergeMergeRequestResponse struct {
18322026
18332027 func (x *MergeMergeRequestResponse) Reset() {
18342028 *x = MergeMergeRequestResponse{}
1835- mi := &file_ermite_merge_request_proto_msgTypes[20]
2029+ mi := &file_ermite_merge_request_proto_msgTypes[21]
18362030 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
18372031 ms.StoreMessageInfo(mi)
18382032 }
@@ -1844,7 +2038,7 @@ func (x *MergeMergeRequestResponse) String() string {
18442038 func (*MergeMergeRequestResponse) ProtoMessage() {}
18452039
18462040 func (x *MergeMergeRequestResponse) ProtoReflect() protoreflect.Message {
1847- mi := &file_ermite_merge_request_proto_msgTypes[20]
2041+ mi := &file_ermite_merge_request_proto_msgTypes[21]
18482042 if x != nil {
18492043 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
18502044 if ms.LoadMessageInfo() == nil {
@@ -1857,7 +2051,7 @@ func (x *MergeMergeRequestResponse) ProtoReflect() protoreflect.Message {
18572051
18582052 // Deprecated: Use MergeMergeRequestResponse.ProtoReflect.Descriptor instead.
18592053 func (*MergeMergeRequestResponse) Descriptor() ([]byte, []int) {
1860- return file_ermite_merge_request_proto_rawDescGZIP(), []int{20}
2054+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{21}
18612055 }
18622056
18632057 func (x *MergeMergeRequestResponse) GetMergeRequest() *MergeRequest {
@@ -1891,7 +2085,7 @@ type MarkReadRequest struct {
18912085
18922086 func (x *MarkReadRequest) Reset() {
18932087 *x = MarkReadRequest{}
1894- mi := &file_ermite_merge_request_proto_msgTypes[21]
2088+ mi := &file_ermite_merge_request_proto_msgTypes[22]
18952089 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
18962090 ms.StoreMessageInfo(mi)
18972091 }
@@ -1903,7 +2097,7 @@ func (x *MarkReadRequest) String() string {
19032097 func (*MarkReadRequest) ProtoMessage() {}
19042098
19052099 func (x *MarkReadRequest) ProtoReflect() protoreflect.Message {
1906- mi := &file_ermite_merge_request_proto_msgTypes[21]
2100+ mi := &file_ermite_merge_request_proto_msgTypes[22]
19072101 if x != nil {
19082102 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
19092103 if ms.LoadMessageInfo() == nil {
@@ -1916,7 +2110,7 @@ func (x *MarkReadRequest) ProtoReflect() protoreflect.Message {
19162110
19172111 // Deprecated: Use MarkReadRequest.ProtoReflect.Descriptor instead.
19182112 func (*MarkReadRequest) Descriptor() ([]byte, []int) {
1919- return file_ermite_merge_request_proto_rawDescGZIP(), []int{21}
2113+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{22}
19202114 }
19212115
19222116 func (x *MarkReadRequest) GetRepo() string {
@@ -1949,7 +2143,7 @@ type MarkReadResponse struct {
19492143
19502144 func (x *MarkReadResponse) Reset() {
19512145 *x = MarkReadResponse{}
1952- mi := &file_ermite_merge_request_proto_msgTypes[22]
2146+ mi := &file_ermite_merge_request_proto_msgTypes[23]
19532147 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
19542148 ms.StoreMessageInfo(mi)
19552149 }
@@ -1961,7 +2155,7 @@ func (x *MarkReadResponse) String() string {
19612155 func (*MarkReadResponse) ProtoMessage() {}
19622156
19632157 func (x *MarkReadResponse) ProtoReflect() protoreflect.Message {
1964- mi := &file_ermite_merge_request_proto_msgTypes[22]
2158+ mi := &file_ermite_merge_request_proto_msgTypes[23]
19652159 if x != nil {
19662160 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
19672161 if ms.LoadMessageInfo() == nil {
@@ -1974,14 +2168,24 @@ func (x *MarkReadResponse) ProtoReflect() protoreflect.Message {
19742168
19752169 // Deprecated: Use MarkReadResponse.ProtoReflect.Descriptor instead.
19762170 func (*MarkReadResponse) Descriptor() ([]byte, []int) {
1977- return file_ermite_merge_request_proto_rawDescGZIP(), []int{22}
2171+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{23}
19782172 }
19792173
19802174 var File_ermite_merge_request_proto protoreflect.FileDescriptor
19812175
19822176 const file_ermite_merge_request_proto_rawDesc = "" +
19832177 "\n" +
1984- "\x1aermite/merge_request.proto\x12\x06ermite\x1a\x10ermite/git.proto\x1a\x12ermite/types.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xf0\x03\n" +
2178+ "\x1aermite/merge_request.proto\x12\x06ermite\x1a\x10ermite/git.proto\x1a\x12ermite/types.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xce\x02\n" +
2179+ "\fMergeability\x12/\n" +
2180+ "\x05state\x18\x01 \x01(\x0e2\x19.ermite.MergeabilityStateR\x05state\x12\x1b\n" +
2181+ "\ttarget_id\x18\x02 \x01(\tR\btargetId\x12\x17\n" +
2182+ "\ahead_id\x18\x03 \x01(\tR\x06headId\x12\x16\n" +
2183+ "\x06behind\x18\x04 \x01(\x05R\x06behind\x12#\n" +
2184+ "\rbehind_capped\x18\x05 \x01(\bR\fbehindCapped\x12%\n" +
2185+ "\x0econflict_paths\x18\x06 \x03(\tR\rconflictPaths\x128\n" +
2186+ "\x18conflict_paths_truncated\x18\a \x01(\bR\x16conflictPathsTruncated\x129\n" +
2187+ "\n" +
2188+ "checked_at\x18\b \x01(\v2\x1a.google.protobuf.TimestampR\tcheckedAt\"\xaa\x04\n" +
19852189 "\fMergeRequest\x12\x12\n" +
19862190 "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x16\n" +
19872191 "\x06number\x18\x02 \x01(\x03R\x06number\x12\x14\n" +
@@ -1999,7 +2203,8 @@ const file_ermite_merge_request_proto_rawDesc = "" +
19992203 "\ahead_id\x18\v \x01(\tR\x06headId\x12(\n" +
20002204 "\x10merged_commit_id\x18\f \x01(\tR\x0emergedCommitId\x120\n" +
20012205 "\n" +
2002- "merge_mode\x18\r \x01(\x0e2\x11.ermite.MergeModeR\tmergeMode\"\xbf\x03\n" +
2206+ "merge_mode\x18\r \x01(\x0e2\x11.ermite.MergeModeR\tmergeMode\x128\n" +
2207+ "\fmergeability\x18\x0e \x01(\v2\x14.ermite.MergeabilityR\fmergeability\"\xbf\x03\n" +
20032208 "\aComment\x12\x0e\n" +
20042209 "\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n" +
20052210 "\x06author\x18\x02 \x01(\tR\x06author\x12\x12\n" +
@@ -2129,7 +2334,13 @@ const file_ermite_merge_request_proto_rawDesc = "" +
21292334 "\aVerdict\x12\x17\n" +
21302335 "\x13VERDICT_UNSPECIFIED\x10\x00\x12\x13\n" +
21312336 "\x0fVERDICT_APPROVE\x10\x01\x12\x1d\n" +
2132- "\x19VERDICT_CHANGES_REQUESTED\x10\x022\xbf\x06\n" +
2337+ "\x19VERDICT_CHANGES_REQUESTED\x10\x02*\xbb\x01\n" +
2338+ "\x11MergeabilityState\x12\"\n" +
2339+ "\x1eMERGEABILITY_STATE_UNSPECIFIED\x10\x00\x12\x1f\n" +
2340+ "\x1bMERGEABILITY_STATE_CHECKING\x10\x01\x12!\n" +
2341+ "\x1dMERGEABILITY_STATE_UP_TO_DATE\x10\x02\x12\x1d\n" +
2342+ "\x19MERGEABILITY_STATE_BEHIND\x10\x03\x12\x1f\n" +
2343+ "\x1bMERGEABILITY_STATE_CONFLICT\x10\x042\xbf\x06\n" +
21332344 "\x13MergeRequestService\x12[\n" +
21342345 "\x12CreateMergeRequest\x12!.ermite.CreateMergeRequestRequest\x1a\".ermite.CreateMergeRequestResponse\x12X\n" +
21352346 "\x11ListMergeRequests\x12 .ermite.ListMergeRequestsRequest\x1a!.ermite.ListMergeRequestsResponse\x12R\n" +
@@ -2157,95 +2368,100 @@ func file_ermite_merge_request_proto_rawDescGZIP() []byte {
21572368 return file_ermite_merge_request_proto_rawDescData
21582369 }
21592370
2160-var file_ermite_merge_request_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
2161-var file_ermite_merge_request_proto_msgTypes = make([]protoimpl.MessageInfo, 23)
2371+var file_ermite_merge_request_proto_enumTypes = make([]protoimpl.EnumInfo, 4)
2372+var file_ermite_merge_request_proto_msgTypes = make([]protoimpl.MessageInfo, 24)
21622373 var file_ermite_merge_request_proto_goTypes = []any{
21632374 (MergeRequestState)(0), // 0: ermite.MergeRequestState
21642375 (DiffSide)(0), // 1: ermite.DiffSide
21652376 (Verdict)(0), // 2: ermite.Verdict
2166- (*MergeRequest)(nil), // 3: ermite.MergeRequest
2167- (*Comment)(nil), // 4: ermite.Comment
2168- (*AuthorVerdict)(nil), // 5: ermite.AuthorVerdict
2169- (*CreateMergeRequestRequest)(nil), // 6: ermite.CreateMergeRequestRequest
2170- (*CreateMergeRequestResponse)(nil), // 7: ermite.CreateMergeRequestResponse
2171- (*ListMergeRequestsRequest)(nil), // 8: ermite.ListMergeRequestsRequest
2172- (*ListMergeRequestsResponse)(nil), // 9: ermite.ListMergeRequestsResponse
2173- (*GetMergeRequestRequest)(nil), // 10: ermite.GetMergeRequestRequest
2174- (*GetMergeRequestResponse)(nil), // 11: ermite.GetMergeRequestResponse
2175- (*AddCommentRequest)(nil), // 12: ermite.AddCommentRequest
2176- (*AddCommentResponse)(nil), // 13: ermite.AddCommentResponse
2177- (*EditCommentRequest)(nil), // 14: ermite.EditCommentRequest
2178- (*EditCommentResponse)(nil), // 15: ermite.EditCommentResponse
2179- (*DeleteCommentRequest)(nil), // 16: ermite.DeleteCommentRequest
2180- (*DeleteCommentResponse)(nil), // 17: ermite.DeleteCommentResponse
2181- (*ResolveCommentRequest)(nil), // 18: ermite.ResolveCommentRequest
2182- (*ResolveCommentResponse)(nil), // 19: ermite.ResolveCommentResponse
2183- (*CloseMergeRequestRequest)(nil), // 20: ermite.CloseMergeRequestRequest
2184- (*CloseMergeRequestResponse)(nil), // 21: ermite.CloseMergeRequestResponse
2185- (*MergeMergeRequestRequest)(nil), // 22: ermite.MergeMergeRequestRequest
2186- (*MergeMergeRequestResponse)(nil), // 23: ermite.MergeMergeRequestResponse
2187- (*MarkReadRequest)(nil), // 24: ermite.MarkReadRequest
2188- (*MarkReadResponse)(nil), // 25: ermite.MarkReadResponse
2189- (*timestamppb.Timestamp)(nil), // 26: google.protobuf.Timestamp
2190- (MergeMode)(0), // 27: ermite.MergeMode
2191- (*Commit)(nil), // 28: ermite.Commit
2192- (*DiffStats)(nil), // 29: ermite.DiffStats
2193- (*Diff)(nil), // 30: ermite.Diff
2377+ (MergeabilityState)(0), // 3: ermite.MergeabilityState
2378+ (*Mergeability)(nil), // 4: ermite.Mergeability
2379+ (*MergeRequest)(nil), // 5: ermite.MergeRequest
2380+ (*Comment)(nil), // 6: ermite.Comment
2381+ (*AuthorVerdict)(nil), // 7: ermite.AuthorVerdict
2382+ (*CreateMergeRequestRequest)(nil), // 8: ermite.CreateMergeRequestRequest
2383+ (*CreateMergeRequestResponse)(nil), // 9: ermite.CreateMergeRequestResponse
2384+ (*ListMergeRequestsRequest)(nil), // 10: ermite.ListMergeRequestsRequest
2385+ (*ListMergeRequestsResponse)(nil), // 11: ermite.ListMergeRequestsResponse
2386+ (*GetMergeRequestRequest)(nil), // 12: ermite.GetMergeRequestRequest
2387+ (*GetMergeRequestResponse)(nil), // 13: ermite.GetMergeRequestResponse
2388+ (*AddCommentRequest)(nil), // 14: ermite.AddCommentRequest
2389+ (*AddCommentResponse)(nil), // 15: ermite.AddCommentResponse
2390+ (*EditCommentRequest)(nil), // 16: ermite.EditCommentRequest
2391+ (*EditCommentResponse)(nil), // 17: ermite.EditCommentResponse
2392+ (*DeleteCommentRequest)(nil), // 18: ermite.DeleteCommentRequest
2393+ (*DeleteCommentResponse)(nil), // 19: ermite.DeleteCommentResponse
2394+ (*ResolveCommentRequest)(nil), // 20: ermite.ResolveCommentRequest
2395+ (*ResolveCommentResponse)(nil), // 21: ermite.ResolveCommentResponse
2396+ (*CloseMergeRequestRequest)(nil), // 22: ermite.CloseMergeRequestRequest
2397+ (*CloseMergeRequestResponse)(nil), // 23: ermite.CloseMergeRequestResponse
2398+ (*MergeMergeRequestRequest)(nil), // 24: ermite.MergeMergeRequestRequest
2399+ (*MergeMergeRequestResponse)(nil), // 25: ermite.MergeMergeRequestResponse
2400+ (*MarkReadRequest)(nil), // 26: ermite.MarkReadRequest
2401+ (*MarkReadResponse)(nil), // 27: ermite.MarkReadResponse
2402+ (*timestamppb.Timestamp)(nil), // 28: google.protobuf.Timestamp
2403+ (MergeMode)(0), // 29: ermite.MergeMode
2404+ (*Commit)(nil), // 30: ermite.Commit
2405+ (*DiffStats)(nil), // 31: ermite.DiffStats
2406+ (*Diff)(nil), // 32: ermite.Diff
21942407 }
21952408 var file_ermite_merge_request_proto_depIdxs = []int32{
2196- 0, // 0: ermite.MergeRequest.state:type_name -> ermite.MergeRequestState
2197- 26, // 1: ermite.MergeRequest.created_at:type_name -> google.protobuf.Timestamp
2198- 26, // 2: ermite.MergeRequest.updated_at:type_name -> google.protobuf.Timestamp
2199- 27, // 3: ermite.MergeRequest.merge_mode:type_name -> ermite.MergeMode
2200- 1, // 4: ermite.Comment.side:type_name -> ermite.DiffSide
2201- 26, // 5: ermite.Comment.created_at:type_name -> google.protobuf.Timestamp
2202- 2, // 6: ermite.Comment.verdict:type_name -> ermite.Verdict
2203- 26, // 7: ermite.Comment.edited_at:type_name -> google.protobuf.Timestamp
2204- 2, // 8: ermite.AuthorVerdict.verdict:type_name -> ermite.Verdict
2205- 26, // 9: ermite.AuthorVerdict.created_at:type_name -> google.protobuf.Timestamp
2206- 3, // 10: ermite.CreateMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
2207- 0, // 11: ermite.ListMergeRequestsRequest.state:type_name -> ermite.MergeRequestState
2208- 3, // 12: ermite.ListMergeRequestsResponse.merge_requests:type_name -> ermite.MergeRequest
2209- 3, // 13: ermite.GetMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
2210- 28, // 14: ermite.GetMergeRequestResponse.commits:type_name -> ermite.Commit
2211- 29, // 15: ermite.GetMergeRequestResponse.stats:type_name -> ermite.DiffStats
2212- 30, // 16: ermite.GetMergeRequestResponse.diff:type_name -> ermite.Diff
2213- 4, // 17: ermite.GetMergeRequestResponse.comments:type_name -> ermite.Comment
2214- 5, // 18: ermite.GetMergeRequestResponse.verdicts:type_name -> ermite.AuthorVerdict
2215- 1, // 19: ermite.AddCommentRequest.side:type_name -> ermite.DiffSide
2216- 2, // 20: ermite.AddCommentRequest.verdict:type_name -> ermite.Verdict
2217- 4, // 21: ermite.AddCommentResponse.comment:type_name -> ermite.Comment
2218- 4, // 22: ermite.EditCommentResponse.comment:type_name -> ermite.Comment
2219- 4, // 23: ermite.DeleteCommentResponse.comment:type_name -> ermite.Comment
2220- 4, // 24: ermite.ResolveCommentResponse.comment:type_name -> ermite.Comment
2221- 3, // 25: ermite.CloseMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
2222- 27, // 26: ermite.MergeMergeRequestRequest.mode:type_name -> ermite.MergeMode
2223- 3, // 27: ermite.MergeMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
2224- 6, // 28: ermite.MergeRequestService.CreateMergeRequest:input_type -> ermite.CreateMergeRequestRequest
2225- 8, // 29: ermite.MergeRequestService.ListMergeRequests:input_type -> ermite.ListMergeRequestsRequest
2226- 10, // 30: ermite.MergeRequestService.GetMergeRequest:input_type -> ermite.GetMergeRequestRequest
2227- 12, // 31: ermite.MergeRequestService.AddComment:input_type -> ermite.AddCommentRequest
2228- 14, // 32: ermite.MergeRequestService.EditComment:input_type -> ermite.EditCommentRequest
2229- 16, // 33: ermite.MergeRequestService.DeleteComment:input_type -> ermite.DeleteCommentRequest
2230- 18, // 34: ermite.MergeRequestService.ResolveComment:input_type -> ermite.ResolveCommentRequest
2231- 20, // 35: ermite.MergeRequestService.CloseMergeRequest:input_type -> ermite.CloseMergeRequestRequest
2232- 22, // 36: ermite.MergeRequestService.MergeMergeRequest:input_type -> ermite.MergeMergeRequestRequest
2233- 24, // 37: ermite.MergeRequestService.MarkRead:input_type -> ermite.MarkReadRequest
2234- 7, // 38: ermite.MergeRequestService.CreateMergeRequest:output_type -> ermite.CreateMergeRequestResponse
2235- 9, // 39: ermite.MergeRequestService.ListMergeRequests:output_type -> ermite.ListMergeRequestsResponse
2236- 11, // 40: ermite.MergeRequestService.GetMergeRequest:output_type -> ermite.GetMergeRequestResponse
2237- 13, // 41: ermite.MergeRequestService.AddComment:output_type -> ermite.AddCommentResponse
2238- 15, // 42: ermite.MergeRequestService.EditComment:output_type -> ermite.EditCommentResponse
2239- 17, // 43: ermite.MergeRequestService.DeleteComment:output_type -> ermite.DeleteCommentResponse
2240- 19, // 44: ermite.MergeRequestService.ResolveComment:output_type -> ermite.ResolveCommentResponse
2241- 21, // 45: ermite.MergeRequestService.CloseMergeRequest:output_type -> ermite.CloseMergeRequestResponse
2242- 23, // 46: ermite.MergeRequestService.MergeMergeRequest:output_type -> ermite.MergeMergeRequestResponse
2243- 25, // 47: ermite.MergeRequestService.MarkRead:output_type -> ermite.MarkReadResponse
2244- 38, // [38:48] is the sub-list for method output_type
2245- 28, // [28:38] is the sub-list for method input_type
2246- 28, // [28:28] is the sub-list for extension type_name
2247- 28, // [28:28] is the sub-list for extension extendee
2248- 0, // [0:28] is the sub-list for field type_name
2409+ 3, // 0: ermite.Mergeability.state:type_name -> ermite.MergeabilityState
2410+ 28, // 1: ermite.Mergeability.checked_at:type_name -> google.protobuf.Timestamp
2411+ 0, // 2: ermite.MergeRequest.state:type_name -> ermite.MergeRequestState
2412+ 28, // 3: ermite.MergeRequest.created_at:type_name -> google.protobuf.Timestamp
2413+ 28, // 4: ermite.MergeRequest.updated_at:type_name -> google.protobuf.Timestamp
2414+ 29, // 5: ermite.MergeRequest.merge_mode:type_name -> ermite.MergeMode
2415+ 4, // 6: ermite.MergeRequest.mergeability:type_name -> ermite.Mergeability
2416+ 1, // 7: ermite.Comment.side:type_name -> ermite.DiffSide
2417+ 28, // 8: ermite.Comment.created_at:type_name -> google.protobuf.Timestamp
2418+ 2, // 9: ermite.Comment.verdict:type_name -> ermite.Verdict
2419+ 28, // 10: ermite.Comment.edited_at:type_name -> google.protobuf.Timestamp
2420+ 2, // 11: ermite.AuthorVerdict.verdict:type_name -> ermite.Verdict
2421+ 28, // 12: ermite.AuthorVerdict.created_at:type_name -> google.protobuf.Timestamp
2422+ 5, // 13: ermite.CreateMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
2423+ 0, // 14: ermite.ListMergeRequestsRequest.state:type_name -> ermite.MergeRequestState
2424+ 5, // 15: ermite.ListMergeRequestsResponse.merge_requests:type_name -> ermite.MergeRequest
2425+ 5, // 16: ermite.GetMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
2426+ 30, // 17: ermite.GetMergeRequestResponse.commits:type_name -> ermite.Commit
2427+ 31, // 18: ermite.GetMergeRequestResponse.stats:type_name -> ermite.DiffStats
2428+ 32, // 19: ermite.GetMergeRequestResponse.diff:type_name -> ermite.Diff
2429+ 6, // 20: ermite.GetMergeRequestResponse.comments:type_name -> ermite.Comment
2430+ 7, // 21: ermite.GetMergeRequestResponse.verdicts:type_name -> ermite.AuthorVerdict
2431+ 1, // 22: ermite.AddCommentRequest.side:type_name -> ermite.DiffSide
2432+ 2, // 23: ermite.AddCommentRequest.verdict:type_name -> ermite.Verdict
2433+ 6, // 24: ermite.AddCommentResponse.comment:type_name -> ermite.Comment
2434+ 6, // 25: ermite.EditCommentResponse.comment:type_name -> ermite.Comment
2435+ 6, // 26: ermite.DeleteCommentResponse.comment:type_name -> ermite.Comment
2436+ 6, // 27: ermite.ResolveCommentResponse.comment:type_name -> ermite.Comment
2437+ 5, // 28: ermite.CloseMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
2438+ 29, // 29: ermite.MergeMergeRequestRequest.mode:type_name -> ermite.MergeMode
2439+ 5, // 30: ermite.MergeMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
2440+ 8, // 31: ermite.MergeRequestService.CreateMergeRequest:input_type -> ermite.CreateMergeRequestRequest
2441+ 10, // 32: ermite.MergeRequestService.ListMergeRequests:input_type -> ermite.ListMergeRequestsRequest
2442+ 12, // 33: ermite.MergeRequestService.GetMergeRequest:input_type -> ermite.GetMergeRequestRequest
2443+ 14, // 34: ermite.MergeRequestService.AddComment:input_type -> ermite.AddCommentRequest
2444+ 16, // 35: ermite.MergeRequestService.EditComment:input_type -> ermite.EditCommentRequest
2445+ 18, // 36: ermite.MergeRequestService.DeleteComment:input_type -> ermite.DeleteCommentRequest
2446+ 20, // 37: ermite.MergeRequestService.ResolveComment:input_type -> ermite.ResolveCommentRequest
2447+ 22, // 38: ermite.MergeRequestService.CloseMergeRequest:input_type -> ermite.CloseMergeRequestRequest
2448+ 24, // 39: ermite.MergeRequestService.MergeMergeRequest:input_type -> ermite.MergeMergeRequestRequest
2449+ 26, // 40: ermite.MergeRequestService.MarkRead:input_type -> ermite.MarkReadRequest
2450+ 9, // 41: ermite.MergeRequestService.CreateMergeRequest:output_type -> ermite.CreateMergeRequestResponse
2451+ 11, // 42: ermite.MergeRequestService.ListMergeRequests:output_type -> ermite.ListMergeRequestsResponse
2452+ 13, // 43: ermite.MergeRequestService.GetMergeRequest:output_type -> ermite.GetMergeRequestResponse
2453+ 15, // 44: ermite.MergeRequestService.AddComment:output_type -> ermite.AddCommentResponse
2454+ 17, // 45: ermite.MergeRequestService.EditComment:output_type -> ermite.EditCommentResponse
2455+ 19, // 46: ermite.MergeRequestService.DeleteComment:output_type -> ermite.DeleteCommentResponse
2456+ 21, // 47: ermite.MergeRequestService.ResolveComment:output_type -> ermite.ResolveCommentResponse
2457+ 23, // 48: ermite.MergeRequestService.CloseMergeRequest:output_type -> ermite.CloseMergeRequestResponse
2458+ 25, // 49: ermite.MergeRequestService.MergeMergeRequest:output_type -> ermite.MergeMergeRequestResponse
2459+ 27, // 50: ermite.MergeRequestService.MarkRead:output_type -> ermite.MarkReadResponse
2460+ 41, // [41:51] is the sub-list for method output_type
2461+ 31, // [31:41] is the sub-list for method input_type
2462+ 31, // [31:31] is the sub-list for extension type_name
2463+ 31, // [31:31] is the sub-list for extension extendee
2464+ 0, // [0:31] is the sub-list for field type_name
22492465 }
22502466
22512467 func init() { file_ermite_merge_request_proto_init() }
@@ -2260,8 +2476,8 @@ func file_ermite_merge_request_proto_init() {
22602476 File: protoimpl.DescBuilder{
22612477 GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
22622478 RawDescriptor: unsafe.Slice(unsafe.StringData(file_ermite_merge_request_proto_rawDesc), len(file_ermite_merge_request_proto_rawDesc)),
2263- NumEnums: 3,
2264- NumMessages: 23,
2479+ NumEnums: 4,
2480+ NumMessages: 24,
22652481 NumExtensions: 0,
22662482 NumServices: 1,
22672483 },
@@ -191,6 +191,186 @@ func (Verdict) EnumDescriptor() ([]byte, []int) {
191 return file_ermite_merge_request_proto_rawDescGZIP(), []int{2}191 return file_ermite_merge_request_proto_rawDescGZIP(), []int{2}
192 }192 }
193 193
194+// MergeabilityState tells whether the head of an open merge request can be
195+// merged into its target.
196+type MergeabilityState int32
197+
198+const (
199+ // Not set.
200+ MergeabilityState_MERGEABILITY_STATE_UNSPECIFIED MergeabilityState = 0
201+ // The server has no result yet for the current tips of both branches. It
202+ // is replaced by another state when the check completes.
203+ MergeabilityState_MERGEABILITY_STATE_CHECKING MergeabilityState = 1
204+ // The target is an ancestor of the head: every mode can merge.
205+ MergeabilityState_MERGEABILITY_STATE_UP_TO_DATE MergeabilityState = 2
206+ // The target has commits the head lacks, but the head merges cleanly:
207+ // squash and merge commit can merge, fast-forward cannot.
208+ MergeabilityState_MERGEABILITY_STATE_BEHIND MergeabilityState = 3
209+ // The head does not merge cleanly into the target, or the branches share no
210+ // history: no mode can merge.
211+ MergeabilityState_MERGEABILITY_STATE_CONFLICT MergeabilityState = 4
212+)
213+
214+// Enum value maps for MergeabilityState.
215+var (
216+ MergeabilityState_name = map[int32]string{
217+ 0: "MERGEABILITY_STATE_UNSPECIFIED",
218+ 1: "MERGEABILITY_STATE_CHECKING",
219+ 2: "MERGEABILITY_STATE_UP_TO_DATE",
220+ 3: "MERGEABILITY_STATE_BEHIND",
221+ 4: "MERGEABILITY_STATE_CONFLICT",
222+ }
223+ MergeabilityState_value = map[string]int32{
224+ "MERGEABILITY_STATE_UNSPECIFIED": 0,
225+ "MERGEABILITY_STATE_CHECKING": 1,
226+ "MERGEABILITY_STATE_UP_TO_DATE": 2,
227+ "MERGEABILITY_STATE_BEHIND": 3,
228+ "MERGEABILITY_STATE_CONFLICT": 4,
229+ }
230+)
231+
232+func (x MergeabilityState) Enum() *MergeabilityState {
233+ p := new(MergeabilityState)
234+ *p = x
235+ return p
236+}
237+
238+func (x MergeabilityState) String() string {
239+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
240+}
241+
242+func (MergeabilityState) Descriptor() protoreflect.EnumDescriptor {
243+ return file_ermite_merge_request_proto_enumTypes[3].Descriptor()
244+}
245+
246+func (MergeabilityState) Type() protoreflect.EnumType {
247+ return &file_ermite_merge_request_proto_enumTypes[3]
248+}
249+
250+func (x MergeabilityState) Number() protoreflect.EnumNumber {
251+ return protoreflect.EnumNumber(x)
252+}
253+
254+// Deprecated: Use MergeabilityState.Descriptor instead.
255+func (MergeabilityState) EnumDescriptor() ([]byte, []int) {
256+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{3}
257+}
258+
259+// Mergeability is the result of checking an open merge request against the
260+// tips of its branches.
261+type Mergeability struct {
262+ state protoimpl.MessageState `protogen:"open.v1"`
263+ // State is the result.
264+ State MergeabilityState `protobuf:"varint,1,opt,name=state,proto3,enum=ermite.MergeabilityState" json:"state,omitempty"`
265+ // TargetId is the commit the target branch pointed to when checked. Empty
266+ // while CHECKING.
267+ TargetId string `protobuf:"bytes,2,opt,name=target_id,json=targetId,proto3" json:"target_id,omitempty"`
268+ // HeadId is the commit the source branch pointed to when checked. Empty
269+ // while CHECKING.
270+ HeadId string `protobuf:"bytes,3,opt,name=head_id,json=headId,proto3" json:"head_id,omitempty"`
271+ // Behind is the number of commits of the target that the head lacks. Set
272+ // only when state is BEHIND.
273+ Behind int32 `protobuf:"varint,4,opt,name=behind,proto3" json:"behind,omitempty"`
274+ // BehindCapped says that Behind is a lower bound: the server stops counting
275+ // at 1,000.
276+ BehindCapped bool `protobuf:"varint,5,opt,name=behind_capped,json=behindCapped,proto3" json:"behind_capped,omitempty"`
277+ // ConflictPaths are the paths that conflict, at most 20. Set only when
278+ // state is CONFLICT; empty when the branches share no history.
279+ ConflictPaths []string `protobuf:"bytes,6,rep,name=conflict_paths,json=conflictPaths,proto3" json:"conflict_paths,omitempty"`
280+ // ConflictPathsTruncated says that more paths conflict than listed.
281+ ConflictPathsTruncated bool `protobuf:"varint,7,opt,name=conflict_paths_truncated,json=conflictPathsTruncated,proto3" json:"conflict_paths_truncated,omitempty"`
282+ // CheckedAt is when the server computed the result. Unset while CHECKING.
283+ CheckedAt *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=checked_at,json=checkedAt,proto3" json:"checked_at,omitempty"`
284+ unknownFields protoimpl.UnknownFields
285+ sizeCache protoimpl.SizeCache
286+}
287+
288+func (x *Mergeability) Reset() {
289+ *x = Mergeability{}
290+ mi := &file_ermite_merge_request_proto_msgTypes[0]
291+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
292+ ms.StoreMessageInfo(mi)
293+}
294+
295+func (x *Mergeability) String() string {
296+ return protoimpl.X.MessageStringOf(x)
297+}
298+
299+func (*Mergeability) ProtoMessage() {}
300+
301+func (x *Mergeability) ProtoReflect() protoreflect.Message {
302+ mi := &file_ermite_merge_request_proto_msgTypes[0]
303+ if x != nil {
304+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
305+ if ms.LoadMessageInfo() == nil {
306+ ms.StoreMessageInfo(mi)
307+ }
308+ return ms
309+ }
310+ return mi.MessageOf(x)
311+}
312+
313+// Deprecated: Use Mergeability.ProtoReflect.Descriptor instead.
314+func (*Mergeability) Descriptor() ([]byte, []int) {
315+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{0}
316+}
317+
318+func (x *Mergeability) GetState() MergeabilityState {
319+ if x != nil {
320+ return x.State
321+ }
322+ return MergeabilityState_MERGEABILITY_STATE_UNSPECIFIED
323+}
324+
325+func (x *Mergeability) GetTargetId() string {
326+ if x != nil {
327+ return x.TargetId
328+ }
329+ return ""
330+}
331+
332+func (x *Mergeability) GetHeadId() string {
333+ if x != nil {
334+ return x.HeadId
335+ }
336+ return ""
337+}
338+
339+func (x *Mergeability) GetBehind() int32 {
340+ if x != nil {
341+ return x.Behind
342+ }
343+ return 0
344+}
345+
346+func (x *Mergeability) GetBehindCapped() bool {
347+ if x != nil {
348+ return x.BehindCapped
349+ }
350+ return false
351+}
352+
353+func (x *Mergeability) GetConflictPaths() []string {
354+ if x != nil {
355+ return x.ConflictPaths
356+ }
357+ return nil
358+}
359+
360+func (x *Mergeability) GetConflictPathsTruncated() bool {
361+ if x != nil {
362+ return x.ConflictPathsTruncated
363+ }
364+ return false
365+}
366+
367+func (x *Mergeability) GetCheckedAt() *timestamppb.Timestamp {
368+ if x != nil {
369+ return x.CheckedAt
370+ }
371+ return nil
372+}
373+
194 // MergeRequest asks to merge one branch of a repository into another branch374 // MergeRequest asks to merge one branch of a repository into another branch
195 // of the same repository. It is about a branch, not about who wrote it.375 // of the same repository. It is about a branch, not about who wrote it.
196 type MergeRequest struct {376 type MergeRequest struct {
@@ -229,19 +409,26 @@ type MergeRequest struct {
229 // merged or closed it is the head at that moment.409 // merged or closed it is the head at that moment.
230 HeadId string `protobuf:"bytes,11,opt,name=head_id,json=headId,proto3" json:"head_id,omitempty"`410 HeadId string `protobuf:"bytes,11,opt,name=head_id,json=headId,proto3" json:"head_id,omitempty"`
231 // MergedCommitId is the id of the commit the target branch points to after411 // MergedCommitId is the id of the commit the target branch points to after
232- // the merge: the head for a fast-forward, the new commit for a squash.412+ // the merge: the head for a fast-forward, the new commit for a squash or a
413+ // merge commit.
233 // Empty unless state is MERGED.414 // Empty unless state is MERGED.
234 MergedCommitId string `protobuf:"bytes,12,opt,name=merged_commit_id,json=mergedCommitId,proto3" json:"merged_commit_id,omitempty"`415 MergedCommitId string `protobuf:"bytes,12,opt,name=merged_commit_id,json=mergedCommitId,proto3" json:"merged_commit_id,omitempty"`
235 // MergeMode is how the merge request was merged. MERGE_MODE_UNSPECIFIED416 // MergeMode is how the merge request was merged. MERGE_MODE_UNSPECIFIED
236 // unless state is MERGED.417 // unless state is MERGED.
237- MergeMode MergeMode `protobuf:"varint,13,opt,name=merge_mode,json=mergeMode,proto3,enum=ermite.MergeMode" json:"merge_mode,omitempty"`418+ MergeMode MergeMode `protobuf:"varint,13,opt,name=merge_mode,json=mergeMode,proto3,enum=ermite.MergeMode" json:"merge_mode,omitempty"`
419+ // Mergeability tells whether the head can be merged into the target. Set
420+ // while the merge request is OPEN, with state CHECKING until the server has
421+ // a result for the current tips; never set once merged or closed. It is a
422+ // hint: MergeMergeRequest checks again. Set only by servers with the
423+ // "merge_requests.mergeability" feature.
424+ Mergeability *Mergeability `protobuf:"bytes,14,opt,name=mergeability,proto3" json:"mergeability,omitempty"`
238 unknownFields protoimpl.UnknownFields425 unknownFields protoimpl.UnknownFields
239 sizeCache protoimpl.SizeCache426 sizeCache protoimpl.SizeCache
240 }427 }
241 428
242 func (x *MergeRequest) Reset() {429 func (x *MergeRequest) Reset() {
243 *x = MergeRequest{}430 *x = MergeRequest{}
244- mi := &file_ermite_merge_request_proto_msgTypes[0]431+ mi := &file_ermite_merge_request_proto_msgTypes[1]
245 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))432 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
246 ms.StoreMessageInfo(mi)433 ms.StoreMessageInfo(mi)
247 }434 }
@@ -253,7 +440,7 @@ func (x *MergeRequest) String() string {
253 func (*MergeRequest) ProtoMessage() {}440 func (*MergeRequest) ProtoMessage() {}
254 441
255 func (x *MergeRequest) ProtoReflect() protoreflect.Message {442 func (x *MergeRequest) ProtoReflect() protoreflect.Message {
256- mi := &file_ermite_merge_request_proto_msgTypes[0]443+ mi := &file_ermite_merge_request_proto_msgTypes[1]
257 if x != nil {444 if x != nil {
258 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))445 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
259 if ms.LoadMessageInfo() == nil {446 if ms.LoadMessageInfo() == nil {
@@ -266,7 +453,7 @@ func (x *MergeRequest) ProtoReflect() protoreflect.Message {
266 453
267 // Deprecated: Use MergeRequest.ProtoReflect.Descriptor instead.454 // Deprecated: Use MergeRequest.ProtoReflect.Descriptor instead.
268 func (*MergeRequest) Descriptor() ([]byte, []int) {455 func (*MergeRequest) Descriptor() ([]byte, []int) {
269- return file_ermite_merge_request_proto_rawDescGZIP(), []int{0}456+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{1}
270 }457 }
271 458
272 func (x *MergeRequest) GetRepo() string {459 func (x *MergeRequest) GetRepo() string {
@@ -360,6 +547,13 @@ func (x *MergeRequest) GetMergeMode() MergeMode {
360 return MergeMode_MERGE_MODE_UNSPECIFIED547 return MergeMode_MERGE_MODE_UNSPECIFIED
361 }548 }
362 549
550+func (x *MergeRequest) GetMergeability() *Mergeability {
551+ if x != nil {
552+ return x.Mergeability
553+ }
554+ return nil
555+}
556+
363 // Comment is a note on a merge request, either general or attached to a line557 // Comment is a note on a merge request, either general or attached to a line
364 // of its diff.558 // of its diff.
365 type Comment struct {559 type Comment struct {
@@ -412,7 +606,7 @@ type Comment struct {
412 606
413 func (x *Comment) Reset() {607 func (x *Comment) Reset() {
414 *x = Comment{}608 *x = Comment{}
415- mi := &file_ermite_merge_request_proto_msgTypes[1]609+ mi := &file_ermite_merge_request_proto_msgTypes[2]
416 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))610 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
417 ms.StoreMessageInfo(mi)611 ms.StoreMessageInfo(mi)
418 }612 }
@@ -424,7 +618,7 @@ func (x *Comment) String() string {
424 func (*Comment) ProtoMessage() {}618 func (*Comment) ProtoMessage() {}
425 619
426 func (x *Comment) ProtoReflect() protoreflect.Message {620 func (x *Comment) ProtoReflect() protoreflect.Message {
427- mi := &file_ermite_merge_request_proto_msgTypes[1]621+ mi := &file_ermite_merge_request_proto_msgTypes[2]
428 if x != nil {622 if x != nil {
429 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))623 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
430 if ms.LoadMessageInfo() == nil {624 if ms.LoadMessageInfo() == nil {
@@ -437,7 +631,7 @@ func (x *Comment) ProtoReflect() protoreflect.Message {
437 631
438 // Deprecated: Use Comment.ProtoReflect.Descriptor instead.632 // Deprecated: Use Comment.ProtoReflect.Descriptor instead.
439 func (*Comment) Descriptor() ([]byte, []int) {633 func (*Comment) Descriptor() ([]byte, []int) {
440- return file_ermite_merge_request_proto_rawDescGZIP(), []int{1}634+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{2}
441 }635 }
442 636
443 func (x *Comment) GetId() string {637 func (x *Comment) GetId() string {
@@ -561,7 +755,7 @@ type AuthorVerdict struct {
561 755
562 func (x *AuthorVerdict) Reset() {756 func (x *AuthorVerdict) Reset() {
563 *x = AuthorVerdict{}757 *x = AuthorVerdict{}
564- mi := &file_ermite_merge_request_proto_msgTypes[2]758+ mi := &file_ermite_merge_request_proto_msgTypes[3]
565 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))759 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
566 ms.StoreMessageInfo(mi)760 ms.StoreMessageInfo(mi)
567 }761 }
@@ -573,7 +767,7 @@ func (x *AuthorVerdict) String() string {
573 func (*AuthorVerdict) ProtoMessage() {}767 func (*AuthorVerdict) ProtoMessage() {}
574 768
575 func (x *AuthorVerdict) ProtoReflect() protoreflect.Message {769 func (x *AuthorVerdict) ProtoReflect() protoreflect.Message {
576- mi := &file_ermite_merge_request_proto_msgTypes[2]770+ mi := &file_ermite_merge_request_proto_msgTypes[3]
577 if x != nil {771 if x != nil {
578 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))772 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
579 if ms.LoadMessageInfo() == nil {773 if ms.LoadMessageInfo() == nil {
@@ -586,7 +780,7 @@ func (x *AuthorVerdict) ProtoReflect() protoreflect.Message {
586 780
587 // Deprecated: Use AuthorVerdict.ProtoReflect.Descriptor instead.781 // Deprecated: Use AuthorVerdict.ProtoReflect.Descriptor instead.
588 func (*AuthorVerdict) Descriptor() ([]byte, []int) {782 func (*AuthorVerdict) Descriptor() ([]byte, []int) {
589- return file_ermite_merge_request_proto_rawDescGZIP(), []int{2}783+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{3}
590 }784 }
591 785
592 func (x *AuthorVerdict) GetAuthor() string {786 func (x *AuthorVerdict) GetAuthor() string {
@@ -653,7 +847,7 @@ type CreateMergeRequestRequest struct {
653 847
654 func (x *CreateMergeRequestRequest) Reset() {848 func (x *CreateMergeRequestRequest) Reset() {
655 *x = CreateMergeRequestRequest{}849 *x = CreateMergeRequestRequest{}
656- mi := &file_ermite_merge_request_proto_msgTypes[3]850+ mi := &file_ermite_merge_request_proto_msgTypes[4]
657 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))851 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
658 ms.StoreMessageInfo(mi)852 ms.StoreMessageInfo(mi)
659 }853 }
@@ -665,7 +859,7 @@ func (x *CreateMergeRequestRequest) String() string {
665 func (*CreateMergeRequestRequest) ProtoMessage() {}859 func (*CreateMergeRequestRequest) ProtoMessage() {}
666 860
667 func (x *CreateMergeRequestRequest) ProtoReflect() protoreflect.Message {861 func (x *CreateMergeRequestRequest) ProtoReflect() protoreflect.Message {
668- mi := &file_ermite_merge_request_proto_msgTypes[3]862+ mi := &file_ermite_merge_request_proto_msgTypes[4]
669 if x != nil {863 if x != nil {
670 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))864 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
671 if ms.LoadMessageInfo() == nil {865 if ms.LoadMessageInfo() == nil {
@@ -678,7 +872,7 @@ func (x *CreateMergeRequestRequest) ProtoReflect() protoreflect.Message {
678 872
679 // Deprecated: Use CreateMergeRequestRequest.ProtoReflect.Descriptor instead.873 // Deprecated: Use CreateMergeRequestRequest.ProtoReflect.Descriptor instead.
680 func (*CreateMergeRequestRequest) Descriptor() ([]byte, []int) {874 func (*CreateMergeRequestRequest) Descriptor() ([]byte, []int) {
681- return file_ermite_merge_request_proto_rawDescGZIP(), []int{3}875+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{4}
682 }876 }
683 877
684 func (x *CreateMergeRequestRequest) GetRepo() string {878 func (x *CreateMergeRequestRequest) GetRepo() string {
@@ -727,7 +921,7 @@ type CreateMergeRequestResponse struct {
727 921
728 func (x *CreateMergeRequestResponse) Reset() {922 func (x *CreateMergeRequestResponse) Reset() {
729 *x = CreateMergeRequestResponse{}923 *x = CreateMergeRequestResponse{}
730- mi := &file_ermite_merge_request_proto_msgTypes[4]924+ mi := &file_ermite_merge_request_proto_msgTypes[5]
731 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))925 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
732 ms.StoreMessageInfo(mi)926 ms.StoreMessageInfo(mi)
733 }927 }
@@ -739,7 +933,7 @@ func (x *CreateMergeRequestResponse) String() string {
739 func (*CreateMergeRequestResponse) ProtoMessage() {}933 func (*CreateMergeRequestResponse) ProtoMessage() {}
740 934
741 func (x *CreateMergeRequestResponse) ProtoReflect() protoreflect.Message {935 func (x *CreateMergeRequestResponse) ProtoReflect() protoreflect.Message {
742- mi := &file_ermite_merge_request_proto_msgTypes[4]936+ mi := &file_ermite_merge_request_proto_msgTypes[5]
743 if x != nil {937 if x != nil {
744 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))938 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
745 if ms.LoadMessageInfo() == nil {939 if ms.LoadMessageInfo() == nil {
@@ -752,7 +946,7 @@ func (x *CreateMergeRequestResponse) ProtoReflect() protoreflect.Message {
752 946
753 // Deprecated: Use CreateMergeRequestResponse.ProtoReflect.Descriptor instead.947 // Deprecated: Use CreateMergeRequestResponse.ProtoReflect.Descriptor instead.
754 func (*CreateMergeRequestResponse) Descriptor() ([]byte, []int) {948 func (*CreateMergeRequestResponse) Descriptor() ([]byte, []int) {
755- return file_ermite_merge_request_proto_rawDescGZIP(), []int{4}949+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{5}
756 }950 }
757 951
758 func (x *CreateMergeRequestResponse) GetMergeRequest() *MergeRequest {952 func (x *CreateMergeRequestResponse) GetMergeRequest() *MergeRequest {
@@ -782,7 +976,7 @@ type ListMergeRequestsRequest struct {
782 976
783 func (x *ListMergeRequestsRequest) Reset() {977 func (x *ListMergeRequestsRequest) Reset() {
784 *x = ListMergeRequestsRequest{}978 *x = ListMergeRequestsRequest{}
785- mi := &file_ermite_merge_request_proto_msgTypes[5]979+ mi := &file_ermite_merge_request_proto_msgTypes[6]
786 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))980 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
787 ms.StoreMessageInfo(mi)981 ms.StoreMessageInfo(mi)
788 }982 }
@@ -794,7 +988,7 @@ func (x *ListMergeRequestsRequest) String() string {
794 func (*ListMergeRequestsRequest) ProtoMessage() {}988 func (*ListMergeRequestsRequest) ProtoMessage() {}
795 989
796 func (x *ListMergeRequestsRequest) ProtoReflect() protoreflect.Message {990 func (x *ListMergeRequestsRequest) ProtoReflect() protoreflect.Message {
797- mi := &file_ermite_merge_request_proto_msgTypes[5]991+ mi := &file_ermite_merge_request_proto_msgTypes[6]
798 if x != nil {992 if x != nil {
799 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))993 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
800 if ms.LoadMessageInfo() == nil {994 if ms.LoadMessageInfo() == nil {
@@ -807,7 +1001,7 @@ func (x *ListMergeRequestsRequest) ProtoReflect() protoreflect.Message {
807 1001
808 // Deprecated: Use ListMergeRequestsRequest.ProtoReflect.Descriptor instead.1002 // Deprecated: Use ListMergeRequestsRequest.ProtoReflect.Descriptor instead.
809 func (*ListMergeRequestsRequest) Descriptor() ([]byte, []int) {1003 func (*ListMergeRequestsRequest) Descriptor() ([]byte, []int) {
810- return file_ermite_merge_request_proto_rawDescGZIP(), []int{5}1004+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{6}
811 }1005 }
812 1006
813 func (x *ListMergeRequestsRequest) GetRepo() string {1007 func (x *ListMergeRequestsRequest) GetRepo() string {
@@ -852,7 +1046,7 @@ type ListMergeRequestsResponse struct {
852 1046
853 func (x *ListMergeRequestsResponse) Reset() {1047 func (x *ListMergeRequestsResponse) Reset() {
854 *x = ListMergeRequestsResponse{}1048 *x = ListMergeRequestsResponse{}
855- mi := &file_ermite_merge_request_proto_msgTypes[6]1049+ mi := &file_ermite_merge_request_proto_msgTypes[7]
856 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1050 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
857 ms.StoreMessageInfo(mi)1051 ms.StoreMessageInfo(mi)
858 }1052 }
@@ -864,7 +1058,7 @@ func (x *ListMergeRequestsResponse) String() string {
864 func (*ListMergeRequestsResponse) ProtoMessage() {}1058 func (*ListMergeRequestsResponse) ProtoMessage() {}
865 1059
866 func (x *ListMergeRequestsResponse) ProtoReflect() protoreflect.Message {1060 func (x *ListMergeRequestsResponse) ProtoReflect() protoreflect.Message {
867- mi := &file_ermite_merge_request_proto_msgTypes[6]1061+ mi := &file_ermite_merge_request_proto_msgTypes[7]
868 if x != nil {1062 if x != nil {
869 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1063 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
870 if ms.LoadMessageInfo() == nil {1064 if ms.LoadMessageInfo() == nil {
@@ -877,7 +1071,7 @@ func (x *ListMergeRequestsResponse) ProtoReflect() protoreflect.Message {
877 1071
878 // Deprecated: Use ListMergeRequestsResponse.ProtoReflect.Descriptor instead.1072 // Deprecated: Use ListMergeRequestsResponse.ProtoReflect.Descriptor instead.
879 func (*ListMergeRequestsResponse) Descriptor() ([]byte, []int) {1073 func (*ListMergeRequestsResponse) Descriptor() ([]byte, []int) {
880- return file_ermite_merge_request_proto_rawDescGZIP(), []int{6}1074+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{7}
881 }1075 }
882 1076
883 func (x *ListMergeRequestsResponse) GetMergeRequests() []*MergeRequest {1077 func (x *ListMergeRequestsResponse) GetMergeRequests() []*MergeRequest {
@@ -914,7 +1108,7 @@ type GetMergeRequestRequest struct {
914 1108
915 func (x *GetMergeRequestRequest) Reset() {1109 func (x *GetMergeRequestRequest) Reset() {
916 *x = GetMergeRequestRequest{}1110 *x = GetMergeRequestRequest{}
917- mi := &file_ermite_merge_request_proto_msgTypes[7]1111+ mi := &file_ermite_merge_request_proto_msgTypes[8]
918 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1112 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
919 ms.StoreMessageInfo(mi)1113 ms.StoreMessageInfo(mi)
920 }1114 }
@@ -926,7 +1120,7 @@ func (x *GetMergeRequestRequest) String() string {
926 func (*GetMergeRequestRequest) ProtoMessage() {}1120 func (*GetMergeRequestRequest) ProtoMessage() {}
927 1121
928 func (x *GetMergeRequestRequest) ProtoReflect() protoreflect.Message {1122 func (x *GetMergeRequestRequest) ProtoReflect() protoreflect.Message {
929- mi := &file_ermite_merge_request_proto_msgTypes[7]1123+ mi := &file_ermite_merge_request_proto_msgTypes[8]
930 if x != nil {1124 if x != nil {
931 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1125 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
932 if ms.LoadMessageInfo() == nil {1126 if ms.LoadMessageInfo() == nil {
@@ -939,7 +1133,7 @@ func (x *GetMergeRequestRequest) ProtoReflect() protoreflect.Message {
939 1133
940 // Deprecated: Use GetMergeRequestRequest.ProtoReflect.Descriptor instead.1134 // Deprecated: Use GetMergeRequestRequest.ProtoReflect.Descriptor instead.
941 func (*GetMergeRequestRequest) Descriptor() ([]byte, []int) {1135 func (*GetMergeRequestRequest) Descriptor() ([]byte, []int) {
942- return file_ermite_merge_request_proto_rawDescGZIP(), []int{7}1136+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{8}
943 }1137 }
944 1138
945 func (x *GetMergeRequestRequest) GetRepo() string {1139 func (x *GetMergeRequestRequest) GetRepo() string {
@@ -1005,7 +1199,7 @@ type GetMergeRequestResponse struct {
1005 1199
1006 func (x *GetMergeRequestResponse) Reset() {1200 func (x *GetMergeRequestResponse) Reset() {
1007 *x = GetMergeRequestResponse{}1201 *x = GetMergeRequestResponse{}
1008- mi := &file_ermite_merge_request_proto_msgTypes[8]1202+ mi := &file_ermite_merge_request_proto_msgTypes[9]
1009 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1203 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1010 ms.StoreMessageInfo(mi)1204 ms.StoreMessageInfo(mi)
1011 }1205 }
@@ -1017,7 +1211,7 @@ func (x *GetMergeRequestResponse) String() string {
1017 func (*GetMergeRequestResponse) ProtoMessage() {}1211 func (*GetMergeRequestResponse) ProtoMessage() {}
1018 1212
1019 func (x *GetMergeRequestResponse) ProtoReflect() protoreflect.Message {1213 func (x *GetMergeRequestResponse) ProtoReflect() protoreflect.Message {
1020- mi := &file_ermite_merge_request_proto_msgTypes[8]1214+ mi := &file_ermite_merge_request_proto_msgTypes[9]
1021 if x != nil {1215 if x != nil {
1022 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1216 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1023 if ms.LoadMessageInfo() == nil {1217 if ms.LoadMessageInfo() == nil {
@@ -1030,7 +1224,7 @@ func (x *GetMergeRequestResponse) ProtoReflect() protoreflect.Message {
1030 1224
1031 // Deprecated: Use GetMergeRequestResponse.ProtoReflect.Descriptor instead.1225 // Deprecated: Use GetMergeRequestResponse.ProtoReflect.Descriptor instead.
1032 func (*GetMergeRequestResponse) Descriptor() ([]byte, []int) {1226 func (*GetMergeRequestResponse) Descriptor() ([]byte, []int) {
1033- return file_ermite_merge_request_proto_rawDescGZIP(), []int{8}1227+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{9}
1034 }1228 }
1035 1229
1036 func (x *GetMergeRequestResponse) GetMergeRequest() *MergeRequest {1230 func (x *GetMergeRequestResponse) GetMergeRequest() *MergeRequest {
@@ -1139,7 +1333,7 @@ type AddCommentRequest struct {
1139 1333
1140 func (x *AddCommentRequest) Reset() {1334 func (x *AddCommentRequest) Reset() {
1141 *x = AddCommentRequest{}1335 *x = AddCommentRequest{}
1142- mi := &file_ermite_merge_request_proto_msgTypes[9]1336+ mi := &file_ermite_merge_request_proto_msgTypes[10]
1143 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1337 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1144 ms.StoreMessageInfo(mi)1338 ms.StoreMessageInfo(mi)
1145 }1339 }
@@ -1151,7 +1345,7 @@ func (x *AddCommentRequest) String() string {
1151 func (*AddCommentRequest) ProtoMessage() {}1345 func (*AddCommentRequest) ProtoMessage() {}
1152 1346
1153 func (x *AddCommentRequest) ProtoReflect() protoreflect.Message {1347 func (x *AddCommentRequest) ProtoReflect() protoreflect.Message {
1154- mi := &file_ermite_merge_request_proto_msgTypes[9]1348+ mi := &file_ermite_merge_request_proto_msgTypes[10]
1155 if x != nil {1349 if x != nil {
1156 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1350 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1157 if ms.LoadMessageInfo() == nil {1351 if ms.LoadMessageInfo() == nil {
@@ -1164,7 +1358,7 @@ func (x *AddCommentRequest) ProtoReflect() protoreflect.Message {
1164 1358
1165 // Deprecated: Use AddCommentRequest.ProtoReflect.Descriptor instead.1359 // Deprecated: Use AddCommentRequest.ProtoReflect.Descriptor instead.
1166 func (*AddCommentRequest) Descriptor() ([]byte, []int) {1360 func (*AddCommentRequest) Descriptor() ([]byte, []int) {
1167- return file_ermite_merge_request_proto_rawDescGZIP(), []int{9}1361+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{10}
1168 }1362 }
1169 1363
1170 func (x *AddCommentRequest) GetRepo() string {1364 func (x *AddCommentRequest) GetRepo() string {
@@ -1241,7 +1435,7 @@ type AddCommentResponse struct {
1241 1435
1242 func (x *AddCommentResponse) Reset() {1436 func (x *AddCommentResponse) Reset() {
1243 *x = AddCommentResponse{}1437 *x = AddCommentResponse{}
1244- mi := &file_ermite_merge_request_proto_msgTypes[10]1438+ mi := &file_ermite_merge_request_proto_msgTypes[11]
1245 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1439 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1246 ms.StoreMessageInfo(mi)1440 ms.StoreMessageInfo(mi)
1247 }1441 }
@@ -1253,7 +1447,7 @@ func (x *AddCommentResponse) String() string {
1253 func (*AddCommentResponse) ProtoMessage() {}1447 func (*AddCommentResponse) ProtoMessage() {}
1254 1448
1255 func (x *AddCommentResponse) ProtoReflect() protoreflect.Message {1449 func (x *AddCommentResponse) ProtoReflect() protoreflect.Message {
1256- mi := &file_ermite_merge_request_proto_msgTypes[10]1450+ mi := &file_ermite_merge_request_proto_msgTypes[11]
1257 if x != nil {1451 if x != nil {
1258 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1452 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1259 if ms.LoadMessageInfo() == nil {1453 if ms.LoadMessageInfo() == nil {
@@ -1266,7 +1460,7 @@ func (x *AddCommentResponse) ProtoReflect() protoreflect.Message {
1266 1460
1267 // Deprecated: Use AddCommentResponse.ProtoReflect.Descriptor instead.1461 // Deprecated: Use AddCommentResponse.ProtoReflect.Descriptor instead.
1268 func (*AddCommentResponse) Descriptor() ([]byte, []int) {1462 func (*AddCommentResponse) Descriptor() ([]byte, []int) {
1269- return file_ermite_merge_request_proto_rawDescGZIP(), []int{10}1463+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{11}
1270 }1464 }
1271 1465
1272 func (x *AddCommentResponse) GetComment() *Comment {1466 func (x *AddCommentResponse) GetComment() *Comment {
@@ -1294,7 +1488,7 @@ type EditCommentRequest struct {
1294 1488
1295 func (x *EditCommentRequest) Reset() {1489 func (x *EditCommentRequest) Reset() {
1296 *x = EditCommentRequest{}1490 *x = EditCommentRequest{}
1297- mi := &file_ermite_merge_request_proto_msgTypes[11]1491+ mi := &file_ermite_merge_request_proto_msgTypes[12]
1298 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1492 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1299 ms.StoreMessageInfo(mi)1493 ms.StoreMessageInfo(mi)
1300 }1494 }
@@ -1306,7 +1500,7 @@ func (x *EditCommentRequest) String() string {
1306 func (*EditCommentRequest) ProtoMessage() {}1500 func (*EditCommentRequest) ProtoMessage() {}
1307 1501
1308 func (x *EditCommentRequest) ProtoReflect() protoreflect.Message {1502 func (x *EditCommentRequest) ProtoReflect() protoreflect.Message {
1309- mi := &file_ermite_merge_request_proto_msgTypes[11]1503+ mi := &file_ermite_merge_request_proto_msgTypes[12]
1310 if x != nil {1504 if x != nil {
1311 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1505 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1312 if ms.LoadMessageInfo() == nil {1506 if ms.LoadMessageInfo() == nil {
@@ -1319,7 +1513,7 @@ func (x *EditCommentRequest) ProtoReflect() protoreflect.Message {
1319 1513
1320 // Deprecated: Use EditCommentRequest.ProtoReflect.Descriptor instead.1514 // Deprecated: Use EditCommentRequest.ProtoReflect.Descriptor instead.
1321 func (*EditCommentRequest) Descriptor() ([]byte, []int) {1515 func (*EditCommentRequest) Descriptor() ([]byte, []int) {
1322- return file_ermite_merge_request_proto_rawDescGZIP(), []int{11}1516+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{12}
1323 }1517 }
1324 1518
1325 func (x *EditCommentRequest) GetRepo() string {1519 func (x *EditCommentRequest) GetRepo() string {
@@ -1361,7 +1555,7 @@ type EditCommentResponse struct {
1361 1555
1362 func (x *EditCommentResponse) Reset() {1556 func (x *EditCommentResponse) Reset() {
1363 *x = EditCommentResponse{}1557 *x = EditCommentResponse{}
1364- mi := &file_ermite_merge_request_proto_msgTypes[12]1558+ mi := &file_ermite_merge_request_proto_msgTypes[13]
1365 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1559 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1366 ms.StoreMessageInfo(mi)1560 ms.StoreMessageInfo(mi)
1367 }1561 }
@@ -1373,7 +1567,7 @@ func (x *EditCommentResponse) String() string {
1373 func (*EditCommentResponse) ProtoMessage() {}1567 func (*EditCommentResponse) ProtoMessage() {}
1374 1568
1375 func (x *EditCommentResponse) ProtoReflect() protoreflect.Message {1569 func (x *EditCommentResponse) ProtoReflect() protoreflect.Message {
1376- mi := &file_ermite_merge_request_proto_msgTypes[12]1570+ mi := &file_ermite_merge_request_proto_msgTypes[13]
1377 if x != nil {1571 if x != nil {
1378 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1572 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1379 if ms.LoadMessageInfo() == nil {1573 if ms.LoadMessageInfo() == nil {
@@ -1386,7 +1580,7 @@ func (x *EditCommentResponse) ProtoReflect() protoreflect.Message {
1386 1580
1387 // Deprecated: Use EditCommentResponse.ProtoReflect.Descriptor instead.1581 // Deprecated: Use EditCommentResponse.ProtoReflect.Descriptor instead.
1388 func (*EditCommentResponse) Descriptor() ([]byte, []int) {1582 func (*EditCommentResponse) Descriptor() ([]byte, []int) {
1389- return file_ermite_merge_request_proto_rawDescGZIP(), []int{12}1583+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{13}
1390 }1584 }
1391 1585
1392 func (x *EditCommentResponse) GetComment() *Comment {1586 func (x *EditCommentResponse) GetComment() *Comment {
@@ -1411,7 +1605,7 @@ type DeleteCommentRequest struct {
1411 1605
1412 func (x *DeleteCommentRequest) Reset() {1606 func (x *DeleteCommentRequest) Reset() {
1413 *x = DeleteCommentRequest{}1607 *x = DeleteCommentRequest{}
1414- mi := &file_ermite_merge_request_proto_msgTypes[13]1608+ mi := &file_ermite_merge_request_proto_msgTypes[14]
1415 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1609 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1416 ms.StoreMessageInfo(mi)1610 ms.StoreMessageInfo(mi)
1417 }1611 }
@@ -1423,7 +1617,7 @@ func (x *DeleteCommentRequest) String() string {
1423 func (*DeleteCommentRequest) ProtoMessage() {}1617 func (*DeleteCommentRequest) ProtoMessage() {}
1424 1618
1425 func (x *DeleteCommentRequest) ProtoReflect() protoreflect.Message {1619 func (x *DeleteCommentRequest) ProtoReflect() protoreflect.Message {
1426- mi := &file_ermite_merge_request_proto_msgTypes[13]1620+ mi := &file_ermite_merge_request_proto_msgTypes[14]
1427 if x != nil {1621 if x != nil {
1428 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1622 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1429 if ms.LoadMessageInfo() == nil {1623 if ms.LoadMessageInfo() == nil {
@@ -1436,7 +1630,7 @@ func (x *DeleteCommentRequest) ProtoReflect() protoreflect.Message {
1436 1630
1437 // Deprecated: Use DeleteCommentRequest.ProtoReflect.Descriptor instead.1631 // Deprecated: Use DeleteCommentRequest.ProtoReflect.Descriptor instead.
1438 func (*DeleteCommentRequest) Descriptor() ([]byte, []int) {1632 func (*DeleteCommentRequest) Descriptor() ([]byte, []int) {
1439- return file_ermite_merge_request_proto_rawDescGZIP(), []int{13}1633+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{14}
1440 }1634 }
1441 1635
1442 func (x *DeleteCommentRequest) GetRepo() string {1636 func (x *DeleteCommentRequest) GetRepo() string {
@@ -1471,7 +1665,7 @@ type DeleteCommentResponse struct {
1471 1665
1472 func (x *DeleteCommentResponse) Reset() {1666 func (x *DeleteCommentResponse) Reset() {
1473 *x = DeleteCommentResponse{}1667 *x = DeleteCommentResponse{}
1474- mi := &file_ermite_merge_request_proto_msgTypes[14]1668+ mi := &file_ermite_merge_request_proto_msgTypes[15]
1475 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1669 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1476 ms.StoreMessageInfo(mi)1670 ms.StoreMessageInfo(mi)
1477 }1671 }
@@ -1483,7 +1677,7 @@ func (x *DeleteCommentResponse) String() string {
1483 func (*DeleteCommentResponse) ProtoMessage() {}1677 func (*DeleteCommentResponse) ProtoMessage() {}
1484 1678
1485 func (x *DeleteCommentResponse) ProtoReflect() protoreflect.Message {1679 func (x *DeleteCommentResponse) ProtoReflect() protoreflect.Message {
1486- mi := &file_ermite_merge_request_proto_msgTypes[14]1680+ mi := &file_ermite_merge_request_proto_msgTypes[15]
1487 if x != nil {1681 if x != nil {
1488 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1682 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1489 if ms.LoadMessageInfo() == nil {1683 if ms.LoadMessageInfo() == nil {
@@ -1496,7 +1690,7 @@ func (x *DeleteCommentResponse) ProtoReflect() protoreflect.Message {
1496 1690
1497 // Deprecated: Use DeleteCommentResponse.ProtoReflect.Descriptor instead.1691 // Deprecated: Use DeleteCommentResponse.ProtoReflect.Descriptor instead.
1498 func (*DeleteCommentResponse) Descriptor() ([]byte, []int) {1692 func (*DeleteCommentResponse) Descriptor() ([]byte, []int) {
1499- return file_ermite_merge_request_proto_rawDescGZIP(), []int{14}1693+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{15}
1500 }1694 }
1501 1695
1502 func (x *DeleteCommentResponse) GetComment() *Comment {1696 func (x *DeleteCommentResponse) GetComment() *Comment {
@@ -1523,7 +1717,7 @@ type ResolveCommentRequest struct {
1523 1717
1524 func (x *ResolveCommentRequest) Reset() {1718 func (x *ResolveCommentRequest) Reset() {
1525 *x = ResolveCommentRequest{}1719 *x = ResolveCommentRequest{}
1526- mi := &file_ermite_merge_request_proto_msgTypes[15]1720+ mi := &file_ermite_merge_request_proto_msgTypes[16]
1527 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1721 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1528 ms.StoreMessageInfo(mi)1722 ms.StoreMessageInfo(mi)
1529 }1723 }
@@ -1535,7 +1729,7 @@ func (x *ResolveCommentRequest) String() string {
1535 func (*ResolveCommentRequest) ProtoMessage() {}1729 func (*ResolveCommentRequest) ProtoMessage() {}
1536 1730
1537 func (x *ResolveCommentRequest) ProtoReflect() protoreflect.Message {1731 func (x *ResolveCommentRequest) ProtoReflect() protoreflect.Message {
1538- mi := &file_ermite_merge_request_proto_msgTypes[15]1732+ mi := &file_ermite_merge_request_proto_msgTypes[16]
1539 if x != nil {1733 if x != nil {
1540 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1734 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1541 if ms.LoadMessageInfo() == nil {1735 if ms.LoadMessageInfo() == nil {
@@ -1548,7 +1742,7 @@ func (x *ResolveCommentRequest) ProtoReflect() protoreflect.Message {
1548 1742
1549 // Deprecated: Use ResolveCommentRequest.ProtoReflect.Descriptor instead.1743 // Deprecated: Use ResolveCommentRequest.ProtoReflect.Descriptor instead.
1550 func (*ResolveCommentRequest) Descriptor() ([]byte, []int) {1744 func (*ResolveCommentRequest) Descriptor() ([]byte, []int) {
1551- return file_ermite_merge_request_proto_rawDescGZIP(), []int{15}1745+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{16}
1552 }1746 }
1553 1747
1554 func (x *ResolveCommentRequest) GetRepo() string {1748 func (x *ResolveCommentRequest) GetRepo() string {
@@ -1590,7 +1784,7 @@ type ResolveCommentResponse struct {
1590 1784
1591 func (x *ResolveCommentResponse) Reset() {1785 func (x *ResolveCommentResponse) Reset() {
1592 *x = ResolveCommentResponse{}1786 *x = ResolveCommentResponse{}
1593- mi := &file_ermite_merge_request_proto_msgTypes[16]1787+ mi := &file_ermite_merge_request_proto_msgTypes[17]
1594 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1788 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1595 ms.StoreMessageInfo(mi)1789 ms.StoreMessageInfo(mi)
1596 }1790 }
@@ -1602,7 +1796,7 @@ func (x *ResolveCommentResponse) String() string {
1602 func (*ResolveCommentResponse) ProtoMessage() {}1796 func (*ResolveCommentResponse) ProtoMessage() {}
1603 1797
1604 func (x *ResolveCommentResponse) ProtoReflect() protoreflect.Message {1798 func (x *ResolveCommentResponse) ProtoReflect() protoreflect.Message {
1605- mi := &file_ermite_merge_request_proto_msgTypes[16]1799+ mi := &file_ermite_merge_request_proto_msgTypes[17]
1606 if x != nil {1800 if x != nil {
1607 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1801 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1608 if ms.LoadMessageInfo() == nil {1802 if ms.LoadMessageInfo() == nil {
@@ -1615,7 +1809,7 @@ func (x *ResolveCommentResponse) ProtoReflect() protoreflect.Message {
1615 1809
1616 // Deprecated: Use ResolveCommentResponse.ProtoReflect.Descriptor instead.1810 // Deprecated: Use ResolveCommentResponse.ProtoReflect.Descriptor instead.
1617 func (*ResolveCommentResponse) Descriptor() ([]byte, []int) {1811 func (*ResolveCommentResponse) Descriptor() ([]byte, []int) {
1618- return file_ermite_merge_request_proto_rawDescGZIP(), []int{16}1812+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{17}
1619 }1813 }
1620 1814
1621 func (x *ResolveCommentResponse) GetComment() *Comment {1815 func (x *ResolveCommentResponse) GetComment() *Comment {
@@ -1638,7 +1832,7 @@ type CloseMergeRequestRequest struct {
1638 1832
1639 func (x *CloseMergeRequestRequest) Reset() {1833 func (x *CloseMergeRequestRequest) Reset() {
1640 *x = CloseMergeRequestRequest{}1834 *x = CloseMergeRequestRequest{}
1641- mi := &file_ermite_merge_request_proto_msgTypes[17]1835+ mi := &file_ermite_merge_request_proto_msgTypes[18]
1642 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1836 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1643 ms.StoreMessageInfo(mi)1837 ms.StoreMessageInfo(mi)
1644 }1838 }
@@ -1650,7 +1844,7 @@ func (x *CloseMergeRequestRequest) String() string {
1650 func (*CloseMergeRequestRequest) ProtoMessage() {}1844 func (*CloseMergeRequestRequest) ProtoMessage() {}
1651 1845
1652 func (x *CloseMergeRequestRequest) ProtoReflect() protoreflect.Message {1846 func (x *CloseMergeRequestRequest) ProtoReflect() protoreflect.Message {
1653- mi := &file_ermite_merge_request_proto_msgTypes[17]1847+ mi := &file_ermite_merge_request_proto_msgTypes[18]
1654 if x != nil {1848 if x != nil {
1655 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1849 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1656 if ms.LoadMessageInfo() == nil {1850 if ms.LoadMessageInfo() == nil {
@@ -1663,7 +1857,7 @@ func (x *CloseMergeRequestRequest) ProtoReflect() protoreflect.Message {
1663 1857
1664 // Deprecated: Use CloseMergeRequestRequest.ProtoReflect.Descriptor instead.1858 // Deprecated: Use CloseMergeRequestRequest.ProtoReflect.Descriptor instead.
1665 func (*CloseMergeRequestRequest) Descriptor() ([]byte, []int) {1859 func (*CloseMergeRequestRequest) Descriptor() ([]byte, []int) {
1666- return file_ermite_merge_request_proto_rawDescGZIP(), []int{17}1860+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{18}
1667 }1861 }
1668 1862
1669 func (x *CloseMergeRequestRequest) GetRepo() string {1863 func (x *CloseMergeRequestRequest) GetRepo() string {
@@ -1691,7 +1885,7 @@ type CloseMergeRequestResponse struct {
1691 1885
1692 func (x *CloseMergeRequestResponse) Reset() {1886 func (x *CloseMergeRequestResponse) Reset() {
1693 *x = CloseMergeRequestResponse{}1887 *x = CloseMergeRequestResponse{}
1694- mi := &file_ermite_merge_request_proto_msgTypes[18]1888+ mi := &file_ermite_merge_request_proto_msgTypes[19]
1695 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1889 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1696 ms.StoreMessageInfo(mi)1890 ms.StoreMessageInfo(mi)
1697 }1891 }
@@ -1703,7 +1897,7 @@ func (x *CloseMergeRequestResponse) String() string {
1703 func (*CloseMergeRequestResponse) ProtoMessage() {}1897 func (*CloseMergeRequestResponse) ProtoMessage() {}
1704 1898
1705 func (x *CloseMergeRequestResponse) ProtoReflect() protoreflect.Message {1899 func (x *CloseMergeRequestResponse) ProtoReflect() protoreflect.Message {
1706- mi := &file_ermite_merge_request_proto_msgTypes[18]1900+ mi := &file_ermite_merge_request_proto_msgTypes[19]
1707 if x != nil {1901 if x != nil {
1708 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1902 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1709 if ms.LoadMessageInfo() == nil {1903 if ms.LoadMessageInfo() == nil {
@@ -1716,7 +1910,7 @@ func (x *CloseMergeRequestResponse) ProtoReflect() protoreflect.Message {
1716 1910
1717 // Deprecated: Use CloseMergeRequestResponse.ProtoReflect.Descriptor instead.1911 // Deprecated: Use CloseMergeRequestResponse.ProtoReflect.Descriptor instead.
1718 func (*CloseMergeRequestResponse) Descriptor() ([]byte, []int) {1912 func (*CloseMergeRequestResponse) Descriptor() ([]byte, []int) {
1719- return file_ermite_merge_request_proto_rawDescGZIP(), []int{18}1913+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{19}
1720 }1914 }
1721 1915
1722 func (x *CloseMergeRequestResponse) GetMergeRequest() *MergeRequest {1916 func (x *CloseMergeRequestResponse) GetMergeRequest() *MergeRequest {
@@ -1752,7 +1946,7 @@ type MergeMergeRequestRequest struct {
1752 1946
1753 func (x *MergeMergeRequestRequest) Reset() {1947 func (x *MergeMergeRequestRequest) Reset() {
1754 *x = MergeMergeRequestRequest{}1948 *x = MergeMergeRequestRequest{}
1755- mi := &file_ermite_merge_request_proto_msgTypes[19]1949+ mi := &file_ermite_merge_request_proto_msgTypes[20]
1756 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1950 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1757 ms.StoreMessageInfo(mi)1951 ms.StoreMessageInfo(mi)
1758 }1952 }
@@ -1764,7 +1958,7 @@ func (x *MergeMergeRequestRequest) String() string {
1764 func (*MergeMergeRequestRequest) ProtoMessage() {}1958 func (*MergeMergeRequestRequest) ProtoMessage() {}
1765 1959
1766 func (x *MergeMergeRequestRequest) ProtoReflect() protoreflect.Message {1960 func (x *MergeMergeRequestRequest) ProtoReflect() protoreflect.Message {
1767- mi := &file_ermite_merge_request_proto_msgTypes[19]1961+ mi := &file_ermite_merge_request_proto_msgTypes[20]
1768 if x != nil {1962 if x != nil {
1769 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1963 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1770 if ms.LoadMessageInfo() == nil {1964 if ms.LoadMessageInfo() == nil {
@@ -1777,7 +1971,7 @@ func (x *MergeMergeRequestRequest) ProtoReflect() protoreflect.Message {
1777 1971
1778 // Deprecated: Use MergeMergeRequestRequest.ProtoReflect.Descriptor instead.1972 // Deprecated: Use MergeMergeRequestRequest.ProtoReflect.Descriptor instead.
1779 func (*MergeMergeRequestRequest) Descriptor() ([]byte, []int) {1973 func (*MergeMergeRequestRequest) Descriptor() ([]byte, []int) {
1780- return file_ermite_merge_request_proto_rawDescGZIP(), []int{19}1974+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{20}
1781 }1975 }
1782 1976
1783 func (x *MergeMergeRequestRequest) GetRepo() string {1977 func (x *MergeMergeRequestRequest) GetRepo() string {
@@ -1832,7 +2026,7 @@ type MergeMergeRequestResponse struct {
1832 2026
1833 func (x *MergeMergeRequestResponse) Reset() {2027 func (x *MergeMergeRequestResponse) Reset() {
1834 *x = MergeMergeRequestResponse{}2028 *x = MergeMergeRequestResponse{}
1835- mi := &file_ermite_merge_request_proto_msgTypes[20]2029+ mi := &file_ermite_merge_request_proto_msgTypes[21]
1836 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2030 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1837 ms.StoreMessageInfo(mi)2031 ms.StoreMessageInfo(mi)
1838 }2032 }
@@ -1844,7 +2038,7 @@ func (x *MergeMergeRequestResponse) String() string {
1844 func (*MergeMergeRequestResponse) ProtoMessage() {}2038 func (*MergeMergeRequestResponse) ProtoMessage() {}
1845 2039
1846 func (x *MergeMergeRequestResponse) ProtoReflect() protoreflect.Message {2040 func (x *MergeMergeRequestResponse) ProtoReflect() protoreflect.Message {
1847- mi := &file_ermite_merge_request_proto_msgTypes[20]2041+ mi := &file_ermite_merge_request_proto_msgTypes[21]
1848 if x != nil {2042 if x != nil {
1849 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2043 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1850 if ms.LoadMessageInfo() == nil {2044 if ms.LoadMessageInfo() == nil {
@@ -1857,7 +2051,7 @@ func (x *MergeMergeRequestResponse) ProtoReflect() protoreflect.Message {
1857 2051
1858 // Deprecated: Use MergeMergeRequestResponse.ProtoReflect.Descriptor instead.2052 // Deprecated: Use MergeMergeRequestResponse.ProtoReflect.Descriptor instead.
1859 func (*MergeMergeRequestResponse) Descriptor() ([]byte, []int) {2053 func (*MergeMergeRequestResponse) Descriptor() ([]byte, []int) {
1860- return file_ermite_merge_request_proto_rawDescGZIP(), []int{20}2054+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{21}
1861 }2055 }
1862 2056
1863 func (x *MergeMergeRequestResponse) GetMergeRequest() *MergeRequest {2057 func (x *MergeMergeRequestResponse) GetMergeRequest() *MergeRequest {
@@ -1891,7 +2085,7 @@ type MarkReadRequest struct {
1891 2085
1892 func (x *MarkReadRequest) Reset() {2086 func (x *MarkReadRequest) Reset() {
1893 *x = MarkReadRequest{}2087 *x = MarkReadRequest{}
1894- mi := &file_ermite_merge_request_proto_msgTypes[21]2088+ mi := &file_ermite_merge_request_proto_msgTypes[22]
1895 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2089 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1896 ms.StoreMessageInfo(mi)2090 ms.StoreMessageInfo(mi)
1897 }2091 }
@@ -1903,7 +2097,7 @@ func (x *MarkReadRequest) String() string {
1903 func (*MarkReadRequest) ProtoMessage() {}2097 func (*MarkReadRequest) ProtoMessage() {}
1904 2098
1905 func (x *MarkReadRequest) ProtoReflect() protoreflect.Message {2099 func (x *MarkReadRequest) ProtoReflect() protoreflect.Message {
1906- mi := &file_ermite_merge_request_proto_msgTypes[21]2100+ mi := &file_ermite_merge_request_proto_msgTypes[22]
1907 if x != nil {2101 if x != nil {
1908 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2102 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1909 if ms.LoadMessageInfo() == nil {2103 if ms.LoadMessageInfo() == nil {
@@ -1916,7 +2110,7 @@ func (x *MarkReadRequest) ProtoReflect() protoreflect.Message {
1916 2110
1917 // Deprecated: Use MarkReadRequest.ProtoReflect.Descriptor instead.2111 // Deprecated: Use MarkReadRequest.ProtoReflect.Descriptor instead.
1918 func (*MarkReadRequest) Descriptor() ([]byte, []int) {2112 func (*MarkReadRequest) Descriptor() ([]byte, []int) {
1919- return file_ermite_merge_request_proto_rawDescGZIP(), []int{21}2113+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{22}
1920 }2114 }
1921 2115
1922 func (x *MarkReadRequest) GetRepo() string {2116 func (x *MarkReadRequest) GetRepo() string {
@@ -1949,7 +2143,7 @@ type MarkReadResponse struct {
1949 2143
1950 func (x *MarkReadResponse) Reset() {2144 func (x *MarkReadResponse) Reset() {
1951 *x = MarkReadResponse{}2145 *x = MarkReadResponse{}
1952- mi := &file_ermite_merge_request_proto_msgTypes[22]2146+ mi := &file_ermite_merge_request_proto_msgTypes[23]
1953 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2147 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1954 ms.StoreMessageInfo(mi)2148 ms.StoreMessageInfo(mi)
1955 }2149 }
@@ -1961,7 +2155,7 @@ func (x *MarkReadResponse) String() string {
1961 func (*MarkReadResponse) ProtoMessage() {}2155 func (*MarkReadResponse) ProtoMessage() {}
1962 2156
1963 func (x *MarkReadResponse) ProtoReflect() protoreflect.Message {2157 func (x *MarkReadResponse) ProtoReflect() protoreflect.Message {
1964- mi := &file_ermite_merge_request_proto_msgTypes[22]2158+ mi := &file_ermite_merge_request_proto_msgTypes[23]
1965 if x != nil {2159 if x != nil {
1966 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2160 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1967 if ms.LoadMessageInfo() == nil {2161 if ms.LoadMessageInfo() == nil {
@@ -1974,14 +2168,24 @@ func (x *MarkReadResponse) ProtoReflect() protoreflect.Message {
1974 2168
1975 // Deprecated: Use MarkReadResponse.ProtoReflect.Descriptor instead.2169 // Deprecated: Use MarkReadResponse.ProtoReflect.Descriptor instead.
1976 func (*MarkReadResponse) Descriptor() ([]byte, []int) {2170 func (*MarkReadResponse) Descriptor() ([]byte, []int) {
1977- return file_ermite_merge_request_proto_rawDescGZIP(), []int{22}2171+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{23}
1978 }2172 }
1979 2173
1980 var File_ermite_merge_request_proto protoreflect.FileDescriptor2174 var File_ermite_merge_request_proto protoreflect.FileDescriptor
1981 2175
1982 const file_ermite_merge_request_proto_rawDesc = "" +2176 const file_ermite_merge_request_proto_rawDesc = "" +
1983 "\n" +2177 "\n" +
1984- "\x1aermite/merge_request.proto\x12\x06ermite\x1a\x10ermite/git.proto\x1a\x12ermite/types.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xf0\x03\n" +2178+ "\x1aermite/merge_request.proto\x12\x06ermite\x1a\x10ermite/git.proto\x1a\x12ermite/types.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xce\x02\n" +
2179+ "\fMergeability\x12/\n" +
2180+ "\x05state\x18\x01 \x01(\x0e2\x19.ermite.MergeabilityStateR\x05state\x12\x1b\n" +
2181+ "\ttarget_id\x18\x02 \x01(\tR\btargetId\x12\x17\n" +
2182+ "\ahead_id\x18\x03 \x01(\tR\x06headId\x12\x16\n" +
2183+ "\x06behind\x18\x04 \x01(\x05R\x06behind\x12#\n" +
2184+ "\rbehind_capped\x18\x05 \x01(\bR\fbehindCapped\x12%\n" +
2185+ "\x0econflict_paths\x18\x06 \x03(\tR\rconflictPaths\x128\n" +
2186+ "\x18conflict_paths_truncated\x18\a \x01(\bR\x16conflictPathsTruncated\x129\n" +
2187+ "\n" +
2188+ "checked_at\x18\b \x01(\v2\x1a.google.protobuf.TimestampR\tcheckedAt\"\xaa\x04\n" +
1985 "\fMergeRequest\x12\x12\n" +2189 "\fMergeRequest\x12\x12\n" +
1986 "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x16\n" +2190 "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x16\n" +
1987 "\x06number\x18\x02 \x01(\x03R\x06number\x12\x14\n" +2191 "\x06number\x18\x02 \x01(\x03R\x06number\x12\x14\n" +
@@ -1999,7 +2203,8 @@ const file_ermite_merge_request_proto_rawDesc = "" +
1999 "\ahead_id\x18\v \x01(\tR\x06headId\x12(\n" +2203 "\ahead_id\x18\v \x01(\tR\x06headId\x12(\n" +
2000 "\x10merged_commit_id\x18\f \x01(\tR\x0emergedCommitId\x120\n" +2204 "\x10merged_commit_id\x18\f \x01(\tR\x0emergedCommitId\x120\n" +
2001 "\n" +2205 "\n" +
2002- "merge_mode\x18\r \x01(\x0e2\x11.ermite.MergeModeR\tmergeMode\"\xbf\x03\n" +2206+ "merge_mode\x18\r \x01(\x0e2\x11.ermite.MergeModeR\tmergeMode\x128\n" +
2207+ "\fmergeability\x18\x0e \x01(\v2\x14.ermite.MergeabilityR\fmergeability\"\xbf\x03\n" +
2003 "\aComment\x12\x0e\n" +2208 "\aComment\x12\x0e\n" +
2004 "\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n" +2209 "\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n" +
2005 "\x06author\x18\x02 \x01(\tR\x06author\x12\x12\n" +2210 "\x06author\x18\x02 \x01(\tR\x06author\x12\x12\n" +
@@ -2129,7 +2334,13 @@ const file_ermite_merge_request_proto_rawDesc = "" +
2129 "\aVerdict\x12\x17\n" +2334 "\aVerdict\x12\x17\n" +
2130 "\x13VERDICT_UNSPECIFIED\x10\x00\x12\x13\n" +2335 "\x13VERDICT_UNSPECIFIED\x10\x00\x12\x13\n" +
2131 "\x0fVERDICT_APPROVE\x10\x01\x12\x1d\n" +2336 "\x0fVERDICT_APPROVE\x10\x01\x12\x1d\n" +
2132- "\x19VERDICT_CHANGES_REQUESTED\x10\x022\xbf\x06\n" +2337+ "\x19VERDICT_CHANGES_REQUESTED\x10\x02*\xbb\x01\n" +
2338+ "\x11MergeabilityState\x12\"\n" +
2339+ "\x1eMERGEABILITY_STATE_UNSPECIFIED\x10\x00\x12\x1f\n" +
2340+ "\x1bMERGEABILITY_STATE_CHECKING\x10\x01\x12!\n" +
2341+ "\x1dMERGEABILITY_STATE_UP_TO_DATE\x10\x02\x12\x1d\n" +
2342+ "\x19MERGEABILITY_STATE_BEHIND\x10\x03\x12\x1f\n" +
2343+ "\x1bMERGEABILITY_STATE_CONFLICT\x10\x042\xbf\x06\n" +
2133 "\x13MergeRequestService\x12[\n" +2344 "\x13MergeRequestService\x12[\n" +
2134 "\x12CreateMergeRequest\x12!.ermite.CreateMergeRequestRequest\x1a\".ermite.CreateMergeRequestResponse\x12X\n" +2345 "\x12CreateMergeRequest\x12!.ermite.CreateMergeRequestRequest\x1a\".ermite.CreateMergeRequestResponse\x12X\n" +
2135 "\x11ListMergeRequests\x12 .ermite.ListMergeRequestsRequest\x1a!.ermite.ListMergeRequestsResponse\x12R\n" +2346 "\x11ListMergeRequests\x12 .ermite.ListMergeRequestsRequest\x1a!.ermite.ListMergeRequestsResponse\x12R\n" +
@@ -2157,95 +2368,100 @@ func file_ermite_merge_request_proto_rawDescGZIP() []byte {
2157 return file_ermite_merge_request_proto_rawDescData2368 return file_ermite_merge_request_proto_rawDescData
2158 }2369 }
2159 2370
2160-var file_ermite_merge_request_proto_enumTypes = make([]protoimpl.EnumInfo, 3)2371+var file_ermite_merge_request_proto_enumTypes = make([]protoimpl.EnumInfo, 4)
2161-var file_ermite_merge_request_proto_msgTypes = make([]protoimpl.MessageInfo, 23)2372+var file_ermite_merge_request_proto_msgTypes = make([]protoimpl.MessageInfo, 24)
2162 var file_ermite_merge_request_proto_goTypes = []any{2373 var file_ermite_merge_request_proto_goTypes = []any{
2163 (MergeRequestState)(0), // 0: ermite.MergeRequestState2374 (MergeRequestState)(0), // 0: ermite.MergeRequestState
2164 (DiffSide)(0), // 1: ermite.DiffSide2375 (DiffSide)(0), // 1: ermite.DiffSide
2165 (Verdict)(0), // 2: ermite.Verdict2376 (Verdict)(0), // 2: ermite.Verdict
2166- (*MergeRequest)(nil), // 3: ermite.MergeRequest2377+ (MergeabilityState)(0), // 3: ermite.MergeabilityState
2167- (*Comment)(nil), // 4: ermite.Comment2378+ (*Mergeability)(nil), // 4: ermite.Mergeability
2168- (*AuthorVerdict)(nil), // 5: ermite.AuthorVerdict2379+ (*MergeRequest)(nil), // 5: ermite.MergeRequest
2169- (*CreateMergeRequestRequest)(nil), // 6: ermite.CreateMergeRequestRequest2380+ (*Comment)(nil), // 6: ermite.Comment
2170- (*CreateMergeRequestResponse)(nil), // 7: ermite.CreateMergeRequestResponse2381+ (*AuthorVerdict)(nil), // 7: ermite.AuthorVerdict
2171- (*ListMergeRequestsRequest)(nil), // 8: ermite.ListMergeRequestsRequest2382+ (*CreateMergeRequestRequest)(nil), // 8: ermite.CreateMergeRequestRequest
2172- (*ListMergeRequestsResponse)(nil), // 9: ermite.ListMergeRequestsResponse2383+ (*CreateMergeRequestResponse)(nil), // 9: ermite.CreateMergeRequestResponse
2173- (*GetMergeRequestRequest)(nil), // 10: ermite.GetMergeRequestRequest2384+ (*ListMergeRequestsRequest)(nil), // 10: ermite.ListMergeRequestsRequest
2174- (*GetMergeRequestResponse)(nil), // 11: ermite.GetMergeRequestResponse2385+ (*ListMergeRequestsResponse)(nil), // 11: ermite.ListMergeRequestsResponse
2175- (*AddCommentRequest)(nil), // 12: ermite.AddCommentRequest2386+ (*GetMergeRequestRequest)(nil), // 12: ermite.GetMergeRequestRequest
2176- (*AddCommentResponse)(nil), // 13: ermite.AddCommentResponse2387+ (*GetMergeRequestResponse)(nil), // 13: ermite.GetMergeRequestResponse
2177- (*EditCommentRequest)(nil), // 14: ermite.EditCommentRequest2388+ (*AddCommentRequest)(nil), // 14: ermite.AddCommentRequest
2178- (*EditCommentResponse)(nil), // 15: ermite.EditCommentResponse2389+ (*AddCommentResponse)(nil), // 15: ermite.AddCommentResponse
2179- (*DeleteCommentRequest)(nil), // 16: ermite.DeleteCommentRequest2390+ (*EditCommentRequest)(nil), // 16: ermite.EditCommentRequest
2180- (*DeleteCommentResponse)(nil), // 17: ermite.DeleteCommentResponse2391+ (*EditCommentResponse)(nil), // 17: ermite.EditCommentResponse
2181- (*ResolveCommentRequest)(nil), // 18: ermite.ResolveCommentRequest2392+ (*DeleteCommentRequest)(nil), // 18: ermite.DeleteCommentRequest
2182- (*ResolveCommentResponse)(nil), // 19: ermite.ResolveCommentResponse2393+ (*DeleteCommentResponse)(nil), // 19: ermite.DeleteCommentResponse
2183- (*CloseMergeRequestRequest)(nil), // 20: ermite.CloseMergeRequestRequest2394+ (*ResolveCommentRequest)(nil), // 20: ermite.ResolveCommentRequest
2184- (*CloseMergeRequestResponse)(nil), // 21: ermite.CloseMergeRequestResponse2395+ (*ResolveCommentResponse)(nil), // 21: ermite.ResolveCommentResponse
2185- (*MergeMergeRequestRequest)(nil), // 22: ermite.MergeMergeRequestRequest2396+ (*CloseMergeRequestRequest)(nil), // 22: ermite.CloseMergeRequestRequest
2186- (*MergeMergeRequestResponse)(nil), // 23: ermite.MergeMergeRequestResponse2397+ (*CloseMergeRequestResponse)(nil), // 23: ermite.CloseMergeRequestResponse
2187- (*MarkReadRequest)(nil), // 24: ermite.MarkReadRequest2398+ (*MergeMergeRequestRequest)(nil), // 24: ermite.MergeMergeRequestRequest
2188- (*MarkReadResponse)(nil), // 25: ermite.MarkReadResponse2399+ (*MergeMergeRequestResponse)(nil), // 25: ermite.MergeMergeRequestResponse
2189- (*timestamppb.Timestamp)(nil), // 26: google.protobuf.Timestamp2400+ (*MarkReadRequest)(nil), // 26: ermite.MarkReadRequest
2190- (MergeMode)(0), // 27: ermite.MergeMode2401+ (*MarkReadResponse)(nil), // 27: ermite.MarkReadResponse
2191- (*Commit)(nil), // 28: ermite.Commit2402+ (*timestamppb.Timestamp)(nil), // 28: google.protobuf.Timestamp
2192- (*DiffStats)(nil), // 29: ermite.DiffStats2403+ (MergeMode)(0), // 29: ermite.MergeMode
2193- (*Diff)(nil), // 30: ermite.Diff2404+ (*Commit)(nil), // 30: ermite.Commit
2405+ (*DiffStats)(nil), // 31: ermite.DiffStats
2406+ (*Diff)(nil), // 32: ermite.Diff
2194 }2407 }
2195 var file_ermite_merge_request_proto_depIdxs = []int32{2408 var file_ermite_merge_request_proto_depIdxs = []int32{
2196- 0, // 0: ermite.MergeRequest.state:type_name -> ermite.MergeRequestState2409+ 3, // 0: ermite.Mergeability.state:type_name -> ermite.MergeabilityState
2197- 26, // 1: ermite.MergeRequest.created_at:type_name -> google.protobuf.Timestamp2410+ 28, // 1: ermite.Mergeability.checked_at:type_name -> google.protobuf.Timestamp
2198- 26, // 2: ermite.MergeRequest.updated_at:type_name -> google.protobuf.Timestamp2411+ 0, // 2: ermite.MergeRequest.state:type_name -> ermite.MergeRequestState
2199- 27, // 3: ermite.MergeRequest.merge_mode:type_name -> ermite.MergeMode2412+ 28, // 3: ermite.MergeRequest.created_at:type_name -> google.protobuf.Timestamp
2200- 1, // 4: ermite.Comment.side:type_name -> ermite.DiffSide2413+ 28, // 4: ermite.MergeRequest.updated_at:type_name -> google.protobuf.Timestamp
2201- 26, // 5: ermite.Comment.created_at:type_name -> google.protobuf.Timestamp2414+ 29, // 5: ermite.MergeRequest.merge_mode:type_name -> ermite.MergeMode
2202- 2, // 6: ermite.Comment.verdict:type_name -> ermite.Verdict2415+ 4, // 6: ermite.MergeRequest.mergeability:type_name -> ermite.Mergeability
2203- 26, // 7: ermite.Comment.edited_at:type_name -> google.protobuf.Timestamp2416+ 1, // 7: ermite.Comment.side:type_name -> ermite.DiffSide
2204- 2, // 8: ermite.AuthorVerdict.verdict:type_name -> ermite.Verdict2417+ 28, // 8: ermite.Comment.created_at:type_name -> google.protobuf.Timestamp
2205- 26, // 9: ermite.AuthorVerdict.created_at:type_name -> google.protobuf.Timestamp2418+ 2, // 9: ermite.Comment.verdict:type_name -> ermite.Verdict
2206- 3, // 10: ermite.CreateMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest2419+ 28, // 10: ermite.Comment.edited_at:type_name -> google.protobuf.Timestamp
2207- 0, // 11: ermite.ListMergeRequestsRequest.state:type_name -> ermite.MergeRequestState2420+ 2, // 11: ermite.AuthorVerdict.verdict:type_name -> ermite.Verdict
2208- 3, // 12: ermite.ListMergeRequestsResponse.merge_requests:type_name -> ermite.MergeRequest2421+ 28, // 12: ermite.AuthorVerdict.created_at:type_name -> google.protobuf.Timestamp
2209- 3, // 13: ermite.GetMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest2422+ 5, // 13: ermite.CreateMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
2210- 28, // 14: ermite.GetMergeRequestResponse.commits:type_name -> ermite.Commit2423+ 0, // 14: ermite.ListMergeRequestsRequest.state:type_name -> ermite.MergeRequestState
2211- 29, // 15: ermite.GetMergeRequestResponse.stats:type_name -> ermite.DiffStats2424+ 5, // 15: ermite.ListMergeRequestsResponse.merge_requests:type_name -> ermite.MergeRequest
2212- 30, // 16: ermite.GetMergeRequestResponse.diff:type_name -> ermite.Diff2425+ 5, // 16: ermite.GetMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
2213- 4, // 17: ermite.GetMergeRequestResponse.comments:type_name -> ermite.Comment2426+ 30, // 17: ermite.GetMergeRequestResponse.commits:type_name -> ermite.Commit
2214- 5, // 18: ermite.GetMergeRequestResponse.verdicts:type_name -> ermite.AuthorVerdict2427+ 31, // 18: ermite.GetMergeRequestResponse.stats:type_name -> ermite.DiffStats
2215- 1, // 19: ermite.AddCommentRequest.side:type_name -> ermite.DiffSide2428+ 32, // 19: ermite.GetMergeRequestResponse.diff:type_name -> ermite.Diff
2216- 2, // 20: ermite.AddCommentRequest.verdict:type_name -> ermite.Verdict2429+ 6, // 20: ermite.GetMergeRequestResponse.comments:type_name -> ermite.Comment
2217- 4, // 21: ermite.AddCommentResponse.comment:type_name -> ermite.Comment2430+ 7, // 21: ermite.GetMergeRequestResponse.verdicts:type_name -> ermite.AuthorVerdict
2218- 4, // 22: ermite.EditCommentResponse.comment:type_name -> ermite.Comment2431+ 1, // 22: ermite.AddCommentRequest.side:type_name -> ermite.DiffSide
2219- 4, // 23: ermite.DeleteCommentResponse.comment:type_name -> ermite.Comment2432+ 2, // 23: ermite.AddCommentRequest.verdict:type_name -> ermite.Verdict
2220- 4, // 24: ermite.ResolveCommentResponse.comment:type_name -> ermite.Comment2433+ 6, // 24: ermite.AddCommentResponse.comment:type_name -> ermite.Comment
2221- 3, // 25: ermite.CloseMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest2434+ 6, // 25: ermite.EditCommentResponse.comment:type_name -> ermite.Comment
2222- 27, // 26: ermite.MergeMergeRequestRequest.mode:type_name -> ermite.MergeMode2435+ 6, // 26: ermite.DeleteCommentResponse.comment:type_name -> ermite.Comment
2223- 3, // 27: ermite.MergeMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest2436+ 6, // 27: ermite.ResolveCommentResponse.comment:type_name -> ermite.Comment
2224- 6, // 28: ermite.MergeRequestService.CreateMergeRequest:input_type -> ermite.CreateMergeRequestRequest2437+ 5, // 28: ermite.CloseMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
2225- 8, // 29: ermite.MergeRequestService.ListMergeRequests:input_type -> ermite.ListMergeRequestsRequest2438+ 29, // 29: ermite.MergeMergeRequestRequest.mode:type_name -> ermite.MergeMode
2226- 10, // 30: ermite.MergeRequestService.GetMergeRequest:input_type -> ermite.GetMergeRequestRequest2439+ 5, // 30: ermite.MergeMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
2227- 12, // 31: ermite.MergeRequestService.AddComment:input_type -> ermite.AddCommentRequest2440+ 8, // 31: ermite.MergeRequestService.CreateMergeRequest:input_type -> ermite.CreateMergeRequestRequest
2228- 14, // 32: ermite.MergeRequestService.EditComment:input_type -> ermite.EditCommentRequest2441+ 10, // 32: ermite.MergeRequestService.ListMergeRequests:input_type -> ermite.ListMergeRequestsRequest
2229- 16, // 33: ermite.MergeRequestService.DeleteComment:input_type -> ermite.DeleteCommentRequest2442+ 12, // 33: ermite.MergeRequestService.GetMergeRequest:input_type -> ermite.GetMergeRequestRequest
2230- 18, // 34: ermite.MergeRequestService.ResolveComment:input_type -> ermite.ResolveCommentRequest2443+ 14, // 34: ermite.MergeRequestService.AddComment:input_type -> ermite.AddCommentRequest
2231- 20, // 35: ermite.MergeRequestService.CloseMergeRequest:input_type -> ermite.CloseMergeRequestRequest2444+ 16, // 35: ermite.MergeRequestService.EditComment:input_type -> ermite.EditCommentRequest
2232- 22, // 36: ermite.MergeRequestService.MergeMergeRequest:input_type -> ermite.MergeMergeRequestRequest2445+ 18, // 36: ermite.MergeRequestService.DeleteComment:input_type -> ermite.DeleteCommentRequest
2233- 24, // 37: ermite.MergeRequestService.MarkRead:input_type -> ermite.MarkReadRequest2446+ 20, // 37: ermite.MergeRequestService.ResolveComment:input_type -> ermite.ResolveCommentRequest
2234- 7, // 38: ermite.MergeRequestService.CreateMergeRequest:output_type -> ermite.CreateMergeRequestResponse2447+ 22, // 38: ermite.MergeRequestService.CloseMergeRequest:input_type -> ermite.CloseMergeRequestRequest
2235- 9, // 39: ermite.MergeRequestService.ListMergeRequests:output_type -> ermite.ListMergeRequestsResponse2448+ 24, // 39: ermite.MergeRequestService.MergeMergeRequest:input_type -> ermite.MergeMergeRequestRequest
2236- 11, // 40: ermite.MergeRequestService.GetMergeRequest:output_type -> ermite.GetMergeRequestResponse2449+ 26, // 40: ermite.MergeRequestService.MarkRead:input_type -> ermite.MarkReadRequest
2237- 13, // 41: ermite.MergeRequestService.AddComment:output_type -> ermite.AddCommentResponse2450+ 9, // 41: ermite.MergeRequestService.CreateMergeRequest:output_type -> ermite.CreateMergeRequestResponse
2238- 15, // 42: ermite.MergeRequestService.EditComment:output_type -> ermite.EditCommentResponse2451+ 11, // 42: ermite.MergeRequestService.ListMergeRequests:output_type -> ermite.ListMergeRequestsResponse
2239- 17, // 43: ermite.MergeRequestService.DeleteComment:output_type -> ermite.DeleteCommentResponse2452+ 13, // 43: ermite.MergeRequestService.GetMergeRequest:output_type -> ermite.GetMergeRequestResponse
2240- 19, // 44: ermite.MergeRequestService.ResolveComment:output_type -> ermite.ResolveCommentResponse2453+ 15, // 44: ermite.MergeRequestService.AddComment:output_type -> ermite.AddCommentResponse
2241- 21, // 45: ermite.MergeRequestService.CloseMergeRequest:output_type -> ermite.CloseMergeRequestResponse2454+ 17, // 45: ermite.MergeRequestService.EditComment:output_type -> ermite.EditCommentResponse
2242- 23, // 46: ermite.MergeRequestService.MergeMergeRequest:output_type -> ermite.MergeMergeRequestResponse2455+ 19, // 46: ermite.MergeRequestService.DeleteComment:output_type -> ermite.DeleteCommentResponse
2243- 25, // 47: ermite.MergeRequestService.MarkRead:output_type -> ermite.MarkReadResponse2456+ 21, // 47: ermite.MergeRequestService.ResolveComment:output_type -> ermite.ResolveCommentResponse
2244- 38, // [38:48] is the sub-list for method output_type2457+ 23, // 48: ermite.MergeRequestService.CloseMergeRequest:output_type -> ermite.CloseMergeRequestResponse
2245- 28, // [28:38] is the sub-list for method input_type2458+ 25, // 49: ermite.MergeRequestService.MergeMergeRequest:output_type -> ermite.MergeMergeRequestResponse
2246- 28, // [28:28] is the sub-list for extension type_name2459+ 27, // 50: ermite.MergeRequestService.MarkRead:output_type -> ermite.MarkReadResponse
2247- 28, // [28:28] is the sub-list for extension extendee2460+ 41, // [41:51] is the sub-list for method output_type
2248- 0, // [0:28] is the sub-list for field type_name2461+ 31, // [31:41] is the sub-list for method input_type
2462+ 31, // [31:31] is the sub-list for extension type_name
2463+ 31, // [31:31] is the sub-list for extension extendee
2464+ 0, // [0:31] is the sub-list for field type_name
2249 }2465 }
2250 2466
2251 func init() { file_ermite_merge_request_proto_init() }2467 func init() { file_ermite_merge_request_proto_init() }
@@ -2260,8 +2476,8 @@ func file_ermite_merge_request_proto_init() {
2260 File: protoimpl.DescBuilder{2476 File: protoimpl.DescBuilder{
2261 GoPackagePath: reflect.TypeOf(x{}).PkgPath(),2477 GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
2262 RawDescriptor: unsafe.Slice(unsafe.StringData(file_ermite_merge_request_proto_rawDesc), len(file_ermite_merge_request_proto_rawDesc)),2478 RawDescriptor: unsafe.Slice(unsafe.StringData(file_ermite_merge_request_proto_rawDesc), len(file_ermite_merge_request_proto_rawDesc)),
2263- NumEnums: 3,2479+ NumEnums: 4,
2264- NumMessages: 23,2480+ NumMessages: 24,
2265 NumExtensions: 0,2481 NumExtensions: 0,
2266 NumServices: 1,2482 NumServices: 1,
2267 },2483 },
M gen/ermite/repo.pb.go +1 -1 generated file: collapsed
M gen/ermite/server.pb.go +4 -1 generated file: collapsed
M gen/ermite/types.pb.go +17 -5 generated file: collapsed
M gen_test.go +6 -0
@@ -114,6 +114,12 @@ func TestEnumNumbers(t *testing.T) {
114114 if got := ermite.MergeMode_MERGE_MODE_SQUASH; got != 2 {
115115 t.Errorf("MERGE_MODE_SQUASH = %d, want 2", got)
116116 }
117+ if got := ermite.MergeMode_MERGE_MODE_MERGE_COMMIT; got != 3 {
118+ t.Errorf("MERGE_MODE_MERGE_COMMIT = %d, want 3", got)
119+ }
120+ if got := ermite.MergeabilityState_MERGEABILITY_STATE_CONFLICT; got != 4 {
121+ t.Errorf("MERGEABILITY_STATE_CONFLICT = %d, want 4", got)
122+ }
117123 if got := ermite.MergeRequestState_MERGE_REQUEST_STATE_CLOSED; got != 3 {
118124 t.Errorf("MERGE_REQUEST_STATE_CLOSED = %d, want 3", got)
119125 }
@@ -114,6 +114,12 @@ func TestEnumNumbers(t *testing.T) {
114 if got := ermite.MergeMode_MERGE_MODE_SQUASH; got != 2 {114 if got := ermite.MergeMode_MERGE_MODE_SQUASH; got != 2 {
115 t.Errorf("MERGE_MODE_SQUASH = %d, want 2", got)115 t.Errorf("MERGE_MODE_SQUASH = %d, want 2", got)
116 }116 }
117+ if got := ermite.MergeMode_MERGE_MODE_MERGE_COMMIT; got != 3 {
118+ t.Errorf("MERGE_MODE_MERGE_COMMIT = %d, want 3", got)
119+ }
120+ if got := ermite.MergeabilityState_MERGEABILITY_STATE_CONFLICT; got != 4 {
121+ t.Errorf("MERGEABILITY_STATE_CONFLICT = %d, want 4", got)
122+ }
117 if got := ermite.MergeRequestState_MERGE_REQUEST_STATE_CLOSED; got != 3 {123 if got := ermite.MergeRequestState_MERGE_REQUEST_STATE_CLOSED; got != 3 {
118 t.Errorf("MERGE_REQUEST_STATE_CLOSED = %d, want 3", got)124 t.Errorf("MERGE_REQUEST_STATE_CLOSED = %d, want 3", got)
119 }125 }
M proto/ermite/event.proto +15 -0
@@ -132,6 +132,9 @@ message Event {
132132 // IssueSubmitted: an issue is awaiting moderation. Delivered only on the
133133 // "owner" topic, never on "home" or "repo:<name>", and carries no content.
134134 IssueSubmitted issue_submitted = 21;
135+ // MergeRequestMergeability: the mergeability of an open merge request
136+ // changed.
137+ MergeRequestMergeability merge_request_mergeability = 22;
135138 }
136139 }
137140
@@ -184,6 +187,18 @@ message MergeRequestMerged {
184187 MergeRequest merge_request = 1;
185188 }
186189
190+// MergeRequestMergeability reports the mergeability of an open merge request.
191+// It is published when the state changes, or when a check settles a result
192+// that readers had not seen yet (they saw CHECKING), not on every push.
193+message MergeRequestMergeability {
194+ // Repo is the name of the repository.
195+ string repo = 1;
196+ // Number is the number of the merge request.
197+ int64 number = 2;
198+ // Mergeability is the new result.
199+ Mergeability mergeability = 3;
200+}
201+
187202 // MergeRequestClosed reports a merge request closed without merging.
188203 message MergeRequestClosed {
189204 // MergeRequest is the merge request after closing.
@@ -132,6 +132,9 @@ message Event {
132 // IssueSubmitted: an issue is awaiting moderation. Delivered only on the132 // IssueSubmitted: an issue is awaiting moderation. Delivered only on the
133 // "owner" topic, never on "home" or "repo:<name>", and carries no content.133 // "owner" topic, never on "home" or "repo:<name>", and carries no content.
134 IssueSubmitted issue_submitted = 21;134 IssueSubmitted issue_submitted = 21;
135+ // MergeRequestMergeability: the mergeability of an open merge request
136+ // changed.
137+ MergeRequestMergeability merge_request_mergeability = 22;
135 }138 }
136 }139 }
137 140
@@ -184,6 +187,18 @@ message MergeRequestMerged {
184 MergeRequest merge_request = 1;187 MergeRequest merge_request = 1;
185 }188 }
186 189
190+// MergeRequestMergeability reports the mergeability of an open merge request.
191+// It is published when the state changes, or when a check settles a result
192+// that readers had not seen yet (they saw CHECKING), not on every push.
193+message MergeRequestMergeability {
194+ // Repo is the name of the repository.
195+ string repo = 1;
196+ // Number is the number of the merge request.
197+ int64 number = 2;
198+ // Mergeability is the new result.
199+ Mergeability mergeability = 3;
200+}
201+
187 // MergeRequestClosed reports a merge request closed without merging.202 // MergeRequestClosed reports a merge request closed without merging.
188 message MergeRequestClosed {203 message MergeRequestClosed {
189 // MergeRequest is the merge request after closing.204 // MergeRequest is the merge request after closing.
M proto/ermite/merge_request.proto +58 -4
@@ -44,6 +44,50 @@ enum Verdict {
4444 VERDICT_CHANGES_REQUESTED = 2;
4545 }
4646
47+// MergeabilityState tells whether the head of an open merge request can be
48+// merged into its target.
49+enum MergeabilityState {
50+ // Not set.
51+ MERGEABILITY_STATE_UNSPECIFIED = 0;
52+ // The server has no result yet for the current tips of both branches. It
53+ // is replaced by another state when the check completes.
54+ MERGEABILITY_STATE_CHECKING = 1;
55+ // The target is an ancestor of the head: every mode can merge.
56+ MERGEABILITY_STATE_UP_TO_DATE = 2;
57+ // The target has commits the head lacks, but the head merges cleanly:
58+ // squash and merge commit can merge, fast-forward cannot.
59+ MERGEABILITY_STATE_BEHIND = 3;
60+ // The head does not merge cleanly into the target, or the branches share no
61+ // history: no mode can merge.
62+ MERGEABILITY_STATE_CONFLICT = 4;
63+}
64+
65+// Mergeability is the result of checking an open merge request against the
66+// tips of its branches.
67+message Mergeability {
68+ // State is the result.
69+ MergeabilityState state = 1;
70+ // TargetId is the commit the target branch pointed to when checked. Empty
71+ // while CHECKING.
72+ string target_id = 2;
73+ // HeadId is the commit the source branch pointed to when checked. Empty
74+ // while CHECKING.
75+ string head_id = 3;
76+ // Behind is the number of commits of the target that the head lacks. Set
77+ // only when state is BEHIND.
78+ int32 behind = 4;
79+ // BehindCapped says that Behind is a lower bound: the server stops counting
80+ // at 1,000.
81+ bool behind_capped = 5;
82+ // ConflictPaths are the paths that conflict, at most 20. Set only when
83+ // state is CONFLICT; empty when the branches share no history.
84+ repeated string conflict_paths = 6;
85+ // ConflictPathsTruncated says that more paths conflict than listed.
86+ bool conflict_paths_truncated = 7;
87+ // CheckedAt is when the server computed the result. Unset while CHECKING.
88+ google.protobuf.Timestamp checked_at = 8;
89+}
90+
4791 // MergeRequest asks to merge one branch of a repository into another branch
4892 // of the same repository. It is about a branch, not about who wrote it.
4993 message MergeRequest {
@@ -81,12 +125,19 @@ message MergeRequest {
81125 // merged or closed it is the head at that moment.
82126 string head_id = 11;
83127 // MergedCommitId is the id of the commit the target branch points to after
84- // the merge: the head for a fast-forward, the new commit for a squash.
128+ // the merge: the head for a fast-forward, the new commit for a squash or a
129+ // merge commit.
85130 // Empty unless state is MERGED.
86131 string merged_commit_id = 12;
87132 // MergeMode is how the merge request was merged. MERGE_MODE_UNSPECIFIED
88133 // unless state is MERGED.
89134 MergeMode merge_mode = 13;
135+ // Mergeability tells whether the head can be merged into the target. Set
136+ // while the merge request is OPEN, with state CHECKING until the server has
137+ // a result for the current tips; never set once merged or closed. It is a
138+ // hint: MergeMergeRequest checks again. Set only by servers with the
139+ // "merge_requests.mergeability" feature.
140+ Mergeability mergeability = 14;
90141 }
91142
92143 // Comment is a note on a merge request, either general or attached to a line
@@ -233,9 +284,12 @@ service MergeRequestService {
233284 // never merged unseen. Fails with invalid_argument if head_id is empty or
234285 // not a commit id, and with failed_precondition if the merge request is not
235286 // open, if the source branch no longer points to head_id ("branch moved,
236- // read again"), if the target is not an ancestor of the head (rebase and
237- // push again), if the mode is not allowed by RepoSettings, or if a check
238- // fails and RepoSettings.failing_checks_block is set. Merges of one
287+ // read again"), if the mode is fast-forward and the target is not an
288+ // ancestor of the head (rebase and push again, or merge with squash or
289+ // merge commit), if the mode is squash or merge commit and the head
290+ // conflicts with the target or shares no history with it (rebase and push
291+ // again), if the mode is not allowed by RepoSettings, or if a check fails
292+ // and RepoSettings.failing_checks_block is set. Merges of one
239293 // repository run one at a time. Repeating a call that succeeded fails with
240294 // failed_precondition (not open). On success the server publishes
241295 // MergeRequestMerged then Pushed for the target branch.
@@ -44,6 +44,50 @@ enum Verdict {
44 VERDICT_CHANGES_REQUESTED = 2;44 VERDICT_CHANGES_REQUESTED = 2;
45 }45 }
46 46
47+// MergeabilityState tells whether the head of an open merge request can be
48+// merged into its target.
49+enum MergeabilityState {
50+ // Not set.
51+ MERGEABILITY_STATE_UNSPECIFIED = 0;
52+ // The server has no result yet for the current tips of both branches. It
53+ // is replaced by another state when the check completes.
54+ MERGEABILITY_STATE_CHECKING = 1;
55+ // The target is an ancestor of the head: every mode can merge.
56+ MERGEABILITY_STATE_UP_TO_DATE = 2;
57+ // The target has commits the head lacks, but the head merges cleanly:
58+ // squash and merge commit can merge, fast-forward cannot.
59+ MERGEABILITY_STATE_BEHIND = 3;
60+ // The head does not merge cleanly into the target, or the branches share no
61+ // history: no mode can merge.
62+ MERGEABILITY_STATE_CONFLICT = 4;
63+}
64+
65+// Mergeability is the result of checking an open merge request against the
66+// tips of its branches.
67+message Mergeability {
68+ // State is the result.
69+ MergeabilityState state = 1;
70+ // TargetId is the commit the target branch pointed to when checked. Empty
71+ // while CHECKING.
72+ string target_id = 2;
73+ // HeadId is the commit the source branch pointed to when checked. Empty
74+ // while CHECKING.
75+ string head_id = 3;
76+ // Behind is the number of commits of the target that the head lacks. Set
77+ // only when state is BEHIND.
78+ int32 behind = 4;
79+ // BehindCapped says that Behind is a lower bound: the server stops counting
80+ // at 1,000.
81+ bool behind_capped = 5;
82+ // ConflictPaths are the paths that conflict, at most 20. Set only when
83+ // state is CONFLICT; empty when the branches share no history.
84+ repeated string conflict_paths = 6;
85+ // ConflictPathsTruncated says that more paths conflict than listed.
86+ bool conflict_paths_truncated = 7;
87+ // CheckedAt is when the server computed the result. Unset while CHECKING.
88+ google.protobuf.Timestamp checked_at = 8;
89+}
90+
47 // MergeRequest asks to merge one branch of a repository into another branch91 // MergeRequest asks to merge one branch of a repository into another branch
48 // of the same repository. It is about a branch, not about who wrote it.92 // of the same repository. It is about a branch, not about who wrote it.
49 message MergeRequest {93 message MergeRequest {
@@ -81,12 +125,19 @@ message MergeRequest {
81 // merged or closed it is the head at that moment.125 // merged or closed it is the head at that moment.
82 string head_id = 11;126 string head_id = 11;
83 // MergedCommitId is the id of the commit the target branch points to after127 // MergedCommitId is the id of the commit the target branch points to after
84- // the merge: the head for a fast-forward, the new commit for a squash.128+ // the merge: the head for a fast-forward, the new commit for a squash or a
129+ // merge commit.
85 // Empty unless state is MERGED.130 // Empty unless state is MERGED.
86 string merged_commit_id = 12;131 string merged_commit_id = 12;
87 // MergeMode is how the merge request was merged. MERGE_MODE_UNSPECIFIED132 // MergeMode is how the merge request was merged. MERGE_MODE_UNSPECIFIED
88 // unless state is MERGED.133 // unless state is MERGED.
89 MergeMode merge_mode = 13;134 MergeMode merge_mode = 13;
135+ // Mergeability tells whether the head can be merged into the target. Set
136+ // while the merge request is OPEN, with state CHECKING until the server has
137+ // a result for the current tips; never set once merged or closed. It is a
138+ // hint: MergeMergeRequest checks again. Set only by servers with the
139+ // "merge_requests.mergeability" feature.
140+ Mergeability mergeability = 14;
90 }141 }
91 142
92 // Comment is a note on a merge request, either general or attached to a line143 // Comment is a note on a merge request, either general or attached to a line
@@ -233,9 +284,12 @@ service MergeRequestService {
233 // never merged unseen. Fails with invalid_argument if head_id is empty or284 // never merged unseen. Fails with invalid_argument if head_id is empty or
234 // not a commit id, and with failed_precondition if the merge request is not285 // not a commit id, and with failed_precondition if the merge request is not
235 // open, if the source branch no longer points to head_id ("branch moved,286 // open, if the source branch no longer points to head_id ("branch moved,
236- // read again"), if the target is not an ancestor of the head (rebase and287+ // read again"), if the mode is fast-forward and the target is not an
237- // push again), if the mode is not allowed by RepoSettings, or if a check288+ // ancestor of the head (rebase and push again, or merge with squash or
238- // fails and RepoSettings.failing_checks_block is set. Merges of one289+ // merge commit), if the mode is squash or merge commit and the head
290+ // conflicts with the target or shares no history with it (rebase and push
291+ // again), if the mode is not allowed by RepoSettings, or if a check fails
292+ // and RepoSettings.failing_checks_block is set. Merges of one
239 // repository run one at a time. Repeating a call that succeeded fails with293 // repository run one at a time. Repeating a call that succeeded fails with
240 // failed_precondition (not open). On success the server publishes294 // failed_precondition (not open). On success the server publishes
241 // MergeRequestMerged then Pushed for the target branch.295 // MergeRequestMerged then Pushed for the target branch.
M proto/ermite/repo.proto +1 -1
@@ -38,7 +38,7 @@ message RepoSettings {
3838 // AllowedMergeModes are the modes with which a merge request of the
3939 // repository may be merged. It is never empty in a response and has no
4040 // duplicate. Both MERGE_MODE_FAST_FORWARD and MERGE_MODE_SQUASH are allowed
41- // by default. MERGE_MODE_UNSPECIFIED is rejected.
41+ // by default; MERGE_MODE_MERGE_COMMIT is allowed only when listed. MERGE_MODE_UNSPECIFIED is rejected.
4242 repeated MergeMode allowed_merge_modes = 1;
4343 // FailingChecksBlock says whether a merge request whose checks fail cannot be
4444 // merged. It is true at creation of the repository and always stored
@@ -38,7 +38,7 @@ message RepoSettings {
38 // AllowedMergeModes are the modes with which a merge request of the38 // AllowedMergeModes are the modes with which a merge request of the
39 // repository may be merged. It is never empty in a response and has no39 // repository may be merged. It is never empty in a response and has no
40 // duplicate. Both MERGE_MODE_FAST_FORWARD and MERGE_MODE_SQUASH are allowed40 // duplicate. Both MERGE_MODE_FAST_FORWARD and MERGE_MODE_SQUASH are allowed
41- // by default. MERGE_MODE_UNSPECIFIED is rejected.41+ // by default; MERGE_MODE_MERGE_COMMIT is allowed only when listed. MERGE_MODE_UNSPECIFIED is rejected.
42 repeated MergeMode allowed_merge_modes = 1;42 repeated MergeMode allowed_merge_modes = 1;
43 // FailingChecksBlock says whether a merge request whose checks fail cannot be43 // FailingChecksBlock says whether a merge request whose checks fail cannot be
44 // merged. It is true at creation of the repository and always stored44 // merged. It is true at creation of the repository and always stored
M proto/ermite/server.proto +5 -2
@@ -13,7 +13,7 @@ service ServerService {
1313 // it first to check compatibility.
1414 rpc GetVersion(GetVersionRequest) returns (GetVersionResponse);
1515 // GetSigningKey returns the public key with which the server signs the
16- // commits it creates (squash merges, see MergeMode). It needs no
16+ // commits it creates (squash and merge commits, see MergeMode). It needs no
1717 // authentication: the key is public, and anyone verifying a commit needs it.
1818 // Servers that implement it list "signing_key" in
1919 // GetVersionResponse.features.
@@ -57,7 +57,10 @@ message GetVersionResponse {
5757 // secrets, vars, environment, permissions and trusted fields and Run.trusted),
5858 // "ci.dispatch" (RunService.DispatchWorkflow), "ci.concurrency"
5959 // (CI_STATUS_PENDING and RunJob.concurrency_group), "ci.cache" (Job.cache)
60- // and "ci.artifacts" (JobArtifactService and ArtifactService).
60+ // and "ci.artifacts" (JobArtifactService and ArtifactService). The merge
61+ // request identifier "merge_requests.mergeability" covers
62+ // MergeRequest.mergeability, the MergeRequestMergeability event and
63+ // MERGE_MODE_MERGE_COMMIT.
6164 repeated string features = 2;
6265 }
6366
@@ -13,7 +13,7 @@ service ServerService {
13 // it first to check compatibility.13 // it first to check compatibility.
14 rpc GetVersion(GetVersionRequest) returns (GetVersionResponse);14 rpc GetVersion(GetVersionRequest) returns (GetVersionResponse);
15 // GetSigningKey returns the public key with which the server signs the15 // GetSigningKey returns the public key with which the server signs the
16- // commits it creates (squash merges, see MergeMode). It needs no16+ // commits it creates (squash and merge commits, see MergeMode). It needs no
17 // authentication: the key is public, and anyone verifying a commit needs it.17 // authentication: the key is public, and anyone verifying a commit needs it.
18 // Servers that implement it list "signing_key" in18 // Servers that implement it list "signing_key" in
19 // GetVersionResponse.features.19 // GetVersionResponse.features.
@@ -57,7 +57,10 @@ message GetVersionResponse {
57 // secrets, vars, environment, permissions and trusted fields and Run.trusted),57 // secrets, vars, environment, permissions and trusted fields and Run.trusted),
58 // "ci.dispatch" (RunService.DispatchWorkflow), "ci.concurrency"58 // "ci.dispatch" (RunService.DispatchWorkflow), "ci.concurrency"
59 // (CI_STATUS_PENDING and RunJob.concurrency_group), "ci.cache" (Job.cache)59 // (CI_STATUS_PENDING and RunJob.concurrency_group), "ci.cache" (Job.cache)
60- // and "ci.artifacts" (JobArtifactService and ArtifactService).60+ // and "ci.artifacts" (JobArtifactService and ArtifactService). The merge
61+ // request identifier "merge_requests.mergeability" covers
62+ // MergeRequest.mergeability, the MergeRequestMergeability event and
63+ // MERGE_MODE_MERGE_COMMIT.
61 repeated string features = 2;64 repeated string features = 2;
62 }65 }
63 66
M proto/ermite/types.proto +12 -3
@@ -40,9 +40,11 @@ message Commit {
4040 CommitVerification verification = 7;
4141 }
4242
43-// MergeMode is how a merge request is merged. Both modes need the target to
44-// be an ancestor of the head: a branch behind its target is rebased by its
45-// author and pushed again, the server never rebases nor creates merge commits.
43+// MergeMode is how a merge request is merged. Fast-forward needs the target
44+// to be an ancestor of the head. Squash and merge commit need the head to
45+// merge cleanly into the target, which holds when the branch is behind its
46+// target without conflict. The server never rebases: a branch that conflicts
47+// is rebased by its author and pushed again.
4648 enum MergeMode {
4749 // Not set. In MergeMergeRequestRequest.mode it means fast-forward. Rejected
4850 // in RepoSettings.allowed_merge_modes. Returned on a merge request that was
@@ -58,4 +60,11 @@ enum MergeMode {
5860 // title, " (!<number>)", a blank line and the list of the squashed commits'
5961 // summaries.
6062 MERGE_MODE_SQUASH = 2;
63+ // One new commit is created with two parents, the target tip then the head,
64+ // and the tree of the merge. It is signed by the server's key (see
65+ // ServerService.GetSigningKey); its author and committer are the server
66+ // identity. Its message is "Merge branch '<source>' into <target> (!<n>)",
67+ // a blank line and the title. The signatures of the branch's commits are
68+ // kept. Needs the "merge_requests.mergeability" feature.
69+ MERGE_MODE_MERGE_COMMIT = 3;
6170 }
@@ -40,9 +40,11 @@ message Commit {
40 CommitVerification verification = 7;40 CommitVerification verification = 7;
41 }41 }
42 42
43-// MergeMode is how a merge request is merged. Both modes need the target to43+// MergeMode is how a merge request is merged. Fast-forward needs the target
44-// be an ancestor of the head: a branch behind its target is rebased by its44+// to be an ancestor of the head. Squash and merge commit need the head to
45-// author and pushed again, the server never rebases nor creates merge commits.45+// merge cleanly into the target, which holds when the branch is behind its
46+// target without conflict. The server never rebases: a branch that conflicts
47+// is rebased by its author and pushed again.
46 enum MergeMode {48 enum MergeMode {
47 // Not set. In MergeMergeRequestRequest.mode it means fast-forward. Rejected49 // Not set. In MergeMergeRequestRequest.mode it means fast-forward. Rejected
48 // in RepoSettings.allowed_merge_modes. Returned on a merge request that was50 // in RepoSettings.allowed_merge_modes. Returned on a merge request that was
@@ -58,4 +60,11 @@ enum MergeMode {
58 // title, " (!<number>)", a blank line and the list of the squashed commits'60 // title, " (!<number>)", a blank line and the list of the squashed commits'
59 // summaries.61 // summaries.
60 MERGE_MODE_SQUASH = 2;62 MERGE_MODE_SQUASH = 2;
63+ // One new commit is created with two parents, the target tip then the head,
64+ // and the tree of the merge. It is signed by the server's key (see
65+ // ServerService.GetSigningKey); its author and committer are the server
66+ // identity. Its message is "Merge branch '<source>' into <target> (!<n>)",
67+ // a blank line and the title. The signatures of the branch's commits are
68+ // kept. Needs the "merge_requests.mergeability" feature.
69+ MERGE_MODE_MERGE_COMMIT = 3;
61 }70 }

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 2

Tags 18

↑↓ moveenter openesc close