detached 7cff81f

feat(proto): resolved issue state, ResolveIssue, issue history events and merge request issue links

commit
7cff81f5a57714f243f9c0d6edbc16a55885c6a1
author
brice · · 2026-10-22 17:49 UTC
parent
ffa9a5e
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
10 files · +1110 -384
M docs/services.md +2 -2
@@ -6,9 +6,9 @@
66 | `GitService` | `ListRefs`, `GetTree`, `ListPaths`, `GetBlob` (streamed), `ListCommits`, `GetCommit` (structured diff), `ResolveRevision` |
77 | `TokenService` | `CreateToken` (secret shown once), `ListTokens`, `RevokeToken` |
88 | `MergeRequestService` | `CreateMergeRequest`, `ListMergeRequests`, `GetMergeRequest` (commits, diff, comments), `AddComment`, `EditComment`, `DeleteComment`, `ResolveComment`, `CloseMergeRequest`, `MarkReady`, `MergeMergeRequest` (modes fast-forward, squash, merge commit), `MarkRead`, `EnableAutoMerge`, `CancelAutoMerge` (merge by itself once a check passed on the head and all its runs are complete; setting `allow_auto_merge`, `MergeRequest.auto_merge`, events `MergeRequestAutoMergeEnabled` and `MergeRequestAutoMergeCancelled`, `MergeRequestMerged.auto`; feature `merge_requests.auto_merge`). Open merge requests carry `mergeability` (up to date, behind, conflict, or checking) and `Watch` publishes `MergeRequestMergeability` each time a result is settled for new branch tips (feature `merge_requests.mergeability`) |
9-| `IssueService` | `CreateIssue`, `ListIssues`, `GetIssue` (comments, merge requests naming the issue, `closed_by_merge_request`), `AddIssueComment`, `CloseIssue`, `ReopenIssue`; owner only: `ListPendingIssues`, `ApproveIssue`, `RejectIssue`. Features `issues`, `issues.links`. Issues share numbers with merge requests |
9+| `IssueService` | `CreateIssue`, `ListIssues`, `GetIssue` (comments, merge requests naming the issue, history events, `closed_by_merge_request`), `AddIssueComment`, `CloseIssue`, `ResolveIssue`, `ReopenIssue`; owner only: `ListPendingIssues`, `ApproveIssue`, `RejectIssue`. States `OPEN`, `CLOSED`, `RESOLVED`; `ResolveIssue` needs `issue:write`. Features `issues`, `issues.links`, `issues.resolve`. 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). Event 22: `merge_request_mergeability` |
11+| `EventService` | `Watch` (streamed, resumable). Topics `home`, `repo:<name>` and `owner` (owner rights only). Events 17–21: `issue_opened`, `issue_closed`, `issue_resolved` (event 31), `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` |
@@ -6,9 +6,9 @@
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`, `MarkReady`, `MergeMergeRequest` (modes fast-forward, squash, merge commit), `MarkRead`, `EnableAutoMerge`, `CancelAutoMerge` (merge by itself once a check passed on the head and all its runs are complete; setting `allow_auto_merge`, `MergeRequest.auto_merge`, events `MergeRequestAutoMergeEnabled` and `MergeRequestAutoMergeCancelled`, `MergeRequestMerged.auto`; feature `merge_requests.auto_merge`). Open merge requests carry `mergeability` (up to date, behind, conflict, or checking) and `Watch` publishes `MergeRequestMergeability` each time a result is settled for new branch tips (feature `merge_requests.mergeability`) |8 | `MergeRequestService` | `CreateMergeRequest`, `ListMergeRequests`, `GetMergeRequest` (commits, diff, comments), `AddComment`, `EditComment`, `DeleteComment`, `ResolveComment`, `CloseMergeRequest`, `MarkReady`, `MergeMergeRequest` (modes fast-forward, squash, merge commit), `MarkRead`, `EnableAutoMerge`, `CancelAutoMerge` (merge by itself once a check passed on the head and all its runs are complete; setting `allow_auto_merge`, `MergeRequest.auto_merge`, events `MergeRequestAutoMergeEnabled` and `MergeRequestAutoMergeCancelled`, `MergeRequestMerged.auto`; feature `merge_requests.auto_merge`). Open merge requests carry `mergeability` (up to date, behind, conflict, or checking) and `Watch` publishes `MergeRequestMergeability` each time a result is settled for new branch tips (feature `merge_requests.mergeability`) |
9-| `IssueService` | `CreateIssue`, `ListIssues`, `GetIssue` (comments, merge requests naming the issue, `closed_by_merge_request`), `AddIssueComment`, `CloseIssue`, `ReopenIssue`; owner only: `ListPendingIssues`, `ApproveIssue`, `RejectIssue`. Features `issues`, `issues.links`. Issues share numbers with merge requests |9+| `IssueService` | `CreateIssue`, `ListIssues`, `GetIssue` (comments, merge requests naming the issue, history events, `closed_by_merge_request`), `AddIssueComment`, `CloseIssue`, `ResolveIssue`, `ReopenIssue`; owner only: `ListPendingIssues`, `ApproveIssue`, `RejectIssue`. States `OPEN`, `CLOSED`, `RESOLVED`; `ResolveIssue` needs `issue:write`. Features `issues`, `issues.links`, `issues.resolve`. 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). Event 22: `merge_request_mergeability` |11+| `EventService` | `Watch` (streamed, resumable). Topics `home`, `repo:<name>` and `owner` (owner rights only). Events 17–21: `issue_opened`, `issue_closed`, `issue_resolved` (event 31), `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/event.connect.go +2 -2
@@ -49,7 +49,7 @@ type EventServiceClient interface {
4949 // for merge requests, merge_request_opened, merge_request_merged,
5050 // merge_request_closed, comment_added, comment_edited, comment_deleted and
5151 // comment_resolved (a thread resolved or reopened); for issues, issue_opened,
52- // issue_closed, issue_reopened and issue_commented, and issue_submitted. Each
52+ // issue_closed, issue_resolved, issue_reopened and issue_commented, and issue_submitted. Each
5353 // one is delivered on the "repo:<name>" topic of its repository and on
5454 // "home", subject to the visibility of the repository, except
5555 // issue_submitted: it is delivered only on the "owner" topic, never on
@@ -125,7 +125,7 @@ type EventServiceHandler interface {
125125 // for merge requests, merge_request_opened, merge_request_merged,
126126 // merge_request_closed, comment_added, comment_edited, comment_deleted and
127127 // comment_resolved (a thread resolved or reopened); for issues, issue_opened,
128- // issue_closed, issue_reopened and issue_commented, and issue_submitted. Each
128+ // issue_closed, issue_resolved, issue_reopened and issue_commented, and issue_submitted. Each
129129 // one is delivered on the "repo:<name>" topic of its repository and on
130130 // "home", subject to the visibility of the repository, except
131131 // issue_submitted: it is delivered only on the "owner" topic, never on
@@ -49,7 +49,7 @@ type EventServiceClient interface {
49 // for merge requests, merge_request_opened, merge_request_merged,49 // for merge requests, merge_request_opened, merge_request_merged,
50 // merge_request_closed, comment_added, comment_edited, comment_deleted and50 // merge_request_closed, comment_added, comment_edited, comment_deleted and
51 // comment_resolved (a thread resolved or reopened); for issues, issue_opened,51 // comment_resolved (a thread resolved or reopened); for issues, issue_opened,
52- // issue_closed, issue_reopened and issue_commented, and issue_submitted. Each52+ // issue_closed, issue_resolved, issue_reopened and issue_commented, and issue_submitted. Each
53 // one is delivered on the "repo:<name>" topic of its repository and on53 // one is delivered on the "repo:<name>" topic of its repository and on
54 // "home", subject to the visibility of the repository, except54 // "home", subject to the visibility of the repository, except
55 // issue_submitted: it is delivered only on the "owner" topic, never on55 // issue_submitted: it is delivered only on the "owner" topic, never on
@@ -125,7 +125,7 @@ type EventServiceHandler interface {
125 // for merge requests, merge_request_opened, merge_request_merged,125 // for merge requests, merge_request_opened, merge_request_merged,
126 // merge_request_closed, comment_added, comment_edited, comment_deleted and126 // merge_request_closed, comment_added, comment_edited, comment_deleted and
127 // comment_resolved (a thread resolved or reopened); for issues, issue_opened,127 // comment_resolved (a thread resolved or reopened); for issues, issue_opened,
128- // issue_closed, issue_reopened and issue_commented, and issue_submitted. Each128+ // issue_closed, issue_resolved, issue_reopened and issue_commented, and issue_submitted. Each
129 // one is delivered on the "repo:<name>" topic of its repository and on129 // one is delivered on the "repo:<name>" topic of its repository and on
130 // "home", subject to the visibility of the repository, except130 // "home", subject to the visibility of the repository, except
131 // issue_submitted: it is delivered only on the "owner" topic, never on131 // issue_submitted: it is delivered only on the "owner" topic, never on
M gen/ermite/ermiteconnect/issue.connect.go +35 -2
@@ -47,6 +47,9 @@ const (
4747 IssueServiceAddIssueCommentProcedure = "/ermite.IssueService/AddIssueComment"
4848 // IssueServiceCloseIssueProcedure is the fully-qualified name of the IssueService's CloseIssue RPC.
4949 IssueServiceCloseIssueProcedure = "/ermite.IssueService/CloseIssue"
50+ // IssueServiceResolveIssueProcedure is the fully-qualified name of the IssueService's ResolveIssue
51+ // RPC.
52+ IssueServiceResolveIssueProcedure = "/ermite.IssueService/ResolveIssue"
5053 // IssueServiceReopenIssueProcedure is the fully-qualified name of the IssueService's ReopenIssue
5154 // RPC.
5255 IssueServiceReopenIssueProcedure = "/ermite.IssueService/ReopenIssue"
@@ -73,7 +76,10 @@ type IssueServiceClient interface {
7376 AddIssueComment(context.Context, *connect.Request[ermite.AddIssueCommentRequest]) (*connect.Response[ermite.AddIssueCommentResponse], error)
7477 // CloseIssue closes an issue. Needs the issue:write scope.
7578 CloseIssue(context.Context, *connect.Request[ermite.CloseIssueRequest]) (*connect.Response[ermite.CloseIssueResponse], error)
76- // ReopenIssue reopens an issue. Needs the issue:write scope.
79+ // ResolveIssue marks an open issue as resolved. Needs the issue:write scope.
80+ ResolveIssue(context.Context, *connect.Request[ermite.ResolveIssueRequest]) (*connect.Response[ermite.ResolveIssueResponse], error)
81+ // ReopenIssue reopens a closed or resolved issue. Needs the issue:write
82+ // scope.
7783 ReopenIssue(context.Context, *connect.Request[ermite.ReopenIssueRequest]) (*connect.Response[ermite.ReopenIssueResponse], error)
7884 // ListPendingIssues lists issues awaiting moderation, oldest first. Owner
7985 // rights only; anyone else gets NOT_FOUND.
@@ -127,6 +133,12 @@ func NewIssueServiceClient(httpClient connect.HTTPClient, baseURL string, opts .
127133 connect.WithSchema(issueServiceMethods.ByName("CloseIssue")),
128134 connect.WithClientOptions(opts...),
129135 ),
136+ resolveIssue: connect.NewClient[ermite.ResolveIssueRequest, ermite.ResolveIssueResponse](
137+ httpClient,
138+ baseURL+IssueServiceResolveIssueProcedure,
139+ connect.WithSchema(issueServiceMethods.ByName("ResolveIssue")),
140+ connect.WithClientOptions(opts...),
141+ ),
130142 reopenIssue: connect.NewClient[ermite.ReopenIssueRequest, ermite.ReopenIssueResponse](
131143 httpClient,
132144 baseURL+IssueServiceReopenIssueProcedure,
@@ -161,6 +173,7 @@ type issueServiceClient struct {
161173 getIssue *connect.Client[ermite.GetIssueRequest, ermite.GetIssueResponse]
162174 addIssueComment *connect.Client[ermite.AddIssueCommentRequest, ermite.AddIssueCommentResponse]
163175 closeIssue *connect.Client[ermite.CloseIssueRequest, ermite.CloseIssueResponse]
176+ resolveIssue *connect.Client[ermite.ResolveIssueRequest, ermite.ResolveIssueResponse]
164177 reopenIssue *connect.Client[ermite.ReopenIssueRequest, ermite.ReopenIssueResponse]
165178 listPendingIssues *connect.Client[ermite.ListPendingIssuesRequest, ermite.ListPendingIssuesResponse]
166179 approveIssue *connect.Client[ermite.ApproveIssueRequest, ermite.ApproveIssueResponse]
@@ -192,6 +205,11 @@ func (c *issueServiceClient) CloseIssue(ctx context.Context, req *connect.Reques
192205 return c.closeIssue.CallUnary(ctx, req)
193206 }
194207
208+// ResolveIssue calls ermite.IssueService.ResolveIssue.
209+func (c *issueServiceClient) ResolveIssue(ctx context.Context, req *connect.Request[ermite.ResolveIssueRequest]) (*connect.Response[ermite.ResolveIssueResponse], error) {
210+ return c.resolveIssue.CallUnary(ctx, req)
211+}
212+
195213 // ReopenIssue calls ermite.IssueService.ReopenIssue.
196214 func (c *issueServiceClient) ReopenIssue(ctx context.Context, req *connect.Request[ermite.ReopenIssueRequest]) (*connect.Response[ermite.ReopenIssueResponse], error) {
197215 return c.reopenIssue.CallUnary(ctx, req)
@@ -224,7 +242,10 @@ type IssueServiceHandler interface {
224242 AddIssueComment(context.Context, *connect.Request[ermite.AddIssueCommentRequest]) (*connect.Response[ermite.AddIssueCommentResponse], error)
225243 // CloseIssue closes an issue. Needs the issue:write scope.
226244 CloseIssue(context.Context, *connect.Request[ermite.CloseIssueRequest]) (*connect.Response[ermite.CloseIssueResponse], error)
227- // ReopenIssue reopens an issue. Needs the issue:write scope.
245+ // ResolveIssue marks an open issue as resolved. Needs the issue:write scope.
246+ ResolveIssue(context.Context, *connect.Request[ermite.ResolveIssueRequest]) (*connect.Response[ermite.ResolveIssueResponse], error)
247+ // ReopenIssue reopens a closed or resolved issue. Needs the issue:write
248+ // scope.
228249 ReopenIssue(context.Context, *connect.Request[ermite.ReopenIssueRequest]) (*connect.Response[ermite.ReopenIssueResponse], error)
229250 // ListPendingIssues lists issues awaiting moderation, oldest first. Owner
230251 // rights only; anyone else gets NOT_FOUND.
@@ -274,6 +295,12 @@ func NewIssueServiceHandler(svc IssueServiceHandler, opts ...connect.HandlerOpti
274295 connect.WithSchema(issueServiceMethods.ByName("CloseIssue")),
275296 connect.WithHandlerOptions(opts...),
276297 )
298+ issueServiceResolveIssueHandler := connect.NewUnaryHandler(
299+ IssueServiceResolveIssueProcedure,
300+ svc.ResolveIssue,
301+ connect.WithSchema(issueServiceMethods.ByName("ResolveIssue")),
302+ connect.WithHandlerOptions(opts...),
303+ )
277304 issueServiceReopenIssueHandler := connect.NewUnaryHandler(
278305 IssueServiceReopenIssueProcedure,
279306 svc.ReopenIssue,
@@ -310,6 +337,8 @@ func NewIssueServiceHandler(svc IssueServiceHandler, opts ...connect.HandlerOpti
310337 issueServiceAddIssueCommentHandler.ServeHTTP(w, r)
311338 case IssueServiceCloseIssueProcedure:
312339 issueServiceCloseIssueHandler.ServeHTTP(w, r)
340+ case IssueServiceResolveIssueProcedure:
341+ issueServiceResolveIssueHandler.ServeHTTP(w, r)
313342 case IssueServiceReopenIssueProcedure:
314343 issueServiceReopenIssueHandler.ServeHTTP(w, r)
315344 case IssueServiceListPendingIssuesProcedure:
@@ -347,6 +376,10 @@ func (UnimplementedIssueServiceHandler) CloseIssue(context.Context, *connect.Req
347376 return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.IssueService.CloseIssue is not implemented"))
348377 }
349378
379+func (UnimplementedIssueServiceHandler) ResolveIssue(context.Context, *connect.Request[ermite.ResolveIssueRequest]) (*connect.Response[ermite.ResolveIssueResponse], error) {
380+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.IssueService.ResolveIssue is not implemented"))
381+}
382+
350383 func (UnimplementedIssueServiceHandler) ReopenIssue(context.Context, *connect.Request[ermite.ReopenIssueRequest]) (*connect.Response[ermite.ReopenIssueResponse], error) {
351384 return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.IssueService.ReopenIssue is not implemented"))
352385 }
@@ -47,6 +47,9 @@ const (
47 IssueServiceAddIssueCommentProcedure = "/ermite.IssueService/AddIssueComment"47 IssueServiceAddIssueCommentProcedure = "/ermite.IssueService/AddIssueComment"
48 // IssueServiceCloseIssueProcedure is the fully-qualified name of the IssueService's CloseIssue RPC.48 // IssueServiceCloseIssueProcedure is the fully-qualified name of the IssueService's CloseIssue RPC.
49 IssueServiceCloseIssueProcedure = "/ermite.IssueService/CloseIssue"49 IssueServiceCloseIssueProcedure = "/ermite.IssueService/CloseIssue"
50+ // IssueServiceResolveIssueProcedure is the fully-qualified name of the IssueService's ResolveIssue
51+ // RPC.
52+ IssueServiceResolveIssueProcedure = "/ermite.IssueService/ResolveIssue"
50 // IssueServiceReopenIssueProcedure is the fully-qualified name of the IssueService's ReopenIssue53 // IssueServiceReopenIssueProcedure is the fully-qualified name of the IssueService's ReopenIssue
51 // RPC.54 // RPC.
52 IssueServiceReopenIssueProcedure = "/ermite.IssueService/ReopenIssue"55 IssueServiceReopenIssueProcedure = "/ermite.IssueService/ReopenIssue"
@@ -73,7 +76,10 @@ type IssueServiceClient interface {
73 AddIssueComment(context.Context, *connect.Request[ermite.AddIssueCommentRequest]) (*connect.Response[ermite.AddIssueCommentResponse], error)76 AddIssueComment(context.Context, *connect.Request[ermite.AddIssueCommentRequest]) (*connect.Response[ermite.AddIssueCommentResponse], error)
74 // CloseIssue closes an issue. Needs the issue:write scope.77 // CloseIssue closes an issue. Needs the issue:write scope.
75 CloseIssue(context.Context, *connect.Request[ermite.CloseIssueRequest]) (*connect.Response[ermite.CloseIssueResponse], error)78 CloseIssue(context.Context, *connect.Request[ermite.CloseIssueRequest]) (*connect.Response[ermite.CloseIssueResponse], error)
76- // ReopenIssue reopens an issue. Needs the issue:write scope.79+ // ResolveIssue marks an open issue as resolved. Needs the issue:write scope.
80+ ResolveIssue(context.Context, *connect.Request[ermite.ResolveIssueRequest]) (*connect.Response[ermite.ResolveIssueResponse], error)
81+ // ReopenIssue reopens a closed or resolved issue. Needs the issue:write
82+ // scope.
77 ReopenIssue(context.Context, *connect.Request[ermite.ReopenIssueRequest]) (*connect.Response[ermite.ReopenIssueResponse], error)83 ReopenIssue(context.Context, *connect.Request[ermite.ReopenIssueRequest]) (*connect.Response[ermite.ReopenIssueResponse], error)
78 // ListPendingIssues lists issues awaiting moderation, oldest first. Owner84 // ListPendingIssues lists issues awaiting moderation, oldest first. Owner
79 // rights only; anyone else gets NOT_FOUND.85 // rights only; anyone else gets NOT_FOUND.
@@ -127,6 +133,12 @@ func NewIssueServiceClient(httpClient connect.HTTPClient, baseURL string, opts .
127 connect.WithSchema(issueServiceMethods.ByName("CloseIssue")),133 connect.WithSchema(issueServiceMethods.ByName("CloseIssue")),
128 connect.WithClientOptions(opts...),134 connect.WithClientOptions(opts...),
129 ),135 ),
136+ resolveIssue: connect.NewClient[ermite.ResolveIssueRequest, ermite.ResolveIssueResponse](
137+ httpClient,
138+ baseURL+IssueServiceResolveIssueProcedure,
139+ connect.WithSchema(issueServiceMethods.ByName("ResolveIssue")),
140+ connect.WithClientOptions(opts...),
141+ ),
130 reopenIssue: connect.NewClient[ermite.ReopenIssueRequest, ermite.ReopenIssueResponse](142 reopenIssue: connect.NewClient[ermite.ReopenIssueRequest, ermite.ReopenIssueResponse](
131 httpClient,143 httpClient,
132 baseURL+IssueServiceReopenIssueProcedure,144 baseURL+IssueServiceReopenIssueProcedure,
@@ -161,6 +173,7 @@ type issueServiceClient struct {
161 getIssue *connect.Client[ermite.GetIssueRequest, ermite.GetIssueResponse]173 getIssue *connect.Client[ermite.GetIssueRequest, ermite.GetIssueResponse]
162 addIssueComment *connect.Client[ermite.AddIssueCommentRequest, ermite.AddIssueCommentResponse]174 addIssueComment *connect.Client[ermite.AddIssueCommentRequest, ermite.AddIssueCommentResponse]
163 closeIssue *connect.Client[ermite.CloseIssueRequest, ermite.CloseIssueResponse]175 closeIssue *connect.Client[ermite.CloseIssueRequest, ermite.CloseIssueResponse]
176+ resolveIssue *connect.Client[ermite.ResolveIssueRequest, ermite.ResolveIssueResponse]
164 reopenIssue *connect.Client[ermite.ReopenIssueRequest, ermite.ReopenIssueResponse]177 reopenIssue *connect.Client[ermite.ReopenIssueRequest, ermite.ReopenIssueResponse]
165 listPendingIssues *connect.Client[ermite.ListPendingIssuesRequest, ermite.ListPendingIssuesResponse]178 listPendingIssues *connect.Client[ermite.ListPendingIssuesRequest, ermite.ListPendingIssuesResponse]
166 approveIssue *connect.Client[ermite.ApproveIssueRequest, ermite.ApproveIssueResponse]179 approveIssue *connect.Client[ermite.ApproveIssueRequest, ermite.ApproveIssueResponse]
@@ -192,6 +205,11 @@ func (c *issueServiceClient) CloseIssue(ctx context.Context, req *connect.Reques
192 return c.closeIssue.CallUnary(ctx, req)205 return c.closeIssue.CallUnary(ctx, req)
193 }206 }
194 207
208+// ResolveIssue calls ermite.IssueService.ResolveIssue.
209+func (c *issueServiceClient) ResolveIssue(ctx context.Context, req *connect.Request[ermite.ResolveIssueRequest]) (*connect.Response[ermite.ResolveIssueResponse], error) {
210+ return c.resolveIssue.CallUnary(ctx, req)
211+}
212+
195 // ReopenIssue calls ermite.IssueService.ReopenIssue.213 // ReopenIssue calls ermite.IssueService.ReopenIssue.
196 func (c *issueServiceClient) ReopenIssue(ctx context.Context, req *connect.Request[ermite.ReopenIssueRequest]) (*connect.Response[ermite.ReopenIssueResponse], error) {214 func (c *issueServiceClient) ReopenIssue(ctx context.Context, req *connect.Request[ermite.ReopenIssueRequest]) (*connect.Response[ermite.ReopenIssueResponse], error) {
197 return c.reopenIssue.CallUnary(ctx, req)215 return c.reopenIssue.CallUnary(ctx, req)
@@ -224,7 +242,10 @@ type IssueServiceHandler interface {
224 AddIssueComment(context.Context, *connect.Request[ermite.AddIssueCommentRequest]) (*connect.Response[ermite.AddIssueCommentResponse], error)242 AddIssueComment(context.Context, *connect.Request[ermite.AddIssueCommentRequest]) (*connect.Response[ermite.AddIssueCommentResponse], error)
225 // CloseIssue closes an issue. Needs the issue:write scope.243 // CloseIssue closes an issue. Needs the issue:write scope.
226 CloseIssue(context.Context, *connect.Request[ermite.CloseIssueRequest]) (*connect.Response[ermite.CloseIssueResponse], error)244 CloseIssue(context.Context, *connect.Request[ermite.CloseIssueRequest]) (*connect.Response[ermite.CloseIssueResponse], error)
227- // ReopenIssue reopens an issue. Needs the issue:write scope.245+ // ResolveIssue marks an open issue as resolved. Needs the issue:write scope.
246+ ResolveIssue(context.Context, *connect.Request[ermite.ResolveIssueRequest]) (*connect.Response[ermite.ResolveIssueResponse], error)
247+ // ReopenIssue reopens a closed or resolved issue. Needs the issue:write
248+ // scope.
228 ReopenIssue(context.Context, *connect.Request[ermite.ReopenIssueRequest]) (*connect.Response[ermite.ReopenIssueResponse], error)249 ReopenIssue(context.Context, *connect.Request[ermite.ReopenIssueRequest]) (*connect.Response[ermite.ReopenIssueResponse], error)
229 // ListPendingIssues lists issues awaiting moderation, oldest first. Owner250 // ListPendingIssues lists issues awaiting moderation, oldest first. Owner
230 // rights only; anyone else gets NOT_FOUND.251 // rights only; anyone else gets NOT_FOUND.
@@ -274,6 +295,12 @@ func NewIssueServiceHandler(svc IssueServiceHandler, opts ...connect.HandlerOpti
274 connect.WithSchema(issueServiceMethods.ByName("CloseIssue")),295 connect.WithSchema(issueServiceMethods.ByName("CloseIssue")),
275 connect.WithHandlerOptions(opts...),296 connect.WithHandlerOptions(opts...),
276 )297 )
298+ issueServiceResolveIssueHandler := connect.NewUnaryHandler(
299+ IssueServiceResolveIssueProcedure,
300+ svc.ResolveIssue,
301+ connect.WithSchema(issueServiceMethods.ByName("ResolveIssue")),
302+ connect.WithHandlerOptions(opts...),
303+ )
277 issueServiceReopenIssueHandler := connect.NewUnaryHandler(304 issueServiceReopenIssueHandler := connect.NewUnaryHandler(
278 IssueServiceReopenIssueProcedure,305 IssueServiceReopenIssueProcedure,
279 svc.ReopenIssue,306 svc.ReopenIssue,
@@ -310,6 +337,8 @@ func NewIssueServiceHandler(svc IssueServiceHandler, opts ...connect.HandlerOpti
310 issueServiceAddIssueCommentHandler.ServeHTTP(w, r)337 issueServiceAddIssueCommentHandler.ServeHTTP(w, r)
311 case IssueServiceCloseIssueProcedure:338 case IssueServiceCloseIssueProcedure:
312 issueServiceCloseIssueHandler.ServeHTTP(w, r)339 issueServiceCloseIssueHandler.ServeHTTP(w, r)
340+ case IssueServiceResolveIssueProcedure:
341+ issueServiceResolveIssueHandler.ServeHTTP(w, r)
313 case IssueServiceReopenIssueProcedure:342 case IssueServiceReopenIssueProcedure:
314 issueServiceReopenIssueHandler.ServeHTTP(w, r)343 issueServiceReopenIssueHandler.ServeHTTP(w, r)
315 case IssueServiceListPendingIssuesProcedure:344 case IssueServiceListPendingIssuesProcedure:
@@ -347,6 +376,10 @@ func (UnimplementedIssueServiceHandler) CloseIssue(context.Context, *connect.Req
347 return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.IssueService.CloseIssue is not implemented"))376 return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.IssueService.CloseIssue is not implemented"))
348 }377 }
349 378
379+func (UnimplementedIssueServiceHandler) ResolveIssue(context.Context, *connect.Request[ermite.ResolveIssueRequest]) (*connect.Response[ermite.ResolveIssueResponse], error) {
380+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.IssueService.ResolveIssue is not implemented"))
381+}
382+
350 func (UnimplementedIssueServiceHandler) ReopenIssue(context.Context, *connect.Request[ermite.ReopenIssueRequest]) (*connect.Response[ermite.ReopenIssueResponse], error) {383 func (UnimplementedIssueServiceHandler) ReopenIssue(context.Context, *connect.Request[ermite.ReopenIssueRequest]) (*connect.Response[ermite.ReopenIssueResponse], error) {
351 return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.IssueService.ReopenIssue is not implemented"))384 return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.IssueService.ReopenIssue is not implemented"))
352 }385 }
M gen/ermite/event.pb.go +175 -103 generated file: collapsed
M gen/ermite/issue.pb.go +216 -83 generated file: collapsed
M gen/ermite/merge_request.pb.go +544 -174
@@ -256,6 +256,128 @@ func (MergeabilityState) EnumDescriptor() ([]byte, []int) {
256256 return file_ermite_merge_request_proto_rawDescGZIP(), []int{3}
257257 }
258258
259+// MergeRequestIssueState is where an issue named by a merge request is in its
260+// life. Values share their numbers with IssueState (3, awaiting moderation,
261+// is never shown here). It exists because issue.proto imports this file and
262+// cannot be imported back.
263+type MergeRequestIssueState int32
264+
265+const (
266+ // Not set. Never returned by the server.
267+ MergeRequestIssueState_MERGE_REQUEST_ISSUE_STATE_UNSPECIFIED MergeRequestIssueState = 0
268+ // The issue is open.
269+ MergeRequestIssueState_MERGE_REQUEST_ISSUE_STATE_OPEN MergeRequestIssueState = 1
270+ // The issue is closed without being resolved.
271+ MergeRequestIssueState_MERGE_REQUEST_ISSUE_STATE_CLOSED MergeRequestIssueState = 2
272+ // The issue was resolved, by a merge or by hand.
273+ MergeRequestIssueState_MERGE_REQUEST_ISSUE_STATE_RESOLVED MergeRequestIssueState = 4
274+)
275+
276+// Enum value maps for MergeRequestIssueState.
277+var (
278+ MergeRequestIssueState_name = map[int32]string{
279+ 0: "MERGE_REQUEST_ISSUE_STATE_UNSPECIFIED",
280+ 1: "MERGE_REQUEST_ISSUE_STATE_OPEN",
281+ 2: "MERGE_REQUEST_ISSUE_STATE_CLOSED",
282+ 4: "MERGE_REQUEST_ISSUE_STATE_RESOLVED",
283+ }
284+ MergeRequestIssueState_value = map[string]int32{
285+ "MERGE_REQUEST_ISSUE_STATE_UNSPECIFIED": 0,
286+ "MERGE_REQUEST_ISSUE_STATE_OPEN": 1,
287+ "MERGE_REQUEST_ISSUE_STATE_CLOSED": 2,
288+ "MERGE_REQUEST_ISSUE_STATE_RESOLVED": 4,
289+ }
290+)
291+
292+func (x MergeRequestIssueState) Enum() *MergeRequestIssueState {
293+ p := new(MergeRequestIssueState)
294+ *p = x
295+ return p
296+}
297+
298+func (x MergeRequestIssueState) String() string {
299+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
300+}
301+
302+func (MergeRequestIssueState) Descriptor() protoreflect.EnumDescriptor {
303+ return file_ermite_merge_request_proto_enumTypes[4].Descriptor()
304+}
305+
306+func (MergeRequestIssueState) Type() protoreflect.EnumType {
307+ return &file_ermite_merge_request_proto_enumTypes[4]
308+}
309+
310+func (x MergeRequestIssueState) Number() protoreflect.EnumNumber {
311+ return protoreflect.EnumNumber(x)
312+}
313+
314+// Deprecated: Use MergeRequestIssueState.Descriptor instead.
315+func (MergeRequestIssueState) EnumDescriptor() ([]byte, []int) {
316+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{4}
317+}
318+
319+// IssueEventKind is what happened in an IssueEvent.
320+type IssueEventKind int32
321+
322+const (
323+ // Not set. Never returned by the server.
324+ IssueEventKind_ISSUE_EVENT_KIND_UNSPECIFIED IssueEventKind = 0
325+ // A merge request started naming the issue; closes says whether with a
326+ // closing reference.
327+ IssueEventKind_ISSUE_EVENT_KIND_REFERENCED IssueEventKind = 1
328+ // The issue was closed without being resolved.
329+ IssueEventKind_ISSUE_EVENT_KIND_CLOSED IssueEventKind = 2
330+ // The issue was reopened.
331+ IssueEventKind_ISSUE_EVENT_KIND_REOPENED IssueEventKind = 3
332+ // The issue was resolved; merge_request is set when a merge resolved it.
333+ IssueEventKind_ISSUE_EVENT_KIND_RESOLVED IssueEventKind = 4
334+)
335+
336+// Enum value maps for IssueEventKind.
337+var (
338+ IssueEventKind_name = map[int32]string{
339+ 0: "ISSUE_EVENT_KIND_UNSPECIFIED",
340+ 1: "ISSUE_EVENT_KIND_REFERENCED",
341+ 2: "ISSUE_EVENT_KIND_CLOSED",
342+ 3: "ISSUE_EVENT_KIND_REOPENED",
343+ 4: "ISSUE_EVENT_KIND_RESOLVED",
344+ }
345+ IssueEventKind_value = map[string]int32{
346+ "ISSUE_EVENT_KIND_UNSPECIFIED": 0,
347+ "ISSUE_EVENT_KIND_REFERENCED": 1,
348+ "ISSUE_EVENT_KIND_CLOSED": 2,
349+ "ISSUE_EVENT_KIND_REOPENED": 3,
350+ "ISSUE_EVENT_KIND_RESOLVED": 4,
351+ }
352+)
353+
354+func (x IssueEventKind) Enum() *IssueEventKind {
355+ p := new(IssueEventKind)
356+ *p = x
357+ return p
358+}
359+
360+func (x IssueEventKind) String() string {
361+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
362+}
363+
364+func (IssueEventKind) Descriptor() protoreflect.EnumDescriptor {
365+ return file_ermite_merge_request_proto_enumTypes[5].Descriptor()
366+}
367+
368+func (IssueEventKind) Type() protoreflect.EnumType {
369+ return &file_ermite_merge_request_proto_enumTypes[5]
370+}
371+
372+func (x IssueEventKind) Number() protoreflect.EnumNumber {
373+ return protoreflect.EnumNumber(x)
374+}
375+
376+// Deprecated: Use IssueEventKind.Descriptor instead.
377+func (IssueEventKind) EnumDescriptor() ([]byte, []int) {
378+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{5}
379+}
380+
259381 // Mergeability is the result of checking an open merge request against the
260382 // tips of its branches.
261383 type Mergeability struct {
@@ -1185,6 +1307,195 @@ func (x *ListMergeRequestsResponse) GetNextPageToken() string {
11851307 return ""
11861308 }
11871309
1310+// MergeRequestIssue is an issue of the same repository that a merge request
1311+// names ("#N").
1312+type MergeRequestIssue struct {
1313+ state protoimpl.MessageState `protogen:"open.v1"`
1314+ // Number is the number of the issue.
1315+ Number int64 `protobuf:"varint,1,opt,name=number,proto3" json:"number,omitempty"`
1316+ // Title is the title of the issue.
1317+ Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
1318+ // State is where the issue is in its life.
1319+ State MergeRequestIssueState `protobuf:"varint,3,opt,name=state,proto3,enum=ermite.MergeRequestIssueState" json:"state,omitempty"`
1320+ // Closes says that a closing reference names the issue: merging the request
1321+ // resolves it.
1322+ Closes bool `protobuf:"varint,4,opt,name=closes,proto3" json:"closes,omitempty"`
1323+ unknownFields protoimpl.UnknownFields
1324+ sizeCache protoimpl.SizeCache
1325+}
1326+
1327+func (x *MergeRequestIssue) Reset() {
1328+ *x = MergeRequestIssue{}
1329+ mi := &file_ermite_merge_request_proto_msgTypes[9]
1330+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1331+ ms.StoreMessageInfo(mi)
1332+}
1333+
1334+func (x *MergeRequestIssue) String() string {
1335+ return protoimpl.X.MessageStringOf(x)
1336+}
1337+
1338+func (*MergeRequestIssue) ProtoMessage() {}
1339+
1340+func (x *MergeRequestIssue) ProtoReflect() protoreflect.Message {
1341+ mi := &file_ermite_merge_request_proto_msgTypes[9]
1342+ if x != nil {
1343+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1344+ if ms.LoadMessageInfo() == nil {
1345+ ms.StoreMessageInfo(mi)
1346+ }
1347+ return ms
1348+ }
1349+ return mi.MessageOf(x)
1350+}
1351+
1352+// Deprecated: Use MergeRequestIssue.ProtoReflect.Descriptor instead.
1353+func (*MergeRequestIssue) Descriptor() ([]byte, []int) {
1354+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{9}
1355+}
1356+
1357+func (x *MergeRequestIssue) GetNumber() int64 {
1358+ if x != nil {
1359+ return x.Number
1360+ }
1361+ return 0
1362+}
1363+
1364+func (x *MergeRequestIssue) GetTitle() string {
1365+ if x != nil {
1366+ return x.Title
1367+ }
1368+ return ""
1369+}
1370+
1371+func (x *MergeRequestIssue) GetState() MergeRequestIssueState {
1372+ if x != nil {
1373+ return x.State
1374+ }
1375+ return MergeRequestIssueState_MERGE_REQUEST_ISSUE_STATE_UNSPECIFIED
1376+}
1377+
1378+func (x *MergeRequestIssue) GetCloses() bool {
1379+ if x != nil {
1380+ return x.Closes
1381+ }
1382+ return false
1383+}
1384+
1385+// IssueEvent is one entry in the history of an issue. Events are append-only:
1386+// a reference that later disappears does not remove its event.
1387+type IssueEvent struct {
1388+ state protoimpl.MessageState `protogen:"open.v1"`
1389+ // Id identifies the event. Opaque.
1390+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
1391+ // Kind is what happened.
1392+ Kind IssueEventKind `protobuf:"varint,2,opt,name=kind,proto3,enum=ermite.IssueEventKind" json:"kind,omitempty"`
1393+ // Issue is the number of the issue.
1394+ Issue int64 `protobuf:"varint,3,opt,name=issue,proto3" json:"issue,omitempty"`
1395+ // MergeRequest is the number of the merge request involved; 0 if none.
1396+ MergeRequest int64 `protobuf:"varint,4,opt,name=merge_request,json=mergeRequest,proto3" json:"merge_request,omitempty"`
1397+ // MergeRequestTitle is the title of that merge request at read time; empty
1398+ // if none.
1399+ MergeRequestTitle string `protobuf:"bytes,5,opt,name=merge_request_title,json=mergeRequestTitle,proto3" json:"merge_request_title,omitempty"`
1400+ // Closes says that the reference was a closing one. Only set for
1401+ // ISSUE_EVENT_KIND_REFERENCED.
1402+ Closes bool `protobuf:"varint,6,opt,name=closes,proto3" json:"closes,omitempty"`
1403+ // Actor names who caused the event, like Issue.author: the label of the
1404+ // token or session. For events triggered by a merge, the label of who
1405+ // merged.
1406+ Actor string `protobuf:"bytes,7,opt,name=actor,proto3" json:"actor,omitempty"`
1407+ // CreatedAt is when the event happened.
1408+ CreatedAt *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
1409+ unknownFields protoimpl.UnknownFields
1410+ sizeCache protoimpl.SizeCache
1411+}
1412+
1413+func (x *IssueEvent) Reset() {
1414+ *x = IssueEvent{}
1415+ mi := &file_ermite_merge_request_proto_msgTypes[10]
1416+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1417+ ms.StoreMessageInfo(mi)
1418+}
1419+
1420+func (x *IssueEvent) String() string {
1421+ return protoimpl.X.MessageStringOf(x)
1422+}
1423+
1424+func (*IssueEvent) ProtoMessage() {}
1425+
1426+func (x *IssueEvent) ProtoReflect() protoreflect.Message {
1427+ mi := &file_ermite_merge_request_proto_msgTypes[10]
1428+ if x != nil {
1429+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1430+ if ms.LoadMessageInfo() == nil {
1431+ ms.StoreMessageInfo(mi)
1432+ }
1433+ return ms
1434+ }
1435+ return mi.MessageOf(x)
1436+}
1437+
1438+// Deprecated: Use IssueEvent.ProtoReflect.Descriptor instead.
1439+func (*IssueEvent) Descriptor() ([]byte, []int) {
1440+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{10}
1441+}
1442+
1443+func (x *IssueEvent) GetId() string {
1444+ if x != nil {
1445+ return x.Id
1446+ }
1447+ return ""
1448+}
1449+
1450+func (x *IssueEvent) GetKind() IssueEventKind {
1451+ if x != nil {
1452+ return x.Kind
1453+ }
1454+ return IssueEventKind_ISSUE_EVENT_KIND_UNSPECIFIED
1455+}
1456+
1457+func (x *IssueEvent) GetIssue() int64 {
1458+ if x != nil {
1459+ return x.Issue
1460+ }
1461+ return 0
1462+}
1463+
1464+func (x *IssueEvent) GetMergeRequest() int64 {
1465+ if x != nil {
1466+ return x.MergeRequest
1467+ }
1468+ return 0
1469+}
1470+
1471+func (x *IssueEvent) GetMergeRequestTitle() string {
1472+ if x != nil {
1473+ return x.MergeRequestTitle
1474+ }
1475+ return ""
1476+}
1477+
1478+func (x *IssueEvent) GetCloses() bool {
1479+ if x != nil {
1480+ return x.Closes
1481+ }
1482+ return false
1483+}
1484+
1485+func (x *IssueEvent) GetActor() string {
1486+ if x != nil {
1487+ return x.Actor
1488+ }
1489+ return ""
1490+}
1491+
1492+func (x *IssueEvent) GetCreatedAt() *timestamppb.Timestamp {
1493+ if x != nil {
1494+ return x.CreatedAt
1495+ }
1496+ return nil
1497+}
1498+
11881499 // GetMergeRequestRequest selects a merge request.
11891500 type GetMergeRequestRequest struct {
11901501 state protoimpl.MessageState `protogen:"open.v1"`
@@ -1205,7 +1516,7 @@ type GetMergeRequestRequest struct {
12051516
12061517 func (x *GetMergeRequestRequest) Reset() {
12071518 *x = GetMergeRequestRequest{}
1208- mi := &file_ermite_merge_request_proto_msgTypes[9]
1519+ mi := &file_ermite_merge_request_proto_msgTypes[11]
12091520 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
12101521 ms.StoreMessageInfo(mi)
12111522 }
@@ -1217,7 +1528,7 @@ func (x *GetMergeRequestRequest) String() string {
12171528 func (*GetMergeRequestRequest) ProtoMessage() {}
12181529
12191530 func (x *GetMergeRequestRequest) ProtoReflect() protoreflect.Message {
1220- mi := &file_ermite_merge_request_proto_msgTypes[9]
1531+ mi := &file_ermite_merge_request_proto_msgTypes[11]
12211532 if x != nil {
12221533 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
12231534 if ms.LoadMessageInfo() == nil {
@@ -1230,7 +1541,7 @@ func (x *GetMergeRequestRequest) ProtoReflect() protoreflect.Message {
12301541
12311542 // Deprecated: Use GetMergeRequestRequest.ProtoReflect.Descriptor instead.
12321543 func (*GetMergeRequestRequest) Descriptor() ([]byte, []int) {
1233- return file_ermite_merge_request_proto_rawDescGZIP(), []int{9}
1544+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{11}
12341545 }
12351546
12361547 func (x *GetMergeRequestRequest) GetRepo() string {
@@ -1289,14 +1600,21 @@ type GetMergeRequestResponse struct {
12891600 LastReadLost bool `protobuf:"varint,9,opt,name=last_read_lost,json=lastReadLost,proto3" json:"last_read_lost,omitempty"`
12901601 // Verdicts are the current verdicts, one per author who gave one, ordered
12911602 // by the comment that carries them, oldest first.
1292- Verdicts []*AuthorVerdict `protobuf:"bytes,10,rep,name=verdicts,proto3" json:"verdicts,omitempty"`
1603+ Verdicts []*AuthorVerdict `protobuf:"bytes,10,rep,name=verdicts,proto3" json:"verdicts,omitempty"`
1604+ // Issues are the issues of the same repository that the merge request names,
1605+ // ascending by number, at most 100. Empty when issues are off.
1606+ Issues []*MergeRequestIssue `protobuf:"bytes,11,rep,name=issues,proto3" json:"issues,omitempty"`
1607+ // IssueEvents are the history entries that involve this merge request: the
1608+ // REFERENCED and RESOLVED events of the issues it names, oldest first, at
1609+ // most 500.
1610+ IssueEvents []*IssueEvent `protobuf:"bytes,12,rep,name=issue_events,json=issueEvents,proto3" json:"issue_events,omitempty"`
12931611 unknownFields protoimpl.UnknownFields
12941612 sizeCache protoimpl.SizeCache
12951613 }
12961614
12971615 func (x *GetMergeRequestResponse) Reset() {
12981616 *x = GetMergeRequestResponse{}
1299- mi := &file_ermite_merge_request_proto_msgTypes[10]
1617+ mi := &file_ermite_merge_request_proto_msgTypes[12]
13001618 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
13011619 ms.StoreMessageInfo(mi)
13021620 }
@@ -1308,7 +1626,7 @@ func (x *GetMergeRequestResponse) String() string {
13081626 func (*GetMergeRequestResponse) ProtoMessage() {}
13091627
13101628 func (x *GetMergeRequestResponse) ProtoReflect() protoreflect.Message {
1311- mi := &file_ermite_merge_request_proto_msgTypes[10]
1629+ mi := &file_ermite_merge_request_proto_msgTypes[12]
13121630 if x != nil {
13131631 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
13141632 if ms.LoadMessageInfo() == nil {
@@ -1321,7 +1639,7 @@ func (x *GetMergeRequestResponse) ProtoReflect() protoreflect.Message {
13211639
13221640 // Deprecated: Use GetMergeRequestResponse.ProtoReflect.Descriptor instead.
13231641 func (*GetMergeRequestResponse) Descriptor() ([]byte, []int) {
1324- return file_ermite_merge_request_proto_rawDescGZIP(), []int{10}
1642+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{12}
13251643 }
13261644
13271645 func (x *GetMergeRequestResponse) GetMergeRequest() *MergeRequest {
@@ -1394,6 +1712,20 @@ func (x *GetMergeRequestResponse) GetVerdicts() []*AuthorVerdict {
13941712 return nil
13951713 }
13961714
1715+func (x *GetMergeRequestResponse) GetIssues() []*MergeRequestIssue {
1716+ if x != nil {
1717+ return x.Issues
1718+ }
1719+ return nil
1720+}
1721+
1722+func (x *GetMergeRequestResponse) GetIssueEvents() []*IssueEvent {
1723+ if x != nil {
1724+ return x.IssueEvents
1725+ }
1726+ return nil
1727+}
1728+
13971729 // AddCommentRequest describes the comment to add.
13981730 type AddCommentRequest struct {
13991731 state protoimpl.MessageState `protogen:"open.v1"`
@@ -1430,7 +1762,7 @@ type AddCommentRequest struct {
14301762
14311763 func (x *AddCommentRequest) Reset() {
14321764 *x = AddCommentRequest{}
1433- mi := &file_ermite_merge_request_proto_msgTypes[11]
1765+ mi := &file_ermite_merge_request_proto_msgTypes[13]
14341766 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
14351767 ms.StoreMessageInfo(mi)
14361768 }
@@ -1442,7 +1774,7 @@ func (x *AddCommentRequest) String() string {
14421774 func (*AddCommentRequest) ProtoMessage() {}
14431775
14441776 func (x *AddCommentRequest) ProtoReflect() protoreflect.Message {
1445- mi := &file_ermite_merge_request_proto_msgTypes[11]
1777+ mi := &file_ermite_merge_request_proto_msgTypes[13]
14461778 if x != nil {
14471779 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
14481780 if ms.LoadMessageInfo() == nil {
@@ -1455,7 +1787,7 @@ func (x *AddCommentRequest) ProtoReflect() protoreflect.Message {
14551787
14561788 // Deprecated: Use AddCommentRequest.ProtoReflect.Descriptor instead.
14571789 func (*AddCommentRequest) Descriptor() ([]byte, []int) {
1458- return file_ermite_merge_request_proto_rawDescGZIP(), []int{11}
1790+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{13}
14591791 }
14601792
14611793 func (x *AddCommentRequest) GetRepo() string {
@@ -1532,7 +1864,7 @@ type AddCommentResponse struct {
15321864
15331865 func (x *AddCommentResponse) Reset() {
15341866 *x = AddCommentResponse{}
1535- mi := &file_ermite_merge_request_proto_msgTypes[12]
1867+ mi := &file_ermite_merge_request_proto_msgTypes[14]
15361868 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
15371869 ms.StoreMessageInfo(mi)
15381870 }
@@ -1544,7 +1876,7 @@ func (x *AddCommentResponse) String() string {
15441876 func (*AddCommentResponse) ProtoMessage() {}
15451877
15461878 func (x *AddCommentResponse) ProtoReflect() protoreflect.Message {
1547- mi := &file_ermite_merge_request_proto_msgTypes[12]
1879+ mi := &file_ermite_merge_request_proto_msgTypes[14]
15481880 if x != nil {
15491881 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
15501882 if ms.LoadMessageInfo() == nil {
@@ -1557,7 +1889,7 @@ func (x *AddCommentResponse) ProtoReflect() protoreflect.Message {
15571889
15581890 // Deprecated: Use AddCommentResponse.ProtoReflect.Descriptor instead.
15591891 func (*AddCommentResponse) Descriptor() ([]byte, []int) {
1560- return file_ermite_merge_request_proto_rawDescGZIP(), []int{12}
1892+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{14}
15611893 }
15621894
15631895 func (x *AddCommentResponse) GetComment() *Comment {
@@ -1585,7 +1917,7 @@ type EditCommentRequest struct {
15851917
15861918 func (x *EditCommentRequest) Reset() {
15871919 *x = EditCommentRequest{}
1588- mi := &file_ermite_merge_request_proto_msgTypes[13]
1920+ mi := &file_ermite_merge_request_proto_msgTypes[15]
15891921 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
15901922 ms.StoreMessageInfo(mi)
15911923 }
@@ -1597,7 +1929,7 @@ func (x *EditCommentRequest) String() string {
15971929 func (*EditCommentRequest) ProtoMessage() {}
15981930
15991931 func (x *EditCommentRequest) ProtoReflect() protoreflect.Message {
1600- mi := &file_ermite_merge_request_proto_msgTypes[13]
1932+ mi := &file_ermite_merge_request_proto_msgTypes[15]
16011933 if x != nil {
16021934 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
16031935 if ms.LoadMessageInfo() == nil {
@@ -1610,7 +1942,7 @@ func (x *EditCommentRequest) ProtoReflect() protoreflect.Message {
16101942
16111943 // Deprecated: Use EditCommentRequest.ProtoReflect.Descriptor instead.
16121944 func (*EditCommentRequest) Descriptor() ([]byte, []int) {
1613- return file_ermite_merge_request_proto_rawDescGZIP(), []int{13}
1945+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{15}
16141946 }
16151947
16161948 func (x *EditCommentRequest) GetRepo() string {
@@ -1652,7 +1984,7 @@ type EditCommentResponse struct {
16521984
16531985 func (x *EditCommentResponse) Reset() {
16541986 *x = EditCommentResponse{}
1655- mi := &file_ermite_merge_request_proto_msgTypes[14]
1987+ mi := &file_ermite_merge_request_proto_msgTypes[16]
16561988 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
16571989 ms.StoreMessageInfo(mi)
16581990 }
@@ -1664,7 +1996,7 @@ func (x *EditCommentResponse) String() string {
16641996 func (*EditCommentResponse) ProtoMessage() {}
16651997
16661998 func (x *EditCommentResponse) ProtoReflect() protoreflect.Message {
1667- mi := &file_ermite_merge_request_proto_msgTypes[14]
1999+ mi := &file_ermite_merge_request_proto_msgTypes[16]
16682000 if x != nil {
16692001 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
16702002 if ms.LoadMessageInfo() == nil {
@@ -1677,7 +2009,7 @@ func (x *EditCommentResponse) ProtoReflect() protoreflect.Message {
16772009
16782010 // Deprecated: Use EditCommentResponse.ProtoReflect.Descriptor instead.
16792011 func (*EditCommentResponse) Descriptor() ([]byte, []int) {
1680- return file_ermite_merge_request_proto_rawDescGZIP(), []int{14}
2012+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{16}
16812013 }
16822014
16832015 func (x *EditCommentResponse) GetComment() *Comment {
@@ -1702,7 +2034,7 @@ type DeleteCommentRequest struct {
17022034
17032035 func (x *DeleteCommentRequest) Reset() {
17042036 *x = DeleteCommentRequest{}
1705- mi := &file_ermite_merge_request_proto_msgTypes[15]
2037+ mi := &file_ermite_merge_request_proto_msgTypes[17]
17062038 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
17072039 ms.StoreMessageInfo(mi)
17082040 }
@@ -1714,7 +2046,7 @@ func (x *DeleteCommentRequest) String() string {
17142046 func (*DeleteCommentRequest) ProtoMessage() {}
17152047
17162048 func (x *DeleteCommentRequest) ProtoReflect() protoreflect.Message {
1717- mi := &file_ermite_merge_request_proto_msgTypes[15]
2049+ mi := &file_ermite_merge_request_proto_msgTypes[17]
17182050 if x != nil {
17192051 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
17202052 if ms.LoadMessageInfo() == nil {
@@ -1727,7 +2059,7 @@ func (x *DeleteCommentRequest) ProtoReflect() protoreflect.Message {
17272059
17282060 // Deprecated: Use DeleteCommentRequest.ProtoReflect.Descriptor instead.
17292061 func (*DeleteCommentRequest) Descriptor() ([]byte, []int) {
1730- return file_ermite_merge_request_proto_rawDescGZIP(), []int{15}
2062+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{17}
17312063 }
17322064
17332065 func (x *DeleteCommentRequest) GetRepo() string {
@@ -1762,7 +2094,7 @@ type DeleteCommentResponse struct {
17622094
17632095 func (x *DeleteCommentResponse) Reset() {
17642096 *x = DeleteCommentResponse{}
1765- mi := &file_ermite_merge_request_proto_msgTypes[16]
2097+ mi := &file_ermite_merge_request_proto_msgTypes[18]
17662098 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
17672099 ms.StoreMessageInfo(mi)
17682100 }
@@ -1774,7 +2106,7 @@ func (x *DeleteCommentResponse) String() string {
17742106 func (*DeleteCommentResponse) ProtoMessage() {}
17752107
17762108 func (x *DeleteCommentResponse) ProtoReflect() protoreflect.Message {
1777- mi := &file_ermite_merge_request_proto_msgTypes[16]
2109+ mi := &file_ermite_merge_request_proto_msgTypes[18]
17782110 if x != nil {
17792111 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
17802112 if ms.LoadMessageInfo() == nil {
@@ -1787,7 +2119,7 @@ func (x *DeleteCommentResponse) ProtoReflect() protoreflect.Message {
17872119
17882120 // Deprecated: Use DeleteCommentResponse.ProtoReflect.Descriptor instead.
17892121 func (*DeleteCommentResponse) Descriptor() ([]byte, []int) {
1790- return file_ermite_merge_request_proto_rawDescGZIP(), []int{16}
2122+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{18}
17912123 }
17922124
17932125 func (x *DeleteCommentResponse) GetComment() *Comment {
@@ -1814,7 +2146,7 @@ type ResolveCommentRequest struct {
18142146
18152147 func (x *ResolveCommentRequest) Reset() {
18162148 *x = ResolveCommentRequest{}
1817- mi := &file_ermite_merge_request_proto_msgTypes[17]
2149+ mi := &file_ermite_merge_request_proto_msgTypes[19]
18182150 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
18192151 ms.StoreMessageInfo(mi)
18202152 }
@@ -1826,7 +2158,7 @@ func (x *ResolveCommentRequest) String() string {
18262158 func (*ResolveCommentRequest) ProtoMessage() {}
18272159
18282160 func (x *ResolveCommentRequest) ProtoReflect() protoreflect.Message {
1829- mi := &file_ermite_merge_request_proto_msgTypes[17]
2161+ mi := &file_ermite_merge_request_proto_msgTypes[19]
18302162 if x != nil {
18312163 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
18322164 if ms.LoadMessageInfo() == nil {
@@ -1839,7 +2171,7 @@ func (x *ResolveCommentRequest) ProtoReflect() protoreflect.Message {
18392171
18402172 // Deprecated: Use ResolveCommentRequest.ProtoReflect.Descriptor instead.
18412173 func (*ResolveCommentRequest) Descriptor() ([]byte, []int) {
1842- return file_ermite_merge_request_proto_rawDescGZIP(), []int{17}
2174+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{19}
18432175 }
18442176
18452177 func (x *ResolveCommentRequest) GetRepo() string {
@@ -1881,7 +2213,7 @@ type ResolveCommentResponse struct {
18812213
18822214 func (x *ResolveCommentResponse) Reset() {
18832215 *x = ResolveCommentResponse{}
1884- mi := &file_ermite_merge_request_proto_msgTypes[18]
2216+ mi := &file_ermite_merge_request_proto_msgTypes[20]
18852217 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
18862218 ms.StoreMessageInfo(mi)
18872219 }
@@ -1893,7 +2225,7 @@ func (x *ResolveCommentResponse) String() string {
18932225 func (*ResolveCommentResponse) ProtoMessage() {}
18942226
18952227 func (x *ResolveCommentResponse) ProtoReflect() protoreflect.Message {
1896- mi := &file_ermite_merge_request_proto_msgTypes[18]
2228+ mi := &file_ermite_merge_request_proto_msgTypes[20]
18972229 if x != nil {
18982230 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
18992231 if ms.LoadMessageInfo() == nil {
@@ -1906,7 +2238,7 @@ func (x *ResolveCommentResponse) ProtoReflect() protoreflect.Message {
19062238
19072239 // Deprecated: Use ResolveCommentResponse.ProtoReflect.Descriptor instead.
19082240 func (*ResolveCommentResponse) Descriptor() ([]byte, []int) {
1909- return file_ermite_merge_request_proto_rawDescGZIP(), []int{18}
2241+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{20}
19102242 }
19112243
19122244 func (x *ResolveCommentResponse) GetComment() *Comment {
@@ -1929,7 +2261,7 @@ type CloseMergeRequestRequest struct {
19292261
19302262 func (x *CloseMergeRequestRequest) Reset() {
19312263 *x = CloseMergeRequestRequest{}
1932- mi := &file_ermite_merge_request_proto_msgTypes[19]
2264+ mi := &file_ermite_merge_request_proto_msgTypes[21]
19332265 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
19342266 ms.StoreMessageInfo(mi)
19352267 }
@@ -1941,7 +2273,7 @@ func (x *CloseMergeRequestRequest) String() string {
19412273 func (*CloseMergeRequestRequest) ProtoMessage() {}
19422274
19432275 func (x *CloseMergeRequestRequest) ProtoReflect() protoreflect.Message {
1944- mi := &file_ermite_merge_request_proto_msgTypes[19]
2276+ mi := &file_ermite_merge_request_proto_msgTypes[21]
19452277 if x != nil {
19462278 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
19472279 if ms.LoadMessageInfo() == nil {
@@ -1954,7 +2286,7 @@ func (x *CloseMergeRequestRequest) ProtoReflect() protoreflect.Message {
19542286
19552287 // Deprecated: Use CloseMergeRequestRequest.ProtoReflect.Descriptor instead.
19562288 func (*CloseMergeRequestRequest) Descriptor() ([]byte, []int) {
1957- return file_ermite_merge_request_proto_rawDescGZIP(), []int{19}
2289+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{21}
19582290 }
19592291
19602292 func (x *CloseMergeRequestRequest) GetRepo() string {
@@ -1982,7 +2314,7 @@ type CloseMergeRequestResponse struct {
19822314
19832315 func (x *CloseMergeRequestResponse) Reset() {
19842316 *x = CloseMergeRequestResponse{}
1985- mi := &file_ermite_merge_request_proto_msgTypes[20]
2317+ mi := &file_ermite_merge_request_proto_msgTypes[22]
19862318 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
19872319 ms.StoreMessageInfo(mi)
19882320 }
@@ -1994,7 +2326,7 @@ func (x *CloseMergeRequestResponse) String() string {
19942326 func (*CloseMergeRequestResponse) ProtoMessage() {}
19952327
19962328 func (x *CloseMergeRequestResponse) ProtoReflect() protoreflect.Message {
1997- mi := &file_ermite_merge_request_proto_msgTypes[20]
2329+ mi := &file_ermite_merge_request_proto_msgTypes[22]
19982330 if x != nil {
19992331 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
20002332 if ms.LoadMessageInfo() == nil {
@@ -2007,7 +2339,7 @@ func (x *CloseMergeRequestResponse) ProtoReflect() protoreflect.Message {
20072339
20082340 // Deprecated: Use CloseMergeRequestResponse.ProtoReflect.Descriptor instead.
20092341 func (*CloseMergeRequestResponse) Descriptor() ([]byte, []int) {
2010- return file_ermite_merge_request_proto_rawDescGZIP(), []int{20}
2342+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{22}
20112343 }
20122344
20132345 func (x *CloseMergeRequestResponse) GetMergeRequest() *MergeRequest {
@@ -2030,7 +2362,7 @@ type MarkReadyRequest struct {
20302362
20312363 func (x *MarkReadyRequest) Reset() {
20322364 *x = MarkReadyRequest{}
2033- mi := &file_ermite_merge_request_proto_msgTypes[21]
2365+ mi := &file_ermite_merge_request_proto_msgTypes[23]
20342366 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
20352367 ms.StoreMessageInfo(mi)
20362368 }
@@ -2042,7 +2374,7 @@ func (x *MarkReadyRequest) String() string {
20422374 func (*MarkReadyRequest) ProtoMessage() {}
20432375
20442376 func (x *MarkReadyRequest) ProtoReflect() protoreflect.Message {
2045- mi := &file_ermite_merge_request_proto_msgTypes[21]
2377+ mi := &file_ermite_merge_request_proto_msgTypes[23]
20462378 if x != nil {
20472379 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
20482380 if ms.LoadMessageInfo() == nil {
@@ -2055,7 +2387,7 @@ func (x *MarkReadyRequest) ProtoReflect() protoreflect.Message {
20552387
20562388 // Deprecated: Use MarkReadyRequest.ProtoReflect.Descriptor instead.
20572389 func (*MarkReadyRequest) Descriptor() ([]byte, []int) {
2058- return file_ermite_merge_request_proto_rawDescGZIP(), []int{21}
2390+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{23}
20592391 }
20602392
20612393 func (x *MarkReadyRequest) GetRepo() string {
@@ -2084,7 +2416,7 @@ type MarkReadyResponse struct {
20842416
20852417 func (x *MarkReadyResponse) Reset() {
20862418 *x = MarkReadyResponse{}
2087- mi := &file_ermite_merge_request_proto_msgTypes[22]
2419+ mi := &file_ermite_merge_request_proto_msgTypes[24]
20882420 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
20892421 ms.StoreMessageInfo(mi)
20902422 }
@@ -2096,7 +2428,7 @@ func (x *MarkReadyResponse) String() string {
20962428 func (*MarkReadyResponse) ProtoMessage() {}
20972429
20982430 func (x *MarkReadyResponse) ProtoReflect() protoreflect.Message {
2099- mi := &file_ermite_merge_request_proto_msgTypes[22]
2431+ mi := &file_ermite_merge_request_proto_msgTypes[24]
21002432 if x != nil {
21012433 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
21022434 if ms.LoadMessageInfo() == nil {
@@ -2109,7 +2441,7 @@ func (x *MarkReadyResponse) ProtoReflect() protoreflect.Message {
21092441
21102442 // Deprecated: Use MarkReadyResponse.ProtoReflect.Descriptor instead.
21112443 func (*MarkReadyResponse) Descriptor() ([]byte, []int) {
2112- return file_ermite_merge_request_proto_rawDescGZIP(), []int{22}
2444+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{24}
21132445 }
21142446
21152447 func (x *MarkReadyResponse) GetMergeRequest() *MergeRequest {
@@ -2150,7 +2482,7 @@ type MergeMergeRequestRequest struct {
21502482
21512483 func (x *MergeMergeRequestRequest) Reset() {
21522484 *x = MergeMergeRequestRequest{}
2153- mi := &file_ermite_merge_request_proto_msgTypes[23]
2485+ mi := &file_ermite_merge_request_proto_msgTypes[25]
21542486 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
21552487 ms.StoreMessageInfo(mi)
21562488 }
@@ -2162,7 +2494,7 @@ func (x *MergeMergeRequestRequest) String() string {
21622494 func (*MergeMergeRequestRequest) ProtoMessage() {}
21632495
21642496 func (x *MergeMergeRequestRequest) ProtoReflect() protoreflect.Message {
2165- mi := &file_ermite_merge_request_proto_msgTypes[23]
2497+ mi := &file_ermite_merge_request_proto_msgTypes[25]
21662498 if x != nil {
21672499 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
21682500 if ms.LoadMessageInfo() == nil {
@@ -2175,7 +2507,7 @@ func (x *MergeMergeRequestRequest) ProtoReflect() protoreflect.Message {
21752507
21762508 // Deprecated: Use MergeMergeRequestRequest.ProtoReflect.Descriptor instead.
21772509 func (*MergeMergeRequestRequest) Descriptor() ([]byte, []int) {
2178- return file_ermite_merge_request_proto_rawDescGZIP(), []int{23}
2510+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{25}
21792511 }
21802512
21812513 func (x *MergeMergeRequestRequest) GetRepo() string {
@@ -2239,7 +2571,7 @@ type MergeMergeRequestResponse struct {
22392571
22402572 func (x *MergeMergeRequestResponse) Reset() {
22412573 *x = MergeMergeRequestResponse{}
2242- mi := &file_ermite_merge_request_proto_msgTypes[24]
2574+ mi := &file_ermite_merge_request_proto_msgTypes[26]
22432575 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
22442576 ms.StoreMessageInfo(mi)
22452577 }
@@ -2251,7 +2583,7 @@ func (x *MergeMergeRequestResponse) String() string {
22512583 func (*MergeMergeRequestResponse) ProtoMessage() {}
22522584
22532585 func (x *MergeMergeRequestResponse) ProtoReflect() protoreflect.Message {
2254- mi := &file_ermite_merge_request_proto_msgTypes[24]
2586+ mi := &file_ermite_merge_request_proto_msgTypes[26]
22552587 if x != nil {
22562588 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
22572589 if ms.LoadMessageInfo() == nil {
@@ -2264,7 +2596,7 @@ func (x *MergeMergeRequestResponse) ProtoReflect() protoreflect.Message {
22642596
22652597 // Deprecated: Use MergeMergeRequestResponse.ProtoReflect.Descriptor instead.
22662598 func (*MergeMergeRequestResponse) Descriptor() ([]byte, []int) {
2267- return file_ermite_merge_request_proto_rawDescGZIP(), []int{24}
2599+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{26}
22682600 }
22692601
22702602 func (x *MergeMergeRequestResponse) GetMergeRequest() *MergeRequest {
@@ -2302,7 +2634,7 @@ type EnableAutoMergeRequest struct {
23022634
23032635 func (x *EnableAutoMergeRequest) Reset() {
23042636 *x = EnableAutoMergeRequest{}
2305- mi := &file_ermite_merge_request_proto_msgTypes[25]
2637+ mi := &file_ermite_merge_request_proto_msgTypes[27]
23062638 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
23072639 ms.StoreMessageInfo(mi)
23082640 }
@@ -2314,7 +2646,7 @@ func (x *EnableAutoMergeRequest) String() string {
23142646 func (*EnableAutoMergeRequest) ProtoMessage() {}
23152647
23162648 func (x *EnableAutoMergeRequest) ProtoReflect() protoreflect.Message {
2317- mi := &file_ermite_merge_request_proto_msgTypes[25]
2649+ mi := &file_ermite_merge_request_proto_msgTypes[27]
23182650 if x != nil {
23192651 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
23202652 if ms.LoadMessageInfo() == nil {
@@ -2327,7 +2659,7 @@ func (x *EnableAutoMergeRequest) ProtoReflect() protoreflect.Message {
23272659
23282660 // Deprecated: Use EnableAutoMergeRequest.ProtoReflect.Descriptor instead.
23292661 func (*EnableAutoMergeRequest) Descriptor() ([]byte, []int) {
2330- return file_ermite_merge_request_proto_rawDescGZIP(), []int{25}
2662+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{27}
23312663 }
23322664
23332665 func (x *EnableAutoMergeRequest) GetRepo() string {
@@ -2369,7 +2701,7 @@ type EnableAutoMergeResponse struct {
23692701
23702702 func (x *EnableAutoMergeResponse) Reset() {
23712703 *x = EnableAutoMergeResponse{}
2372- mi := &file_ermite_merge_request_proto_msgTypes[26]
2704+ mi := &file_ermite_merge_request_proto_msgTypes[28]
23732705 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
23742706 ms.StoreMessageInfo(mi)
23752707 }
@@ -2381,7 +2713,7 @@ func (x *EnableAutoMergeResponse) String() string {
23812713 func (*EnableAutoMergeResponse) ProtoMessage() {}
23822714
23832715 func (x *EnableAutoMergeResponse) ProtoReflect() protoreflect.Message {
2384- mi := &file_ermite_merge_request_proto_msgTypes[26]
2716+ mi := &file_ermite_merge_request_proto_msgTypes[28]
23852717 if x != nil {
23862718 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
23872719 if ms.LoadMessageInfo() == nil {
@@ -2394,7 +2726,7 @@ func (x *EnableAutoMergeResponse) ProtoReflect() protoreflect.Message {
23942726
23952727 // Deprecated: Use EnableAutoMergeResponse.ProtoReflect.Descriptor instead.
23962728 func (*EnableAutoMergeResponse) Descriptor() ([]byte, []int) {
2397- return file_ermite_merge_request_proto_rawDescGZIP(), []int{26}
2729+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{28}
23982730 }
23992731
24002732 func (x *EnableAutoMergeResponse) GetMergeRequest() *MergeRequest {
@@ -2417,7 +2749,7 @@ type CancelAutoMergeRequest struct {
24172749
24182750 func (x *CancelAutoMergeRequest) Reset() {
24192751 *x = CancelAutoMergeRequest{}
2420- mi := &file_ermite_merge_request_proto_msgTypes[27]
2752+ mi := &file_ermite_merge_request_proto_msgTypes[29]
24212753 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
24222754 ms.StoreMessageInfo(mi)
24232755 }
@@ -2429,7 +2761,7 @@ func (x *CancelAutoMergeRequest) String() string {
24292761 func (*CancelAutoMergeRequest) ProtoMessage() {}
24302762
24312763 func (x *CancelAutoMergeRequest) ProtoReflect() protoreflect.Message {
2432- mi := &file_ermite_merge_request_proto_msgTypes[27]
2764+ mi := &file_ermite_merge_request_proto_msgTypes[29]
24332765 if x != nil {
24342766 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
24352767 if ms.LoadMessageInfo() == nil {
@@ -2442,7 +2774,7 @@ func (x *CancelAutoMergeRequest) ProtoReflect() protoreflect.Message {
24422774
24432775 // Deprecated: Use CancelAutoMergeRequest.ProtoReflect.Descriptor instead.
24442776 func (*CancelAutoMergeRequest) Descriptor() ([]byte, []int) {
2445- return file_ermite_merge_request_proto_rawDescGZIP(), []int{27}
2777+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{29}
24462778 }
24472779
24482780 func (x *CancelAutoMergeRequest) GetRepo() string {
@@ -2470,7 +2802,7 @@ type CancelAutoMergeResponse struct {
24702802
24712803 func (x *CancelAutoMergeResponse) Reset() {
24722804 *x = CancelAutoMergeResponse{}
2473- mi := &file_ermite_merge_request_proto_msgTypes[28]
2805+ mi := &file_ermite_merge_request_proto_msgTypes[30]
24742806 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
24752807 ms.StoreMessageInfo(mi)
24762808 }
@@ -2482,7 +2814,7 @@ func (x *CancelAutoMergeResponse) String() string {
24822814 func (*CancelAutoMergeResponse) ProtoMessage() {}
24832815
24842816 func (x *CancelAutoMergeResponse) ProtoReflect() protoreflect.Message {
2485- mi := &file_ermite_merge_request_proto_msgTypes[28]
2817+ mi := &file_ermite_merge_request_proto_msgTypes[30]
24862818 if x != nil {
24872819 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
24882820 if ms.LoadMessageInfo() == nil {
@@ -2495,7 +2827,7 @@ func (x *CancelAutoMergeResponse) ProtoReflect() protoreflect.Message {
24952827
24962828 // Deprecated: Use CancelAutoMergeResponse.ProtoReflect.Descriptor instead.
24972829 func (*CancelAutoMergeResponse) Descriptor() ([]byte, []int) {
2498- return file_ermite_merge_request_proto_rawDescGZIP(), []int{28}
2830+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{30}
24992831 }
25002832
25012833 func (x *CancelAutoMergeResponse) GetMergeRequest() *MergeRequest {
@@ -2522,7 +2854,7 @@ type MarkReadRequest struct {
25222854
25232855 func (x *MarkReadRequest) Reset() {
25242856 *x = MarkReadRequest{}
2525- mi := &file_ermite_merge_request_proto_msgTypes[29]
2857+ mi := &file_ermite_merge_request_proto_msgTypes[31]
25262858 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
25272859 ms.StoreMessageInfo(mi)
25282860 }
@@ -2534,7 +2866,7 @@ func (x *MarkReadRequest) String() string {
25342866 func (*MarkReadRequest) ProtoMessage() {}
25352867
25362868 func (x *MarkReadRequest) ProtoReflect() protoreflect.Message {
2537- mi := &file_ermite_merge_request_proto_msgTypes[29]
2869+ mi := &file_ermite_merge_request_proto_msgTypes[31]
25382870 if x != nil {
25392871 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
25402872 if ms.LoadMessageInfo() == nil {
@@ -2547,7 +2879,7 @@ func (x *MarkReadRequest) ProtoReflect() protoreflect.Message {
25472879
25482880 // Deprecated: Use MarkReadRequest.ProtoReflect.Descriptor instead.
25492881 func (*MarkReadRequest) Descriptor() ([]byte, []int) {
2550- return file_ermite_merge_request_proto_rawDescGZIP(), []int{29}
2882+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{31}
25512883 }
25522884
25532885 func (x *MarkReadRequest) GetRepo() string {
@@ -2580,7 +2912,7 @@ type MarkReadResponse struct {
25802912
25812913 func (x *MarkReadResponse) Reset() {
25822914 *x = MarkReadResponse{}
2583- mi := &file_ermite_merge_request_proto_msgTypes[30]
2915+ mi := &file_ermite_merge_request_proto_msgTypes[32]
25842916 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
25852917 ms.StoreMessageInfo(mi)
25862918 }
@@ -2592,7 +2924,7 @@ func (x *MarkReadResponse) String() string {
25922924 func (*MarkReadResponse) ProtoMessage() {}
25932925
25942926 func (x *MarkReadResponse) ProtoReflect() protoreflect.Message {
2595- mi := &file_ermite_merge_request_proto_msgTypes[30]
2927+ mi := &file_ermite_merge_request_proto_msgTypes[32]
25962928 if x != nil {
25972929 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
25982930 if ms.LoadMessageInfo() == nil {
@@ -2605,7 +2937,7 @@ func (x *MarkReadResponse) ProtoReflect() protoreflect.Message {
26052937
26062938 // Deprecated: Use MarkReadResponse.ProtoReflect.Descriptor instead.
26072939 func (*MarkReadResponse) Descriptor() ([]byte, []int) {
2608- return file_ermite_merge_request_proto_rawDescGZIP(), []int{30}
2940+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{32}
26092941 }
26102942
26112943 var File_ermite_merge_request_proto protoreflect.FileDescriptor
@@ -2696,11 +3028,27 @@ const file_ermite_merge_request_proto_rawDesc = "" +
26963028 "page_token\x18\x04 \x01(\tR\tpageToken\"\x80\x01\n" +
26973029 "\x19ListMergeRequestsResponse\x12;\n" +
26983030 "\x0emerge_requests\x18\x01 \x03(\v2\x14.ermite.MergeRequestR\rmergeRequests\x12&\n" +
2699- "\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\"l\n" +
3031+ "\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\"\x8f\x01\n" +
3032+ "\x11MergeRequestIssue\x12\x16\n" +
3033+ "\x06number\x18\x01 \x01(\x03R\x06number\x12\x14\n" +
3034+ "\x05title\x18\x02 \x01(\tR\x05title\x124\n" +
3035+ "\x05state\x18\x03 \x01(\x0e2\x1e.ermite.MergeRequestIssueStateR\x05state\x12\x16\n" +
3036+ "\x06closes\x18\x04 \x01(\bR\x06closes\"\x9c\x02\n" +
3037+ "\n" +
3038+ "IssueEvent\x12\x0e\n" +
3039+ "\x02id\x18\x01 \x01(\tR\x02id\x12*\n" +
3040+ "\x04kind\x18\x02 \x01(\x0e2\x16.ermite.IssueEventKindR\x04kind\x12\x14\n" +
3041+ "\x05issue\x18\x03 \x01(\x03R\x05issue\x12#\n" +
3042+ "\rmerge_request\x18\x04 \x01(\x03R\fmergeRequest\x12.\n" +
3043+ "\x13merge_request_title\x18\x05 \x01(\tR\x11mergeRequestTitle\x12\x16\n" +
3044+ "\x06closes\x18\x06 \x01(\bR\x06closes\x12\x14\n" +
3045+ "\x05actor\x18\a \x01(\tR\x05actor\x129\n" +
3046+ "\n" +
3047+ "created_at\x18\b \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\"l\n" +
27003048 "\x16GetMergeRequestRequest\x12\x12\n" +
27013049 "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x16\n" +
27023050 "\x06number\x18\x02 \x01(\x03R\x06number\x12&\n" +
2703- "\x0fsince_last_read\x18\x03 \x01(\bR\rsinceLastRead\"\xc0\x03\n" +
3051+ "\x0fsince_last_read\x18\x03 \x01(\bR\rsinceLastRead\"\xaa\x04\n" +
27043052 "\x17GetMergeRequestResponse\x129\n" +
27053053 "\rmerge_request\x18\x01 \x01(\v2\x14.ermite.MergeRequestR\fmergeRequest\x12(\n" +
27063054 "\acommits\x18\x02 \x03(\v2\x0e.ermite.CommitR\acommits\x12+\n" +
@@ -2714,7 +3062,9 @@ const file_ermite_merge_request_proto_rawDesc = "" +
27143062 "lastReadId\x12$\n" +
27153063 "\x0elast_read_lost\x18\t \x01(\bR\flastReadLost\x121\n" +
27163064 "\bverdicts\x18\n" +
2717- " \x03(\v2\x15.ermite.AuthorVerdictR\bverdicts\"\x86\x02\n" +
3065+ " \x03(\v2\x15.ermite.AuthorVerdictR\bverdicts\x121\n" +
3066+ "\x06issues\x18\v \x03(\v2\x19.ermite.MergeRequestIssueR\x06issues\x125\n" +
3067+ "\fissue_events\x18\f \x03(\v2\x12.ermite.IssueEventR\vissueEvents\"\x86\x02\n" +
27183068 "\x11AddCommentRequest\x12\x12\n" +
27193069 "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x16\n" +
27203070 "\x06number\x18\x02 \x01(\x03R\x06number\x12\x12\n" +
@@ -2806,7 +3156,18 @@ const file_ermite_merge_request_proto_rawDesc = "" +
28063156 "\x1bMERGEABILITY_STATE_CHECKING\x10\x01\x12!\n" +
28073157 "\x1dMERGEABILITY_STATE_UP_TO_DATE\x10\x02\x12\x1d\n" +
28083158 "\x19MERGEABILITY_STATE_BEHIND\x10\x03\x12\x1f\n" +
2809- "\x1bMERGEABILITY_STATE_CONFLICT\x10\x042\xa9\b\n" +
3159+ "\x1bMERGEABILITY_STATE_CONFLICT\x10\x04*\xb5\x01\n" +
3160+ "\x16MergeRequestIssueState\x12)\n" +
3161+ "%MERGE_REQUEST_ISSUE_STATE_UNSPECIFIED\x10\x00\x12\"\n" +
3162+ "\x1eMERGE_REQUEST_ISSUE_STATE_OPEN\x10\x01\x12$\n" +
3163+ " MERGE_REQUEST_ISSUE_STATE_CLOSED\x10\x02\x12&\n" +
3164+ "\"MERGE_REQUEST_ISSUE_STATE_RESOLVED\x10\x04*\xae\x01\n" +
3165+ "\x0eIssueEventKind\x12 \n" +
3166+ "\x1cISSUE_EVENT_KIND_UNSPECIFIED\x10\x00\x12\x1f\n" +
3167+ "\x1bISSUE_EVENT_KIND_REFERENCED\x10\x01\x12\x1b\n" +
3168+ "\x17ISSUE_EVENT_KIND_CLOSED\x10\x02\x12\x1d\n" +
3169+ "\x19ISSUE_EVENT_KIND_REOPENED\x10\x03\x12\x1d\n" +
3170+ "\x19ISSUE_EVENT_KIND_RESOLVED\x10\x042\xa9\b\n" +
28103171 "\x13MergeRequestService\x12[\n" +
28113172 "\x12CreateMergeRequest\x12!.ermite.CreateMergeRequestRequest\x1a\".ermite.CreateMergeRequestResponse\x12X\n" +
28123173 "\x11ListMergeRequests\x12 .ermite.ListMergeRequestsRequest\x1a!.ermite.ListMergeRequestsResponse\x12R\n" +
@@ -2837,120 +3198,129 @@ func file_ermite_merge_request_proto_rawDescGZIP() []byte {
28373198 return file_ermite_merge_request_proto_rawDescData
28383199 }
28393200
2840-var file_ermite_merge_request_proto_enumTypes = make([]protoimpl.EnumInfo, 4)
2841-var file_ermite_merge_request_proto_msgTypes = make([]protoimpl.MessageInfo, 31)
3201+var file_ermite_merge_request_proto_enumTypes = make([]protoimpl.EnumInfo, 6)
3202+var file_ermite_merge_request_proto_msgTypes = make([]protoimpl.MessageInfo, 33)
28423203 var file_ermite_merge_request_proto_goTypes = []any{
28433204 (MergeRequestState)(0), // 0: ermite.MergeRequestState
28443205 (DiffSide)(0), // 1: ermite.DiffSide
28453206 (Verdict)(0), // 2: ermite.Verdict
28463207 (MergeabilityState)(0), // 3: ermite.MergeabilityState
2847- (*Mergeability)(nil), // 4: ermite.Mergeability
2848- (*AutoMerge)(nil), // 5: ermite.AutoMerge
2849- (*MergeRequest)(nil), // 6: ermite.MergeRequest
2850- (*Comment)(nil), // 7: ermite.Comment
2851- (*AuthorVerdict)(nil), // 8: ermite.AuthorVerdict
2852- (*CreateMergeRequestRequest)(nil), // 9: ermite.CreateMergeRequestRequest
2853- (*CreateMergeRequestResponse)(nil), // 10: ermite.CreateMergeRequestResponse
2854- (*ListMergeRequestsRequest)(nil), // 11: ermite.ListMergeRequestsRequest
2855- (*ListMergeRequestsResponse)(nil), // 12: ermite.ListMergeRequestsResponse
2856- (*GetMergeRequestRequest)(nil), // 13: ermite.GetMergeRequestRequest
2857- (*GetMergeRequestResponse)(nil), // 14: ermite.GetMergeRequestResponse
2858- (*AddCommentRequest)(nil), // 15: ermite.AddCommentRequest
2859- (*AddCommentResponse)(nil), // 16: ermite.AddCommentResponse
2860- (*EditCommentRequest)(nil), // 17: ermite.EditCommentRequest
2861- (*EditCommentResponse)(nil), // 18: ermite.EditCommentResponse
2862- (*DeleteCommentRequest)(nil), // 19: ermite.DeleteCommentRequest
2863- (*DeleteCommentResponse)(nil), // 20: ermite.DeleteCommentResponse
2864- (*ResolveCommentRequest)(nil), // 21: ermite.ResolveCommentRequest
2865- (*ResolveCommentResponse)(nil), // 22: ermite.ResolveCommentResponse
2866- (*CloseMergeRequestRequest)(nil), // 23: ermite.CloseMergeRequestRequest
2867- (*CloseMergeRequestResponse)(nil), // 24: ermite.CloseMergeRequestResponse
2868- (*MarkReadyRequest)(nil), // 25: ermite.MarkReadyRequest
2869- (*MarkReadyResponse)(nil), // 26: ermite.MarkReadyResponse
2870- (*MergeMergeRequestRequest)(nil), // 27: ermite.MergeMergeRequestRequest
2871- (*MergeMergeRequestResponse)(nil), // 28: ermite.MergeMergeRequestResponse
2872- (*EnableAutoMergeRequest)(nil), // 29: ermite.EnableAutoMergeRequest
2873- (*EnableAutoMergeResponse)(nil), // 30: ermite.EnableAutoMergeResponse
2874- (*CancelAutoMergeRequest)(nil), // 31: ermite.CancelAutoMergeRequest
2875- (*CancelAutoMergeResponse)(nil), // 32: ermite.CancelAutoMergeResponse
2876- (*MarkReadRequest)(nil), // 33: ermite.MarkReadRequest
2877- (*MarkReadResponse)(nil), // 34: ermite.MarkReadResponse
2878- (*timestamppb.Timestamp)(nil), // 35: google.protobuf.Timestamp
2879- (MergeMode)(0), // 36: ermite.MergeMode
2880- (*Commit)(nil), // 37: ermite.Commit
2881- (*DiffStats)(nil), // 38: ermite.DiffStats
2882- (*Diff)(nil), // 39: ermite.Diff
3208+ (MergeRequestIssueState)(0), // 4: ermite.MergeRequestIssueState
3209+ (IssueEventKind)(0), // 5: ermite.IssueEventKind
3210+ (*Mergeability)(nil), // 6: ermite.Mergeability
3211+ (*AutoMerge)(nil), // 7: ermite.AutoMerge
3212+ (*MergeRequest)(nil), // 8: ermite.MergeRequest
3213+ (*Comment)(nil), // 9: ermite.Comment
3214+ (*AuthorVerdict)(nil), // 10: ermite.AuthorVerdict
3215+ (*CreateMergeRequestRequest)(nil), // 11: ermite.CreateMergeRequestRequest
3216+ (*CreateMergeRequestResponse)(nil), // 12: ermite.CreateMergeRequestResponse
3217+ (*ListMergeRequestsRequest)(nil), // 13: ermite.ListMergeRequestsRequest
3218+ (*ListMergeRequestsResponse)(nil), // 14: ermite.ListMergeRequestsResponse
3219+ (*MergeRequestIssue)(nil), // 15: ermite.MergeRequestIssue
3220+ (*IssueEvent)(nil), // 16: ermite.IssueEvent
3221+ (*GetMergeRequestRequest)(nil), // 17: ermite.GetMergeRequestRequest
3222+ (*GetMergeRequestResponse)(nil), // 18: ermite.GetMergeRequestResponse
3223+ (*AddCommentRequest)(nil), // 19: ermite.AddCommentRequest
3224+ (*AddCommentResponse)(nil), // 20: ermite.AddCommentResponse
3225+ (*EditCommentRequest)(nil), // 21: ermite.EditCommentRequest
3226+ (*EditCommentResponse)(nil), // 22: ermite.EditCommentResponse
3227+ (*DeleteCommentRequest)(nil), // 23: ermite.DeleteCommentRequest
3228+ (*DeleteCommentResponse)(nil), // 24: ermite.DeleteCommentResponse
3229+ (*ResolveCommentRequest)(nil), // 25: ermite.ResolveCommentRequest
3230+ (*ResolveCommentResponse)(nil), // 26: ermite.ResolveCommentResponse
3231+ (*CloseMergeRequestRequest)(nil), // 27: ermite.CloseMergeRequestRequest
3232+ (*CloseMergeRequestResponse)(nil), // 28: ermite.CloseMergeRequestResponse
3233+ (*MarkReadyRequest)(nil), // 29: ermite.MarkReadyRequest
3234+ (*MarkReadyResponse)(nil), // 30: ermite.MarkReadyResponse
3235+ (*MergeMergeRequestRequest)(nil), // 31: ermite.MergeMergeRequestRequest
3236+ (*MergeMergeRequestResponse)(nil), // 32: ermite.MergeMergeRequestResponse
3237+ (*EnableAutoMergeRequest)(nil), // 33: ermite.EnableAutoMergeRequest
3238+ (*EnableAutoMergeResponse)(nil), // 34: ermite.EnableAutoMergeResponse
3239+ (*CancelAutoMergeRequest)(nil), // 35: ermite.CancelAutoMergeRequest
3240+ (*CancelAutoMergeResponse)(nil), // 36: ermite.CancelAutoMergeResponse
3241+ (*MarkReadRequest)(nil), // 37: ermite.MarkReadRequest
3242+ (*MarkReadResponse)(nil), // 38: ermite.MarkReadResponse
3243+ (*timestamppb.Timestamp)(nil), // 39: google.protobuf.Timestamp
3244+ (MergeMode)(0), // 40: ermite.MergeMode
3245+ (*Commit)(nil), // 41: ermite.Commit
3246+ (*DiffStats)(nil), // 42: ermite.DiffStats
3247+ (*Diff)(nil), // 43: ermite.Diff
28833248 }
28843249 var file_ermite_merge_request_proto_depIdxs = []int32{
28853250 3, // 0: ermite.Mergeability.state:type_name -> ermite.MergeabilityState
2886- 35, // 1: ermite.Mergeability.checked_at:type_name -> google.protobuf.Timestamp
2887- 36, // 2: ermite.AutoMerge.mode:type_name -> ermite.MergeMode
2888- 35, // 3: ermite.AutoMerge.enabled_at:type_name -> google.protobuf.Timestamp
3251+ 39, // 1: ermite.Mergeability.checked_at:type_name -> google.protobuf.Timestamp
3252+ 40, // 2: ermite.AutoMerge.mode:type_name -> ermite.MergeMode
3253+ 39, // 3: ermite.AutoMerge.enabled_at:type_name -> google.protobuf.Timestamp
28893254 0, // 4: ermite.MergeRequest.state:type_name -> ermite.MergeRequestState
2890- 35, // 5: ermite.MergeRequest.created_at:type_name -> google.protobuf.Timestamp
2891- 35, // 6: ermite.MergeRequest.updated_at:type_name -> google.protobuf.Timestamp
2892- 36, // 7: ermite.MergeRequest.merge_mode:type_name -> ermite.MergeMode
2893- 4, // 8: ermite.MergeRequest.mergeability:type_name -> ermite.Mergeability
2894- 5, // 9: ermite.MergeRequest.auto_merge:type_name -> ermite.AutoMerge
3255+ 39, // 5: ermite.MergeRequest.created_at:type_name -> google.protobuf.Timestamp
3256+ 39, // 6: ermite.MergeRequest.updated_at:type_name -> google.protobuf.Timestamp
3257+ 40, // 7: ermite.MergeRequest.merge_mode:type_name -> ermite.MergeMode
3258+ 6, // 8: ermite.MergeRequest.mergeability:type_name -> ermite.Mergeability
3259+ 7, // 9: ermite.MergeRequest.auto_merge:type_name -> ermite.AutoMerge
28953260 1, // 10: ermite.Comment.side:type_name -> ermite.DiffSide
2896- 35, // 11: ermite.Comment.created_at:type_name -> google.protobuf.Timestamp
3261+ 39, // 11: ermite.Comment.created_at:type_name -> google.protobuf.Timestamp
28973262 2, // 12: ermite.Comment.verdict:type_name -> ermite.Verdict
2898- 35, // 13: ermite.Comment.edited_at:type_name -> google.protobuf.Timestamp
3263+ 39, // 13: ermite.Comment.edited_at:type_name -> google.protobuf.Timestamp
28993264 2, // 14: ermite.AuthorVerdict.verdict:type_name -> ermite.Verdict
2900- 35, // 15: ermite.AuthorVerdict.created_at:type_name -> google.protobuf.Timestamp
2901- 6, // 16: ermite.CreateMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
3265+ 39, // 15: ermite.AuthorVerdict.created_at:type_name -> google.protobuf.Timestamp
3266+ 8, // 16: ermite.CreateMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
29023267 0, // 17: ermite.ListMergeRequestsRequest.state:type_name -> ermite.MergeRequestState
2903- 6, // 18: ermite.ListMergeRequestsResponse.merge_requests:type_name -> ermite.MergeRequest
2904- 6, // 19: ermite.GetMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
2905- 37, // 20: ermite.GetMergeRequestResponse.commits:type_name -> ermite.Commit
2906- 38, // 21: ermite.GetMergeRequestResponse.stats:type_name -> ermite.DiffStats
2907- 39, // 22: ermite.GetMergeRequestResponse.diff:type_name -> ermite.Diff
2908- 7, // 23: ermite.GetMergeRequestResponse.comments:type_name -> ermite.Comment
2909- 8, // 24: ermite.GetMergeRequestResponse.verdicts:type_name -> ermite.AuthorVerdict
2910- 1, // 25: ermite.AddCommentRequest.side:type_name -> ermite.DiffSide
2911- 2, // 26: ermite.AddCommentRequest.verdict:type_name -> ermite.Verdict
2912- 7, // 27: ermite.AddCommentResponse.comment:type_name -> ermite.Comment
2913- 7, // 28: ermite.EditCommentResponse.comment:type_name -> ermite.Comment
2914- 7, // 29: ermite.DeleteCommentResponse.comment:type_name -> ermite.Comment
2915- 7, // 30: ermite.ResolveCommentResponse.comment:type_name -> ermite.Comment
2916- 6, // 31: ermite.CloseMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
2917- 6, // 32: ermite.MarkReadyResponse.merge_request:type_name -> ermite.MergeRequest
2918- 36, // 33: ermite.MergeMergeRequestRequest.mode:type_name -> ermite.MergeMode
2919- 6, // 34: ermite.MergeMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
2920- 36, // 35: ermite.EnableAutoMergeRequest.mode:type_name -> ermite.MergeMode
2921- 6, // 36: ermite.EnableAutoMergeResponse.merge_request:type_name -> ermite.MergeRequest
2922- 6, // 37: ermite.CancelAutoMergeResponse.merge_request:type_name -> ermite.MergeRequest
2923- 9, // 38: ermite.MergeRequestService.CreateMergeRequest:input_type -> ermite.CreateMergeRequestRequest
2924- 11, // 39: ermite.MergeRequestService.ListMergeRequests:input_type -> ermite.ListMergeRequestsRequest
2925- 13, // 40: ermite.MergeRequestService.GetMergeRequest:input_type -> ermite.GetMergeRequestRequest
2926- 15, // 41: ermite.MergeRequestService.AddComment:input_type -> ermite.AddCommentRequest
2927- 17, // 42: ermite.MergeRequestService.EditComment:input_type -> ermite.EditCommentRequest
2928- 19, // 43: ermite.MergeRequestService.DeleteComment:input_type -> ermite.DeleteCommentRequest
2929- 21, // 44: ermite.MergeRequestService.ResolveComment:input_type -> ermite.ResolveCommentRequest
2930- 23, // 45: ermite.MergeRequestService.CloseMergeRequest:input_type -> ermite.CloseMergeRequestRequest
2931- 25, // 46: ermite.MergeRequestService.MarkReady:input_type -> ermite.MarkReadyRequest
2932- 27, // 47: ermite.MergeRequestService.MergeMergeRequest:input_type -> ermite.MergeMergeRequestRequest
2933- 29, // 48: ermite.MergeRequestService.EnableAutoMerge:input_type -> ermite.EnableAutoMergeRequest
2934- 31, // 49: ermite.MergeRequestService.CancelAutoMerge:input_type -> ermite.CancelAutoMergeRequest
2935- 33, // 50: ermite.MergeRequestService.MarkRead:input_type -> ermite.MarkReadRequest
2936- 10, // 51: ermite.MergeRequestService.CreateMergeRequest:output_type -> ermite.CreateMergeRequestResponse
2937- 12, // 52: ermite.MergeRequestService.ListMergeRequests:output_type -> ermite.ListMergeRequestsResponse
2938- 14, // 53: ermite.MergeRequestService.GetMergeRequest:output_type -> ermite.GetMergeRequestResponse
2939- 16, // 54: ermite.MergeRequestService.AddComment:output_type -> ermite.AddCommentResponse
2940- 18, // 55: ermite.MergeRequestService.EditComment:output_type -> ermite.EditCommentResponse
2941- 20, // 56: ermite.MergeRequestService.DeleteComment:output_type -> ermite.DeleteCommentResponse
2942- 22, // 57: ermite.MergeRequestService.ResolveComment:output_type -> ermite.ResolveCommentResponse
2943- 24, // 58: ermite.MergeRequestService.CloseMergeRequest:output_type -> ermite.CloseMergeRequestResponse
2944- 26, // 59: ermite.MergeRequestService.MarkReady:output_type -> ermite.MarkReadyResponse
2945- 28, // 60: ermite.MergeRequestService.MergeMergeRequest:output_type -> ermite.MergeMergeRequestResponse
2946- 30, // 61: ermite.MergeRequestService.EnableAutoMerge:output_type -> ermite.EnableAutoMergeResponse
2947- 32, // 62: ermite.MergeRequestService.CancelAutoMerge:output_type -> ermite.CancelAutoMergeResponse
2948- 34, // 63: ermite.MergeRequestService.MarkRead:output_type -> ermite.MarkReadResponse
2949- 51, // [51:64] is the sub-list for method output_type
2950- 38, // [38:51] is the sub-list for method input_type
2951- 38, // [38:38] is the sub-list for extension type_name
2952- 38, // [38:38] is the sub-list for extension extendee
2953- 0, // [0:38] is the sub-list for field type_name
3268+ 8, // 18: ermite.ListMergeRequestsResponse.merge_requests:type_name -> ermite.MergeRequest
3269+ 4, // 19: ermite.MergeRequestIssue.state:type_name -> ermite.MergeRequestIssueState
3270+ 5, // 20: ermite.IssueEvent.kind:type_name -> ermite.IssueEventKind
3271+ 39, // 21: ermite.IssueEvent.created_at:type_name -> google.protobuf.Timestamp
3272+ 8, // 22: ermite.GetMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
3273+ 41, // 23: ermite.GetMergeRequestResponse.commits:type_name -> ermite.Commit
3274+ 42, // 24: ermite.GetMergeRequestResponse.stats:type_name -> ermite.DiffStats
3275+ 43, // 25: ermite.GetMergeRequestResponse.diff:type_name -> ermite.Diff
3276+ 9, // 26: ermite.GetMergeRequestResponse.comments:type_name -> ermite.Comment
3277+ 10, // 27: ermite.GetMergeRequestResponse.verdicts:type_name -> ermite.AuthorVerdict
3278+ 15, // 28: ermite.GetMergeRequestResponse.issues:type_name -> ermite.MergeRequestIssue
3279+ 16, // 29: ermite.GetMergeRequestResponse.issue_events:type_name -> ermite.IssueEvent
3280+ 1, // 30: ermite.AddCommentRequest.side:type_name -> ermite.DiffSide
3281+ 2, // 31: ermite.AddCommentRequest.verdict:type_name -> ermite.Verdict
3282+ 9, // 32: ermite.AddCommentResponse.comment:type_name -> ermite.Comment
3283+ 9, // 33: ermite.EditCommentResponse.comment:type_name -> ermite.Comment
3284+ 9, // 34: ermite.DeleteCommentResponse.comment:type_name -> ermite.Comment
3285+ 9, // 35: ermite.ResolveCommentResponse.comment:type_name -> ermite.Comment
3286+ 8, // 36: ermite.CloseMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
3287+ 8, // 37: ermite.MarkReadyResponse.merge_request:type_name -> ermite.MergeRequest
3288+ 40, // 38: ermite.MergeMergeRequestRequest.mode:type_name -> ermite.MergeMode
3289+ 8, // 39: ermite.MergeMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
3290+ 40, // 40: ermite.EnableAutoMergeRequest.mode:type_name -> ermite.MergeMode
3291+ 8, // 41: ermite.EnableAutoMergeResponse.merge_request:type_name -> ermite.MergeRequest
3292+ 8, // 42: ermite.CancelAutoMergeResponse.merge_request:type_name -> ermite.MergeRequest
3293+ 11, // 43: ermite.MergeRequestService.CreateMergeRequest:input_type -> ermite.CreateMergeRequestRequest
3294+ 13, // 44: ermite.MergeRequestService.ListMergeRequests:input_type -> ermite.ListMergeRequestsRequest
3295+ 17, // 45: ermite.MergeRequestService.GetMergeRequest:input_type -> ermite.GetMergeRequestRequest
3296+ 19, // 46: ermite.MergeRequestService.AddComment:input_type -> ermite.AddCommentRequest
3297+ 21, // 47: ermite.MergeRequestService.EditComment:input_type -> ermite.EditCommentRequest
3298+ 23, // 48: ermite.MergeRequestService.DeleteComment:input_type -> ermite.DeleteCommentRequest
3299+ 25, // 49: ermite.MergeRequestService.ResolveComment:input_type -> ermite.ResolveCommentRequest
3300+ 27, // 50: ermite.MergeRequestService.CloseMergeRequest:input_type -> ermite.CloseMergeRequestRequest
3301+ 29, // 51: ermite.MergeRequestService.MarkReady:input_type -> ermite.MarkReadyRequest
3302+ 31, // 52: ermite.MergeRequestService.MergeMergeRequest:input_type -> ermite.MergeMergeRequestRequest
3303+ 33, // 53: ermite.MergeRequestService.EnableAutoMerge:input_type -> ermite.EnableAutoMergeRequest
3304+ 35, // 54: ermite.MergeRequestService.CancelAutoMerge:input_type -> ermite.CancelAutoMergeRequest
3305+ 37, // 55: ermite.MergeRequestService.MarkRead:input_type -> ermite.MarkReadRequest
3306+ 12, // 56: ermite.MergeRequestService.CreateMergeRequest:output_type -> ermite.CreateMergeRequestResponse
3307+ 14, // 57: ermite.MergeRequestService.ListMergeRequests:output_type -> ermite.ListMergeRequestsResponse
3308+ 18, // 58: ermite.MergeRequestService.GetMergeRequest:output_type -> ermite.GetMergeRequestResponse
3309+ 20, // 59: ermite.MergeRequestService.AddComment:output_type -> ermite.AddCommentResponse
3310+ 22, // 60: ermite.MergeRequestService.EditComment:output_type -> ermite.EditCommentResponse
3311+ 24, // 61: ermite.MergeRequestService.DeleteComment:output_type -> ermite.DeleteCommentResponse
3312+ 26, // 62: ermite.MergeRequestService.ResolveComment:output_type -> ermite.ResolveCommentResponse
3313+ 28, // 63: ermite.MergeRequestService.CloseMergeRequest:output_type -> ermite.CloseMergeRequestResponse
3314+ 30, // 64: ermite.MergeRequestService.MarkReady:output_type -> ermite.MarkReadyResponse
3315+ 32, // 65: ermite.MergeRequestService.MergeMergeRequest:output_type -> ermite.MergeMergeRequestResponse
3316+ 34, // 66: ermite.MergeRequestService.EnableAutoMerge:output_type -> ermite.EnableAutoMergeResponse
3317+ 36, // 67: ermite.MergeRequestService.CancelAutoMerge:output_type -> ermite.CancelAutoMergeResponse
3318+ 38, // 68: ermite.MergeRequestService.MarkRead:output_type -> ermite.MarkReadResponse
3319+ 56, // [56:69] is the sub-list for method output_type
3320+ 43, // [43:56] is the sub-list for method input_type
3321+ 43, // [43:43] is the sub-list for extension type_name
3322+ 43, // [43:43] is the sub-list for extension extendee
3323+ 0, // [0:43] is the sub-list for field type_name
29543324 }
29553325
29563326 func init() { file_ermite_merge_request_proto_init() }
@@ -2965,8 +3335,8 @@ func file_ermite_merge_request_proto_init() {
29653335 File: protoimpl.DescBuilder{
29663336 GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
29673337 RawDescriptor: unsafe.Slice(unsafe.StringData(file_ermite_merge_request_proto_rawDesc), len(file_ermite_merge_request_proto_rawDesc)),
2968- NumEnums: 4,
2969- NumMessages: 31,
3338+ NumEnums: 6,
3339+ NumMessages: 33,
29703340 NumExtensions: 0,
29713341 NumServices: 1,
29723342 },
@@ -256,6 +256,128 @@ func (MergeabilityState) EnumDescriptor() ([]byte, []int) {
256 return file_ermite_merge_request_proto_rawDescGZIP(), []int{3}256 return file_ermite_merge_request_proto_rawDescGZIP(), []int{3}
257 }257 }
258 258
259+// MergeRequestIssueState is where an issue named by a merge request is in its
260+// life. Values share their numbers with IssueState (3, awaiting moderation,
261+// is never shown here). It exists because issue.proto imports this file and
262+// cannot be imported back.
263+type MergeRequestIssueState int32
264+
265+const (
266+ // Not set. Never returned by the server.
267+ MergeRequestIssueState_MERGE_REQUEST_ISSUE_STATE_UNSPECIFIED MergeRequestIssueState = 0
268+ // The issue is open.
269+ MergeRequestIssueState_MERGE_REQUEST_ISSUE_STATE_OPEN MergeRequestIssueState = 1
270+ // The issue is closed without being resolved.
271+ MergeRequestIssueState_MERGE_REQUEST_ISSUE_STATE_CLOSED MergeRequestIssueState = 2
272+ // The issue was resolved, by a merge or by hand.
273+ MergeRequestIssueState_MERGE_REQUEST_ISSUE_STATE_RESOLVED MergeRequestIssueState = 4
274+)
275+
276+// Enum value maps for MergeRequestIssueState.
277+var (
278+ MergeRequestIssueState_name = map[int32]string{
279+ 0: "MERGE_REQUEST_ISSUE_STATE_UNSPECIFIED",
280+ 1: "MERGE_REQUEST_ISSUE_STATE_OPEN",
281+ 2: "MERGE_REQUEST_ISSUE_STATE_CLOSED",
282+ 4: "MERGE_REQUEST_ISSUE_STATE_RESOLVED",
283+ }
284+ MergeRequestIssueState_value = map[string]int32{
285+ "MERGE_REQUEST_ISSUE_STATE_UNSPECIFIED": 0,
286+ "MERGE_REQUEST_ISSUE_STATE_OPEN": 1,
287+ "MERGE_REQUEST_ISSUE_STATE_CLOSED": 2,
288+ "MERGE_REQUEST_ISSUE_STATE_RESOLVED": 4,
289+ }
290+)
291+
292+func (x MergeRequestIssueState) Enum() *MergeRequestIssueState {
293+ p := new(MergeRequestIssueState)
294+ *p = x
295+ return p
296+}
297+
298+func (x MergeRequestIssueState) String() string {
299+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
300+}
301+
302+func (MergeRequestIssueState) Descriptor() protoreflect.EnumDescriptor {
303+ return file_ermite_merge_request_proto_enumTypes[4].Descriptor()
304+}
305+
306+func (MergeRequestIssueState) Type() protoreflect.EnumType {
307+ return &file_ermite_merge_request_proto_enumTypes[4]
308+}
309+
310+func (x MergeRequestIssueState) Number() protoreflect.EnumNumber {
311+ return protoreflect.EnumNumber(x)
312+}
313+
314+// Deprecated: Use MergeRequestIssueState.Descriptor instead.
315+func (MergeRequestIssueState) EnumDescriptor() ([]byte, []int) {
316+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{4}
317+}
318+
319+// IssueEventKind is what happened in an IssueEvent.
320+type IssueEventKind int32
321+
322+const (
323+ // Not set. Never returned by the server.
324+ IssueEventKind_ISSUE_EVENT_KIND_UNSPECIFIED IssueEventKind = 0
325+ // A merge request started naming the issue; closes says whether with a
326+ // closing reference.
327+ IssueEventKind_ISSUE_EVENT_KIND_REFERENCED IssueEventKind = 1
328+ // The issue was closed without being resolved.
329+ IssueEventKind_ISSUE_EVENT_KIND_CLOSED IssueEventKind = 2
330+ // The issue was reopened.
331+ IssueEventKind_ISSUE_EVENT_KIND_REOPENED IssueEventKind = 3
332+ // The issue was resolved; merge_request is set when a merge resolved it.
333+ IssueEventKind_ISSUE_EVENT_KIND_RESOLVED IssueEventKind = 4
334+)
335+
336+// Enum value maps for IssueEventKind.
337+var (
338+ IssueEventKind_name = map[int32]string{
339+ 0: "ISSUE_EVENT_KIND_UNSPECIFIED",
340+ 1: "ISSUE_EVENT_KIND_REFERENCED",
341+ 2: "ISSUE_EVENT_KIND_CLOSED",
342+ 3: "ISSUE_EVENT_KIND_REOPENED",
343+ 4: "ISSUE_EVENT_KIND_RESOLVED",
344+ }
345+ IssueEventKind_value = map[string]int32{
346+ "ISSUE_EVENT_KIND_UNSPECIFIED": 0,
347+ "ISSUE_EVENT_KIND_REFERENCED": 1,
348+ "ISSUE_EVENT_KIND_CLOSED": 2,
349+ "ISSUE_EVENT_KIND_REOPENED": 3,
350+ "ISSUE_EVENT_KIND_RESOLVED": 4,
351+ }
352+)
353+
354+func (x IssueEventKind) Enum() *IssueEventKind {
355+ p := new(IssueEventKind)
356+ *p = x
357+ return p
358+}
359+
360+func (x IssueEventKind) String() string {
361+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
362+}
363+
364+func (IssueEventKind) Descriptor() protoreflect.EnumDescriptor {
365+ return file_ermite_merge_request_proto_enumTypes[5].Descriptor()
366+}
367+
368+func (IssueEventKind) Type() protoreflect.EnumType {
369+ return &file_ermite_merge_request_proto_enumTypes[5]
370+}
371+
372+func (x IssueEventKind) Number() protoreflect.EnumNumber {
373+ return protoreflect.EnumNumber(x)
374+}
375+
376+// Deprecated: Use IssueEventKind.Descriptor instead.
377+func (IssueEventKind) EnumDescriptor() ([]byte, []int) {
378+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{5}
379+}
380+
259 // Mergeability is the result of checking an open merge request against the381 // Mergeability is the result of checking an open merge request against the
260 // tips of its branches.382 // tips of its branches.
261 type Mergeability struct {383 type Mergeability struct {
@@ -1185,6 +1307,195 @@ func (x *ListMergeRequestsResponse) GetNextPageToken() string {
1185 return ""1307 return ""
1186 }1308 }
1187 1309
1310+// MergeRequestIssue is an issue of the same repository that a merge request
1311+// names ("#N").
1312+type MergeRequestIssue struct {
1313+ state protoimpl.MessageState `protogen:"open.v1"`
1314+ // Number is the number of the issue.
1315+ Number int64 `protobuf:"varint,1,opt,name=number,proto3" json:"number,omitempty"`
1316+ // Title is the title of the issue.
1317+ Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
1318+ // State is where the issue is in its life.
1319+ State MergeRequestIssueState `protobuf:"varint,3,opt,name=state,proto3,enum=ermite.MergeRequestIssueState" json:"state,omitempty"`
1320+ // Closes says that a closing reference names the issue: merging the request
1321+ // resolves it.
1322+ Closes bool `protobuf:"varint,4,opt,name=closes,proto3" json:"closes,omitempty"`
1323+ unknownFields protoimpl.UnknownFields
1324+ sizeCache protoimpl.SizeCache
1325+}
1326+
1327+func (x *MergeRequestIssue) Reset() {
1328+ *x = MergeRequestIssue{}
1329+ mi := &file_ermite_merge_request_proto_msgTypes[9]
1330+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1331+ ms.StoreMessageInfo(mi)
1332+}
1333+
1334+func (x *MergeRequestIssue) String() string {
1335+ return protoimpl.X.MessageStringOf(x)
1336+}
1337+
1338+func (*MergeRequestIssue) ProtoMessage() {}
1339+
1340+func (x *MergeRequestIssue) ProtoReflect() protoreflect.Message {
1341+ mi := &file_ermite_merge_request_proto_msgTypes[9]
1342+ if x != nil {
1343+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1344+ if ms.LoadMessageInfo() == nil {
1345+ ms.StoreMessageInfo(mi)
1346+ }
1347+ return ms
1348+ }
1349+ return mi.MessageOf(x)
1350+}
1351+
1352+// Deprecated: Use MergeRequestIssue.ProtoReflect.Descriptor instead.
1353+func (*MergeRequestIssue) Descriptor() ([]byte, []int) {
1354+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{9}
1355+}
1356+
1357+func (x *MergeRequestIssue) GetNumber() int64 {
1358+ if x != nil {
1359+ return x.Number
1360+ }
1361+ return 0
1362+}
1363+
1364+func (x *MergeRequestIssue) GetTitle() string {
1365+ if x != nil {
1366+ return x.Title
1367+ }
1368+ return ""
1369+}
1370+
1371+func (x *MergeRequestIssue) GetState() MergeRequestIssueState {
1372+ if x != nil {
1373+ return x.State
1374+ }
1375+ return MergeRequestIssueState_MERGE_REQUEST_ISSUE_STATE_UNSPECIFIED
1376+}
1377+
1378+func (x *MergeRequestIssue) GetCloses() bool {
1379+ if x != nil {
1380+ return x.Closes
1381+ }
1382+ return false
1383+}
1384+
1385+// IssueEvent is one entry in the history of an issue. Events are append-only:
1386+// a reference that later disappears does not remove its event.
1387+type IssueEvent struct {
1388+ state protoimpl.MessageState `protogen:"open.v1"`
1389+ // Id identifies the event. Opaque.
1390+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
1391+ // Kind is what happened.
1392+ Kind IssueEventKind `protobuf:"varint,2,opt,name=kind,proto3,enum=ermite.IssueEventKind" json:"kind,omitempty"`
1393+ // Issue is the number of the issue.
1394+ Issue int64 `protobuf:"varint,3,opt,name=issue,proto3" json:"issue,omitempty"`
1395+ // MergeRequest is the number of the merge request involved; 0 if none.
1396+ MergeRequest int64 `protobuf:"varint,4,opt,name=merge_request,json=mergeRequest,proto3" json:"merge_request,omitempty"`
1397+ // MergeRequestTitle is the title of that merge request at read time; empty
1398+ // if none.
1399+ MergeRequestTitle string `protobuf:"bytes,5,opt,name=merge_request_title,json=mergeRequestTitle,proto3" json:"merge_request_title,omitempty"`
1400+ // Closes says that the reference was a closing one. Only set for
1401+ // ISSUE_EVENT_KIND_REFERENCED.
1402+ Closes bool `protobuf:"varint,6,opt,name=closes,proto3" json:"closes,omitempty"`
1403+ // Actor names who caused the event, like Issue.author: the label of the
1404+ // token or session. For events triggered by a merge, the label of who
1405+ // merged.
1406+ Actor string `protobuf:"bytes,7,opt,name=actor,proto3" json:"actor,omitempty"`
1407+ // CreatedAt is when the event happened.
1408+ CreatedAt *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
1409+ unknownFields protoimpl.UnknownFields
1410+ sizeCache protoimpl.SizeCache
1411+}
1412+
1413+func (x *IssueEvent) Reset() {
1414+ *x = IssueEvent{}
1415+ mi := &file_ermite_merge_request_proto_msgTypes[10]
1416+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1417+ ms.StoreMessageInfo(mi)
1418+}
1419+
1420+func (x *IssueEvent) String() string {
1421+ return protoimpl.X.MessageStringOf(x)
1422+}
1423+
1424+func (*IssueEvent) ProtoMessage() {}
1425+
1426+func (x *IssueEvent) ProtoReflect() protoreflect.Message {
1427+ mi := &file_ermite_merge_request_proto_msgTypes[10]
1428+ if x != nil {
1429+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1430+ if ms.LoadMessageInfo() == nil {
1431+ ms.StoreMessageInfo(mi)
1432+ }
1433+ return ms
1434+ }
1435+ return mi.MessageOf(x)
1436+}
1437+
1438+// Deprecated: Use IssueEvent.ProtoReflect.Descriptor instead.
1439+func (*IssueEvent) Descriptor() ([]byte, []int) {
1440+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{10}
1441+}
1442+
1443+func (x *IssueEvent) GetId() string {
1444+ if x != nil {
1445+ return x.Id
1446+ }
1447+ return ""
1448+}
1449+
1450+func (x *IssueEvent) GetKind() IssueEventKind {
1451+ if x != nil {
1452+ return x.Kind
1453+ }
1454+ return IssueEventKind_ISSUE_EVENT_KIND_UNSPECIFIED
1455+}
1456+
1457+func (x *IssueEvent) GetIssue() int64 {
1458+ if x != nil {
1459+ return x.Issue
1460+ }
1461+ return 0
1462+}
1463+
1464+func (x *IssueEvent) GetMergeRequest() int64 {
1465+ if x != nil {
1466+ return x.MergeRequest
1467+ }
1468+ return 0
1469+}
1470+
1471+func (x *IssueEvent) GetMergeRequestTitle() string {
1472+ if x != nil {
1473+ return x.MergeRequestTitle
1474+ }
1475+ return ""
1476+}
1477+
1478+func (x *IssueEvent) GetCloses() bool {
1479+ if x != nil {
1480+ return x.Closes
1481+ }
1482+ return false
1483+}
1484+
1485+func (x *IssueEvent) GetActor() string {
1486+ if x != nil {
1487+ return x.Actor
1488+ }
1489+ return ""
1490+}
1491+
1492+func (x *IssueEvent) GetCreatedAt() *timestamppb.Timestamp {
1493+ if x != nil {
1494+ return x.CreatedAt
1495+ }
1496+ return nil
1497+}
1498+
1188 // GetMergeRequestRequest selects a merge request.1499 // GetMergeRequestRequest selects a merge request.
1189 type GetMergeRequestRequest struct {1500 type GetMergeRequestRequest struct {
1190 state protoimpl.MessageState `protogen:"open.v1"`1501 state protoimpl.MessageState `protogen:"open.v1"`
@@ -1205,7 +1516,7 @@ type GetMergeRequestRequest struct {
1205 1516
1206 func (x *GetMergeRequestRequest) Reset() {1517 func (x *GetMergeRequestRequest) Reset() {
1207 *x = GetMergeRequestRequest{}1518 *x = GetMergeRequestRequest{}
1208- mi := &file_ermite_merge_request_proto_msgTypes[9]1519+ mi := &file_ermite_merge_request_proto_msgTypes[11]
1209 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1520 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1210 ms.StoreMessageInfo(mi)1521 ms.StoreMessageInfo(mi)
1211 }1522 }
@@ -1217,7 +1528,7 @@ func (x *GetMergeRequestRequest) String() string {
1217 func (*GetMergeRequestRequest) ProtoMessage() {}1528 func (*GetMergeRequestRequest) ProtoMessage() {}
1218 1529
1219 func (x *GetMergeRequestRequest) ProtoReflect() protoreflect.Message {1530 func (x *GetMergeRequestRequest) ProtoReflect() protoreflect.Message {
1220- mi := &file_ermite_merge_request_proto_msgTypes[9]1531+ mi := &file_ermite_merge_request_proto_msgTypes[11]
1221 if x != nil {1532 if x != nil {
1222 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1533 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1223 if ms.LoadMessageInfo() == nil {1534 if ms.LoadMessageInfo() == nil {
@@ -1230,7 +1541,7 @@ func (x *GetMergeRequestRequest) ProtoReflect() protoreflect.Message {
1230 1541
1231 // Deprecated: Use GetMergeRequestRequest.ProtoReflect.Descriptor instead.1542 // Deprecated: Use GetMergeRequestRequest.ProtoReflect.Descriptor instead.
1232 func (*GetMergeRequestRequest) Descriptor() ([]byte, []int) {1543 func (*GetMergeRequestRequest) Descriptor() ([]byte, []int) {
1233- return file_ermite_merge_request_proto_rawDescGZIP(), []int{9}1544+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{11}
1234 }1545 }
1235 1546
1236 func (x *GetMergeRequestRequest) GetRepo() string {1547 func (x *GetMergeRequestRequest) GetRepo() string {
@@ -1289,14 +1600,21 @@ type GetMergeRequestResponse struct {
1289 LastReadLost bool `protobuf:"varint,9,opt,name=last_read_lost,json=lastReadLost,proto3" json:"last_read_lost,omitempty"`1600 LastReadLost bool `protobuf:"varint,9,opt,name=last_read_lost,json=lastReadLost,proto3" json:"last_read_lost,omitempty"`
1290 // Verdicts are the current verdicts, one per author who gave one, ordered1601 // Verdicts are the current verdicts, one per author who gave one, ordered
1291 // by the comment that carries them, oldest first.1602 // by the comment that carries them, oldest first.
1292- Verdicts []*AuthorVerdict `protobuf:"bytes,10,rep,name=verdicts,proto3" json:"verdicts,omitempty"`1603+ Verdicts []*AuthorVerdict `protobuf:"bytes,10,rep,name=verdicts,proto3" json:"verdicts,omitempty"`
1604+ // Issues are the issues of the same repository that the merge request names,
1605+ // ascending by number, at most 100. Empty when issues are off.
1606+ Issues []*MergeRequestIssue `protobuf:"bytes,11,rep,name=issues,proto3" json:"issues,omitempty"`
1607+ // IssueEvents are the history entries that involve this merge request: the
1608+ // REFERENCED and RESOLVED events of the issues it names, oldest first, at
1609+ // most 500.
1610+ IssueEvents []*IssueEvent `protobuf:"bytes,12,rep,name=issue_events,json=issueEvents,proto3" json:"issue_events,omitempty"`
1293 unknownFields protoimpl.UnknownFields1611 unknownFields protoimpl.UnknownFields
1294 sizeCache protoimpl.SizeCache1612 sizeCache protoimpl.SizeCache
1295 }1613 }
1296 1614
1297 func (x *GetMergeRequestResponse) Reset() {1615 func (x *GetMergeRequestResponse) Reset() {
1298 *x = GetMergeRequestResponse{}1616 *x = GetMergeRequestResponse{}
1299- mi := &file_ermite_merge_request_proto_msgTypes[10]1617+ mi := &file_ermite_merge_request_proto_msgTypes[12]
1300 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1618 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1301 ms.StoreMessageInfo(mi)1619 ms.StoreMessageInfo(mi)
1302 }1620 }
@@ -1308,7 +1626,7 @@ func (x *GetMergeRequestResponse) String() string {
1308 func (*GetMergeRequestResponse) ProtoMessage() {}1626 func (*GetMergeRequestResponse) ProtoMessage() {}
1309 1627
1310 func (x *GetMergeRequestResponse) ProtoReflect() protoreflect.Message {1628 func (x *GetMergeRequestResponse) ProtoReflect() protoreflect.Message {
1311- mi := &file_ermite_merge_request_proto_msgTypes[10]1629+ mi := &file_ermite_merge_request_proto_msgTypes[12]
1312 if x != nil {1630 if x != nil {
1313 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1631 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1314 if ms.LoadMessageInfo() == nil {1632 if ms.LoadMessageInfo() == nil {
@@ -1321,7 +1639,7 @@ func (x *GetMergeRequestResponse) ProtoReflect() protoreflect.Message {
1321 1639
1322 // Deprecated: Use GetMergeRequestResponse.ProtoReflect.Descriptor instead.1640 // Deprecated: Use GetMergeRequestResponse.ProtoReflect.Descriptor instead.
1323 func (*GetMergeRequestResponse) Descriptor() ([]byte, []int) {1641 func (*GetMergeRequestResponse) Descriptor() ([]byte, []int) {
1324- return file_ermite_merge_request_proto_rawDescGZIP(), []int{10}1642+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{12}
1325 }1643 }
1326 1644
1327 func (x *GetMergeRequestResponse) GetMergeRequest() *MergeRequest {1645 func (x *GetMergeRequestResponse) GetMergeRequest() *MergeRequest {
@@ -1394,6 +1712,20 @@ func (x *GetMergeRequestResponse) GetVerdicts() []*AuthorVerdict {
1394 return nil1712 return nil
1395 }1713 }
1396 1714
1715+func (x *GetMergeRequestResponse) GetIssues() []*MergeRequestIssue {
1716+ if x != nil {
1717+ return x.Issues
1718+ }
1719+ return nil
1720+}
1721+
1722+func (x *GetMergeRequestResponse) GetIssueEvents() []*IssueEvent {
1723+ if x != nil {
1724+ return x.IssueEvents
1725+ }
1726+ return nil
1727+}
1728+
1397 // AddCommentRequest describes the comment to add.1729 // AddCommentRequest describes the comment to add.
1398 type AddCommentRequest struct {1730 type AddCommentRequest struct {
1399 state protoimpl.MessageState `protogen:"open.v1"`1731 state protoimpl.MessageState `protogen:"open.v1"`
@@ -1430,7 +1762,7 @@ type AddCommentRequest struct {
1430 1762
1431 func (x *AddCommentRequest) Reset() {1763 func (x *AddCommentRequest) Reset() {
1432 *x = AddCommentRequest{}1764 *x = AddCommentRequest{}
1433- mi := &file_ermite_merge_request_proto_msgTypes[11]1765+ mi := &file_ermite_merge_request_proto_msgTypes[13]
1434 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1766 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1435 ms.StoreMessageInfo(mi)1767 ms.StoreMessageInfo(mi)
1436 }1768 }
@@ -1442,7 +1774,7 @@ func (x *AddCommentRequest) String() string {
1442 func (*AddCommentRequest) ProtoMessage() {}1774 func (*AddCommentRequest) ProtoMessage() {}
1443 1775
1444 func (x *AddCommentRequest) ProtoReflect() protoreflect.Message {1776 func (x *AddCommentRequest) ProtoReflect() protoreflect.Message {
1445- mi := &file_ermite_merge_request_proto_msgTypes[11]1777+ mi := &file_ermite_merge_request_proto_msgTypes[13]
1446 if x != nil {1778 if x != nil {
1447 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1779 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1448 if ms.LoadMessageInfo() == nil {1780 if ms.LoadMessageInfo() == nil {
@@ -1455,7 +1787,7 @@ func (x *AddCommentRequest) ProtoReflect() protoreflect.Message {
1455 1787
1456 // Deprecated: Use AddCommentRequest.ProtoReflect.Descriptor instead.1788 // Deprecated: Use AddCommentRequest.ProtoReflect.Descriptor instead.
1457 func (*AddCommentRequest) Descriptor() ([]byte, []int) {1789 func (*AddCommentRequest) Descriptor() ([]byte, []int) {
1458- return file_ermite_merge_request_proto_rawDescGZIP(), []int{11}1790+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{13}
1459 }1791 }
1460 1792
1461 func (x *AddCommentRequest) GetRepo() string {1793 func (x *AddCommentRequest) GetRepo() string {
@@ -1532,7 +1864,7 @@ type AddCommentResponse struct {
1532 1864
1533 func (x *AddCommentResponse) Reset() {1865 func (x *AddCommentResponse) Reset() {
1534 *x = AddCommentResponse{}1866 *x = AddCommentResponse{}
1535- mi := &file_ermite_merge_request_proto_msgTypes[12]1867+ mi := &file_ermite_merge_request_proto_msgTypes[14]
1536 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1868 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1537 ms.StoreMessageInfo(mi)1869 ms.StoreMessageInfo(mi)
1538 }1870 }
@@ -1544,7 +1876,7 @@ func (x *AddCommentResponse) String() string {
1544 func (*AddCommentResponse) ProtoMessage() {}1876 func (*AddCommentResponse) ProtoMessage() {}
1545 1877
1546 func (x *AddCommentResponse) ProtoReflect() protoreflect.Message {1878 func (x *AddCommentResponse) ProtoReflect() protoreflect.Message {
1547- mi := &file_ermite_merge_request_proto_msgTypes[12]1879+ mi := &file_ermite_merge_request_proto_msgTypes[14]
1548 if x != nil {1880 if x != nil {
1549 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1881 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1550 if ms.LoadMessageInfo() == nil {1882 if ms.LoadMessageInfo() == nil {
@@ -1557,7 +1889,7 @@ func (x *AddCommentResponse) ProtoReflect() protoreflect.Message {
1557 1889
1558 // Deprecated: Use AddCommentResponse.ProtoReflect.Descriptor instead.1890 // Deprecated: Use AddCommentResponse.ProtoReflect.Descriptor instead.
1559 func (*AddCommentResponse) Descriptor() ([]byte, []int) {1891 func (*AddCommentResponse) Descriptor() ([]byte, []int) {
1560- return file_ermite_merge_request_proto_rawDescGZIP(), []int{12}1892+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{14}
1561 }1893 }
1562 1894
1563 func (x *AddCommentResponse) GetComment() *Comment {1895 func (x *AddCommentResponse) GetComment() *Comment {
@@ -1585,7 +1917,7 @@ type EditCommentRequest struct {
1585 1917
1586 func (x *EditCommentRequest) Reset() {1918 func (x *EditCommentRequest) Reset() {
1587 *x = EditCommentRequest{}1919 *x = EditCommentRequest{}
1588- mi := &file_ermite_merge_request_proto_msgTypes[13]1920+ mi := &file_ermite_merge_request_proto_msgTypes[15]
1589 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1921 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1590 ms.StoreMessageInfo(mi)1922 ms.StoreMessageInfo(mi)
1591 }1923 }
@@ -1597,7 +1929,7 @@ func (x *EditCommentRequest) String() string {
1597 func (*EditCommentRequest) ProtoMessage() {}1929 func (*EditCommentRequest) ProtoMessage() {}
1598 1930
1599 func (x *EditCommentRequest) ProtoReflect() protoreflect.Message {1931 func (x *EditCommentRequest) ProtoReflect() protoreflect.Message {
1600- mi := &file_ermite_merge_request_proto_msgTypes[13]1932+ mi := &file_ermite_merge_request_proto_msgTypes[15]
1601 if x != nil {1933 if x != nil {
1602 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1934 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1603 if ms.LoadMessageInfo() == nil {1935 if ms.LoadMessageInfo() == nil {
@@ -1610,7 +1942,7 @@ func (x *EditCommentRequest) ProtoReflect() protoreflect.Message {
1610 1942
1611 // Deprecated: Use EditCommentRequest.ProtoReflect.Descriptor instead.1943 // Deprecated: Use EditCommentRequest.ProtoReflect.Descriptor instead.
1612 func (*EditCommentRequest) Descriptor() ([]byte, []int) {1944 func (*EditCommentRequest) Descriptor() ([]byte, []int) {
1613- return file_ermite_merge_request_proto_rawDescGZIP(), []int{13}1945+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{15}
1614 }1946 }
1615 1947
1616 func (x *EditCommentRequest) GetRepo() string {1948 func (x *EditCommentRequest) GetRepo() string {
@@ -1652,7 +1984,7 @@ type EditCommentResponse struct {
1652 1984
1653 func (x *EditCommentResponse) Reset() {1985 func (x *EditCommentResponse) Reset() {
1654 *x = EditCommentResponse{}1986 *x = EditCommentResponse{}
1655- mi := &file_ermite_merge_request_proto_msgTypes[14]1987+ mi := &file_ermite_merge_request_proto_msgTypes[16]
1656 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1988 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1657 ms.StoreMessageInfo(mi)1989 ms.StoreMessageInfo(mi)
1658 }1990 }
@@ -1664,7 +1996,7 @@ func (x *EditCommentResponse) String() string {
1664 func (*EditCommentResponse) ProtoMessage() {}1996 func (*EditCommentResponse) ProtoMessage() {}
1665 1997
1666 func (x *EditCommentResponse) ProtoReflect() protoreflect.Message {1998 func (x *EditCommentResponse) ProtoReflect() protoreflect.Message {
1667- mi := &file_ermite_merge_request_proto_msgTypes[14]1999+ mi := &file_ermite_merge_request_proto_msgTypes[16]
1668 if x != nil {2000 if x != nil {
1669 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2001 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1670 if ms.LoadMessageInfo() == nil {2002 if ms.LoadMessageInfo() == nil {
@@ -1677,7 +2009,7 @@ func (x *EditCommentResponse) ProtoReflect() protoreflect.Message {
1677 2009
1678 // Deprecated: Use EditCommentResponse.ProtoReflect.Descriptor instead.2010 // Deprecated: Use EditCommentResponse.ProtoReflect.Descriptor instead.
1679 func (*EditCommentResponse) Descriptor() ([]byte, []int) {2011 func (*EditCommentResponse) Descriptor() ([]byte, []int) {
1680- return file_ermite_merge_request_proto_rawDescGZIP(), []int{14}2012+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{16}
1681 }2013 }
1682 2014
1683 func (x *EditCommentResponse) GetComment() *Comment {2015 func (x *EditCommentResponse) GetComment() *Comment {
@@ -1702,7 +2034,7 @@ type DeleteCommentRequest struct {
1702 2034
1703 func (x *DeleteCommentRequest) Reset() {2035 func (x *DeleteCommentRequest) Reset() {
1704 *x = DeleteCommentRequest{}2036 *x = DeleteCommentRequest{}
1705- mi := &file_ermite_merge_request_proto_msgTypes[15]2037+ mi := &file_ermite_merge_request_proto_msgTypes[17]
1706 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2038 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1707 ms.StoreMessageInfo(mi)2039 ms.StoreMessageInfo(mi)
1708 }2040 }
@@ -1714,7 +2046,7 @@ func (x *DeleteCommentRequest) String() string {
1714 func (*DeleteCommentRequest) ProtoMessage() {}2046 func (*DeleteCommentRequest) ProtoMessage() {}
1715 2047
1716 func (x *DeleteCommentRequest) ProtoReflect() protoreflect.Message {2048 func (x *DeleteCommentRequest) ProtoReflect() protoreflect.Message {
1717- mi := &file_ermite_merge_request_proto_msgTypes[15]2049+ mi := &file_ermite_merge_request_proto_msgTypes[17]
1718 if x != nil {2050 if x != nil {
1719 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2051 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1720 if ms.LoadMessageInfo() == nil {2052 if ms.LoadMessageInfo() == nil {
@@ -1727,7 +2059,7 @@ func (x *DeleteCommentRequest) ProtoReflect() protoreflect.Message {
1727 2059
1728 // Deprecated: Use DeleteCommentRequest.ProtoReflect.Descriptor instead.2060 // Deprecated: Use DeleteCommentRequest.ProtoReflect.Descriptor instead.
1729 func (*DeleteCommentRequest) Descriptor() ([]byte, []int) {2061 func (*DeleteCommentRequest) Descriptor() ([]byte, []int) {
1730- return file_ermite_merge_request_proto_rawDescGZIP(), []int{15}2062+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{17}
1731 }2063 }
1732 2064
1733 func (x *DeleteCommentRequest) GetRepo() string {2065 func (x *DeleteCommentRequest) GetRepo() string {
@@ -1762,7 +2094,7 @@ type DeleteCommentResponse struct {
1762 2094
1763 func (x *DeleteCommentResponse) Reset() {2095 func (x *DeleteCommentResponse) Reset() {
1764 *x = DeleteCommentResponse{}2096 *x = DeleteCommentResponse{}
1765- mi := &file_ermite_merge_request_proto_msgTypes[16]2097+ mi := &file_ermite_merge_request_proto_msgTypes[18]
1766 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2098 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1767 ms.StoreMessageInfo(mi)2099 ms.StoreMessageInfo(mi)
1768 }2100 }
@@ -1774,7 +2106,7 @@ func (x *DeleteCommentResponse) String() string {
1774 func (*DeleteCommentResponse) ProtoMessage() {}2106 func (*DeleteCommentResponse) ProtoMessage() {}
1775 2107
1776 func (x *DeleteCommentResponse) ProtoReflect() protoreflect.Message {2108 func (x *DeleteCommentResponse) ProtoReflect() protoreflect.Message {
1777- mi := &file_ermite_merge_request_proto_msgTypes[16]2109+ mi := &file_ermite_merge_request_proto_msgTypes[18]
1778 if x != nil {2110 if x != nil {
1779 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2111 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1780 if ms.LoadMessageInfo() == nil {2112 if ms.LoadMessageInfo() == nil {
@@ -1787,7 +2119,7 @@ func (x *DeleteCommentResponse) ProtoReflect() protoreflect.Message {
1787 2119
1788 // Deprecated: Use DeleteCommentResponse.ProtoReflect.Descriptor instead.2120 // Deprecated: Use DeleteCommentResponse.ProtoReflect.Descriptor instead.
1789 func (*DeleteCommentResponse) Descriptor() ([]byte, []int) {2121 func (*DeleteCommentResponse) Descriptor() ([]byte, []int) {
1790- return file_ermite_merge_request_proto_rawDescGZIP(), []int{16}2122+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{18}
1791 }2123 }
1792 2124
1793 func (x *DeleteCommentResponse) GetComment() *Comment {2125 func (x *DeleteCommentResponse) GetComment() *Comment {
@@ -1814,7 +2146,7 @@ type ResolveCommentRequest struct {
1814 2146
1815 func (x *ResolveCommentRequest) Reset() {2147 func (x *ResolveCommentRequest) Reset() {
1816 *x = ResolveCommentRequest{}2148 *x = ResolveCommentRequest{}
1817- mi := &file_ermite_merge_request_proto_msgTypes[17]2149+ mi := &file_ermite_merge_request_proto_msgTypes[19]
1818 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2150 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1819 ms.StoreMessageInfo(mi)2151 ms.StoreMessageInfo(mi)
1820 }2152 }
@@ -1826,7 +2158,7 @@ func (x *ResolveCommentRequest) String() string {
1826 func (*ResolveCommentRequest) ProtoMessage() {}2158 func (*ResolveCommentRequest) ProtoMessage() {}
1827 2159
1828 func (x *ResolveCommentRequest) ProtoReflect() protoreflect.Message {2160 func (x *ResolveCommentRequest) ProtoReflect() protoreflect.Message {
1829- mi := &file_ermite_merge_request_proto_msgTypes[17]2161+ mi := &file_ermite_merge_request_proto_msgTypes[19]
1830 if x != nil {2162 if x != nil {
1831 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2163 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1832 if ms.LoadMessageInfo() == nil {2164 if ms.LoadMessageInfo() == nil {
@@ -1839,7 +2171,7 @@ func (x *ResolveCommentRequest) ProtoReflect() protoreflect.Message {
1839 2171
1840 // Deprecated: Use ResolveCommentRequest.ProtoReflect.Descriptor instead.2172 // Deprecated: Use ResolveCommentRequest.ProtoReflect.Descriptor instead.
1841 func (*ResolveCommentRequest) Descriptor() ([]byte, []int) {2173 func (*ResolveCommentRequest) Descriptor() ([]byte, []int) {
1842- return file_ermite_merge_request_proto_rawDescGZIP(), []int{17}2174+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{19}
1843 }2175 }
1844 2176
1845 func (x *ResolveCommentRequest) GetRepo() string {2177 func (x *ResolveCommentRequest) GetRepo() string {
@@ -1881,7 +2213,7 @@ type ResolveCommentResponse struct {
1881 2213
1882 func (x *ResolveCommentResponse) Reset() {2214 func (x *ResolveCommentResponse) Reset() {
1883 *x = ResolveCommentResponse{}2215 *x = ResolveCommentResponse{}
1884- mi := &file_ermite_merge_request_proto_msgTypes[18]2216+ mi := &file_ermite_merge_request_proto_msgTypes[20]
1885 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2217 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1886 ms.StoreMessageInfo(mi)2218 ms.StoreMessageInfo(mi)
1887 }2219 }
@@ -1893,7 +2225,7 @@ func (x *ResolveCommentResponse) String() string {
1893 func (*ResolveCommentResponse) ProtoMessage() {}2225 func (*ResolveCommentResponse) ProtoMessage() {}
1894 2226
1895 func (x *ResolveCommentResponse) ProtoReflect() protoreflect.Message {2227 func (x *ResolveCommentResponse) ProtoReflect() protoreflect.Message {
1896- mi := &file_ermite_merge_request_proto_msgTypes[18]2228+ mi := &file_ermite_merge_request_proto_msgTypes[20]
1897 if x != nil {2229 if x != nil {
1898 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2230 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1899 if ms.LoadMessageInfo() == nil {2231 if ms.LoadMessageInfo() == nil {
@@ -1906,7 +2238,7 @@ func (x *ResolveCommentResponse) ProtoReflect() protoreflect.Message {
1906 2238
1907 // Deprecated: Use ResolveCommentResponse.ProtoReflect.Descriptor instead.2239 // Deprecated: Use ResolveCommentResponse.ProtoReflect.Descriptor instead.
1908 func (*ResolveCommentResponse) Descriptor() ([]byte, []int) {2240 func (*ResolveCommentResponse) Descriptor() ([]byte, []int) {
1909- return file_ermite_merge_request_proto_rawDescGZIP(), []int{18}2241+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{20}
1910 }2242 }
1911 2243
1912 func (x *ResolveCommentResponse) GetComment() *Comment {2244 func (x *ResolveCommentResponse) GetComment() *Comment {
@@ -1929,7 +2261,7 @@ type CloseMergeRequestRequest struct {
1929 2261
1930 func (x *CloseMergeRequestRequest) Reset() {2262 func (x *CloseMergeRequestRequest) Reset() {
1931 *x = CloseMergeRequestRequest{}2263 *x = CloseMergeRequestRequest{}
1932- mi := &file_ermite_merge_request_proto_msgTypes[19]2264+ mi := &file_ermite_merge_request_proto_msgTypes[21]
1933 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2265 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1934 ms.StoreMessageInfo(mi)2266 ms.StoreMessageInfo(mi)
1935 }2267 }
@@ -1941,7 +2273,7 @@ func (x *CloseMergeRequestRequest) String() string {
1941 func (*CloseMergeRequestRequest) ProtoMessage() {}2273 func (*CloseMergeRequestRequest) ProtoMessage() {}
1942 2274
1943 func (x *CloseMergeRequestRequest) ProtoReflect() protoreflect.Message {2275 func (x *CloseMergeRequestRequest) ProtoReflect() protoreflect.Message {
1944- mi := &file_ermite_merge_request_proto_msgTypes[19]2276+ mi := &file_ermite_merge_request_proto_msgTypes[21]
1945 if x != nil {2277 if x != nil {
1946 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2278 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1947 if ms.LoadMessageInfo() == nil {2279 if ms.LoadMessageInfo() == nil {
@@ -1954,7 +2286,7 @@ func (x *CloseMergeRequestRequest) ProtoReflect() protoreflect.Message {
1954 2286
1955 // Deprecated: Use CloseMergeRequestRequest.ProtoReflect.Descriptor instead.2287 // Deprecated: Use CloseMergeRequestRequest.ProtoReflect.Descriptor instead.
1956 func (*CloseMergeRequestRequest) Descriptor() ([]byte, []int) {2288 func (*CloseMergeRequestRequest) Descriptor() ([]byte, []int) {
1957- return file_ermite_merge_request_proto_rawDescGZIP(), []int{19}2289+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{21}
1958 }2290 }
1959 2291
1960 func (x *CloseMergeRequestRequest) GetRepo() string {2292 func (x *CloseMergeRequestRequest) GetRepo() string {
@@ -1982,7 +2314,7 @@ type CloseMergeRequestResponse struct {
1982 2314
1983 func (x *CloseMergeRequestResponse) Reset() {2315 func (x *CloseMergeRequestResponse) Reset() {
1984 *x = CloseMergeRequestResponse{}2316 *x = CloseMergeRequestResponse{}
1985- mi := &file_ermite_merge_request_proto_msgTypes[20]2317+ mi := &file_ermite_merge_request_proto_msgTypes[22]
1986 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2318 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1987 ms.StoreMessageInfo(mi)2319 ms.StoreMessageInfo(mi)
1988 }2320 }
@@ -1994,7 +2326,7 @@ func (x *CloseMergeRequestResponse) String() string {
1994 func (*CloseMergeRequestResponse) ProtoMessage() {}2326 func (*CloseMergeRequestResponse) ProtoMessage() {}
1995 2327
1996 func (x *CloseMergeRequestResponse) ProtoReflect() protoreflect.Message {2328 func (x *CloseMergeRequestResponse) ProtoReflect() protoreflect.Message {
1997- mi := &file_ermite_merge_request_proto_msgTypes[20]2329+ mi := &file_ermite_merge_request_proto_msgTypes[22]
1998 if x != nil {2330 if x != nil {
1999 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2331 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2000 if ms.LoadMessageInfo() == nil {2332 if ms.LoadMessageInfo() == nil {
@@ -2007,7 +2339,7 @@ func (x *CloseMergeRequestResponse) ProtoReflect() protoreflect.Message {
2007 2339
2008 // Deprecated: Use CloseMergeRequestResponse.ProtoReflect.Descriptor instead.2340 // Deprecated: Use CloseMergeRequestResponse.ProtoReflect.Descriptor instead.
2009 func (*CloseMergeRequestResponse) Descriptor() ([]byte, []int) {2341 func (*CloseMergeRequestResponse) Descriptor() ([]byte, []int) {
2010- return file_ermite_merge_request_proto_rawDescGZIP(), []int{20}2342+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{22}
2011 }2343 }
2012 2344
2013 func (x *CloseMergeRequestResponse) GetMergeRequest() *MergeRequest {2345 func (x *CloseMergeRequestResponse) GetMergeRequest() *MergeRequest {
@@ -2030,7 +2362,7 @@ type MarkReadyRequest struct {
2030 2362
2031 func (x *MarkReadyRequest) Reset() {2363 func (x *MarkReadyRequest) Reset() {
2032 *x = MarkReadyRequest{}2364 *x = MarkReadyRequest{}
2033- mi := &file_ermite_merge_request_proto_msgTypes[21]2365+ mi := &file_ermite_merge_request_proto_msgTypes[23]
2034 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2366 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2035 ms.StoreMessageInfo(mi)2367 ms.StoreMessageInfo(mi)
2036 }2368 }
@@ -2042,7 +2374,7 @@ func (x *MarkReadyRequest) String() string {
2042 func (*MarkReadyRequest) ProtoMessage() {}2374 func (*MarkReadyRequest) ProtoMessage() {}
2043 2375
2044 func (x *MarkReadyRequest) ProtoReflect() protoreflect.Message {2376 func (x *MarkReadyRequest) ProtoReflect() protoreflect.Message {
2045- mi := &file_ermite_merge_request_proto_msgTypes[21]2377+ mi := &file_ermite_merge_request_proto_msgTypes[23]
2046 if x != nil {2378 if x != nil {
2047 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2379 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2048 if ms.LoadMessageInfo() == nil {2380 if ms.LoadMessageInfo() == nil {
@@ -2055,7 +2387,7 @@ func (x *MarkReadyRequest) ProtoReflect() protoreflect.Message {
2055 2387
2056 // Deprecated: Use MarkReadyRequest.ProtoReflect.Descriptor instead.2388 // Deprecated: Use MarkReadyRequest.ProtoReflect.Descriptor instead.
2057 func (*MarkReadyRequest) Descriptor() ([]byte, []int) {2389 func (*MarkReadyRequest) Descriptor() ([]byte, []int) {
2058- return file_ermite_merge_request_proto_rawDescGZIP(), []int{21}2390+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{23}
2059 }2391 }
2060 2392
2061 func (x *MarkReadyRequest) GetRepo() string {2393 func (x *MarkReadyRequest) GetRepo() string {
@@ -2084,7 +2416,7 @@ type MarkReadyResponse struct {
2084 2416
2085 func (x *MarkReadyResponse) Reset() {2417 func (x *MarkReadyResponse) Reset() {
2086 *x = MarkReadyResponse{}2418 *x = MarkReadyResponse{}
2087- mi := &file_ermite_merge_request_proto_msgTypes[22]2419+ mi := &file_ermite_merge_request_proto_msgTypes[24]
2088 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2420 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2089 ms.StoreMessageInfo(mi)2421 ms.StoreMessageInfo(mi)
2090 }2422 }
@@ -2096,7 +2428,7 @@ func (x *MarkReadyResponse) String() string {
2096 func (*MarkReadyResponse) ProtoMessage() {}2428 func (*MarkReadyResponse) ProtoMessage() {}
2097 2429
2098 func (x *MarkReadyResponse) ProtoReflect() protoreflect.Message {2430 func (x *MarkReadyResponse) ProtoReflect() protoreflect.Message {
2099- mi := &file_ermite_merge_request_proto_msgTypes[22]2431+ mi := &file_ermite_merge_request_proto_msgTypes[24]
2100 if x != nil {2432 if x != nil {
2101 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2433 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2102 if ms.LoadMessageInfo() == nil {2434 if ms.LoadMessageInfo() == nil {
@@ -2109,7 +2441,7 @@ func (x *MarkReadyResponse) ProtoReflect() protoreflect.Message {
2109 2441
2110 // Deprecated: Use MarkReadyResponse.ProtoReflect.Descriptor instead.2442 // Deprecated: Use MarkReadyResponse.ProtoReflect.Descriptor instead.
2111 func (*MarkReadyResponse) Descriptor() ([]byte, []int) {2443 func (*MarkReadyResponse) Descriptor() ([]byte, []int) {
2112- return file_ermite_merge_request_proto_rawDescGZIP(), []int{22}2444+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{24}
2113 }2445 }
2114 2446
2115 func (x *MarkReadyResponse) GetMergeRequest() *MergeRequest {2447 func (x *MarkReadyResponse) GetMergeRequest() *MergeRequest {
@@ -2150,7 +2482,7 @@ type MergeMergeRequestRequest struct {
2150 2482
2151 func (x *MergeMergeRequestRequest) Reset() {2483 func (x *MergeMergeRequestRequest) Reset() {
2152 *x = MergeMergeRequestRequest{}2484 *x = MergeMergeRequestRequest{}
2153- mi := &file_ermite_merge_request_proto_msgTypes[23]2485+ mi := &file_ermite_merge_request_proto_msgTypes[25]
2154 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2486 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2155 ms.StoreMessageInfo(mi)2487 ms.StoreMessageInfo(mi)
2156 }2488 }
@@ -2162,7 +2494,7 @@ func (x *MergeMergeRequestRequest) String() string {
2162 func (*MergeMergeRequestRequest) ProtoMessage() {}2494 func (*MergeMergeRequestRequest) ProtoMessage() {}
2163 2495
2164 func (x *MergeMergeRequestRequest) ProtoReflect() protoreflect.Message {2496 func (x *MergeMergeRequestRequest) ProtoReflect() protoreflect.Message {
2165- mi := &file_ermite_merge_request_proto_msgTypes[23]2497+ mi := &file_ermite_merge_request_proto_msgTypes[25]
2166 if x != nil {2498 if x != nil {
2167 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2499 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2168 if ms.LoadMessageInfo() == nil {2500 if ms.LoadMessageInfo() == nil {
@@ -2175,7 +2507,7 @@ func (x *MergeMergeRequestRequest) ProtoReflect() protoreflect.Message {
2175 2507
2176 // Deprecated: Use MergeMergeRequestRequest.ProtoReflect.Descriptor instead.2508 // Deprecated: Use MergeMergeRequestRequest.ProtoReflect.Descriptor instead.
2177 func (*MergeMergeRequestRequest) Descriptor() ([]byte, []int) {2509 func (*MergeMergeRequestRequest) Descriptor() ([]byte, []int) {
2178- return file_ermite_merge_request_proto_rawDescGZIP(), []int{23}2510+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{25}
2179 }2511 }
2180 2512
2181 func (x *MergeMergeRequestRequest) GetRepo() string {2513 func (x *MergeMergeRequestRequest) GetRepo() string {
@@ -2239,7 +2571,7 @@ type MergeMergeRequestResponse struct {
2239 2571
2240 func (x *MergeMergeRequestResponse) Reset() {2572 func (x *MergeMergeRequestResponse) Reset() {
2241 *x = MergeMergeRequestResponse{}2573 *x = MergeMergeRequestResponse{}
2242- mi := &file_ermite_merge_request_proto_msgTypes[24]2574+ mi := &file_ermite_merge_request_proto_msgTypes[26]
2243 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2575 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2244 ms.StoreMessageInfo(mi)2576 ms.StoreMessageInfo(mi)
2245 }2577 }
@@ -2251,7 +2583,7 @@ func (x *MergeMergeRequestResponse) String() string {
2251 func (*MergeMergeRequestResponse) ProtoMessage() {}2583 func (*MergeMergeRequestResponse) ProtoMessage() {}
2252 2584
2253 func (x *MergeMergeRequestResponse) ProtoReflect() protoreflect.Message {2585 func (x *MergeMergeRequestResponse) ProtoReflect() protoreflect.Message {
2254- mi := &file_ermite_merge_request_proto_msgTypes[24]2586+ mi := &file_ermite_merge_request_proto_msgTypes[26]
2255 if x != nil {2587 if x != nil {
2256 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2588 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2257 if ms.LoadMessageInfo() == nil {2589 if ms.LoadMessageInfo() == nil {
@@ -2264,7 +2596,7 @@ func (x *MergeMergeRequestResponse) ProtoReflect() protoreflect.Message {
2264 2596
2265 // Deprecated: Use MergeMergeRequestResponse.ProtoReflect.Descriptor instead.2597 // Deprecated: Use MergeMergeRequestResponse.ProtoReflect.Descriptor instead.
2266 func (*MergeMergeRequestResponse) Descriptor() ([]byte, []int) {2598 func (*MergeMergeRequestResponse) Descriptor() ([]byte, []int) {
2267- return file_ermite_merge_request_proto_rawDescGZIP(), []int{24}2599+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{26}
2268 }2600 }
2269 2601
2270 func (x *MergeMergeRequestResponse) GetMergeRequest() *MergeRequest {2602 func (x *MergeMergeRequestResponse) GetMergeRequest() *MergeRequest {
@@ -2302,7 +2634,7 @@ type EnableAutoMergeRequest struct {
2302 2634
2303 func (x *EnableAutoMergeRequest) Reset() {2635 func (x *EnableAutoMergeRequest) Reset() {
2304 *x = EnableAutoMergeRequest{}2636 *x = EnableAutoMergeRequest{}
2305- mi := &file_ermite_merge_request_proto_msgTypes[25]2637+ mi := &file_ermite_merge_request_proto_msgTypes[27]
2306 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2638 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2307 ms.StoreMessageInfo(mi)2639 ms.StoreMessageInfo(mi)
2308 }2640 }
@@ -2314,7 +2646,7 @@ func (x *EnableAutoMergeRequest) String() string {
2314 func (*EnableAutoMergeRequest) ProtoMessage() {}2646 func (*EnableAutoMergeRequest) ProtoMessage() {}
2315 2647
2316 func (x *EnableAutoMergeRequest) ProtoReflect() protoreflect.Message {2648 func (x *EnableAutoMergeRequest) ProtoReflect() protoreflect.Message {
2317- mi := &file_ermite_merge_request_proto_msgTypes[25]2649+ mi := &file_ermite_merge_request_proto_msgTypes[27]
2318 if x != nil {2650 if x != nil {
2319 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2651 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2320 if ms.LoadMessageInfo() == nil {2652 if ms.LoadMessageInfo() == nil {
@@ -2327,7 +2659,7 @@ func (x *EnableAutoMergeRequest) ProtoReflect() protoreflect.Message {
2327 2659
2328 // Deprecated: Use EnableAutoMergeRequest.ProtoReflect.Descriptor instead.2660 // Deprecated: Use EnableAutoMergeRequest.ProtoReflect.Descriptor instead.
2329 func (*EnableAutoMergeRequest) Descriptor() ([]byte, []int) {2661 func (*EnableAutoMergeRequest) Descriptor() ([]byte, []int) {
2330- return file_ermite_merge_request_proto_rawDescGZIP(), []int{25}2662+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{27}
2331 }2663 }
2332 2664
2333 func (x *EnableAutoMergeRequest) GetRepo() string {2665 func (x *EnableAutoMergeRequest) GetRepo() string {
@@ -2369,7 +2701,7 @@ type EnableAutoMergeResponse struct {
2369 2701
2370 func (x *EnableAutoMergeResponse) Reset() {2702 func (x *EnableAutoMergeResponse) Reset() {
2371 *x = EnableAutoMergeResponse{}2703 *x = EnableAutoMergeResponse{}
2372- mi := &file_ermite_merge_request_proto_msgTypes[26]2704+ mi := &file_ermite_merge_request_proto_msgTypes[28]
2373 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2705 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2374 ms.StoreMessageInfo(mi)2706 ms.StoreMessageInfo(mi)
2375 }2707 }
@@ -2381,7 +2713,7 @@ func (x *EnableAutoMergeResponse) String() string {
2381 func (*EnableAutoMergeResponse) ProtoMessage() {}2713 func (*EnableAutoMergeResponse) ProtoMessage() {}
2382 2714
2383 func (x *EnableAutoMergeResponse) ProtoReflect() protoreflect.Message {2715 func (x *EnableAutoMergeResponse) ProtoReflect() protoreflect.Message {
2384- mi := &file_ermite_merge_request_proto_msgTypes[26]2716+ mi := &file_ermite_merge_request_proto_msgTypes[28]
2385 if x != nil {2717 if x != nil {
2386 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2718 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2387 if ms.LoadMessageInfo() == nil {2719 if ms.LoadMessageInfo() == nil {
@@ -2394,7 +2726,7 @@ func (x *EnableAutoMergeResponse) ProtoReflect() protoreflect.Message {
2394 2726
2395 // Deprecated: Use EnableAutoMergeResponse.ProtoReflect.Descriptor instead.2727 // Deprecated: Use EnableAutoMergeResponse.ProtoReflect.Descriptor instead.
2396 func (*EnableAutoMergeResponse) Descriptor() ([]byte, []int) {2728 func (*EnableAutoMergeResponse) Descriptor() ([]byte, []int) {
2397- return file_ermite_merge_request_proto_rawDescGZIP(), []int{26}2729+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{28}
2398 }2730 }
2399 2731
2400 func (x *EnableAutoMergeResponse) GetMergeRequest() *MergeRequest {2732 func (x *EnableAutoMergeResponse) GetMergeRequest() *MergeRequest {
@@ -2417,7 +2749,7 @@ type CancelAutoMergeRequest struct {
2417 2749
2418 func (x *CancelAutoMergeRequest) Reset() {2750 func (x *CancelAutoMergeRequest) Reset() {
2419 *x = CancelAutoMergeRequest{}2751 *x = CancelAutoMergeRequest{}
2420- mi := &file_ermite_merge_request_proto_msgTypes[27]2752+ mi := &file_ermite_merge_request_proto_msgTypes[29]
2421 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2753 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2422 ms.StoreMessageInfo(mi)2754 ms.StoreMessageInfo(mi)
2423 }2755 }
@@ -2429,7 +2761,7 @@ func (x *CancelAutoMergeRequest) String() string {
2429 func (*CancelAutoMergeRequest) ProtoMessage() {}2761 func (*CancelAutoMergeRequest) ProtoMessage() {}
2430 2762
2431 func (x *CancelAutoMergeRequest) ProtoReflect() protoreflect.Message {2763 func (x *CancelAutoMergeRequest) ProtoReflect() protoreflect.Message {
2432- mi := &file_ermite_merge_request_proto_msgTypes[27]2764+ mi := &file_ermite_merge_request_proto_msgTypes[29]
2433 if x != nil {2765 if x != nil {
2434 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2766 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2435 if ms.LoadMessageInfo() == nil {2767 if ms.LoadMessageInfo() == nil {
@@ -2442,7 +2774,7 @@ func (x *CancelAutoMergeRequest) ProtoReflect() protoreflect.Message {
2442 2774
2443 // Deprecated: Use CancelAutoMergeRequest.ProtoReflect.Descriptor instead.2775 // Deprecated: Use CancelAutoMergeRequest.ProtoReflect.Descriptor instead.
2444 func (*CancelAutoMergeRequest) Descriptor() ([]byte, []int) {2776 func (*CancelAutoMergeRequest) Descriptor() ([]byte, []int) {
2445- return file_ermite_merge_request_proto_rawDescGZIP(), []int{27}2777+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{29}
2446 }2778 }
2447 2779
2448 func (x *CancelAutoMergeRequest) GetRepo() string {2780 func (x *CancelAutoMergeRequest) GetRepo() string {
@@ -2470,7 +2802,7 @@ type CancelAutoMergeResponse struct {
2470 2802
2471 func (x *CancelAutoMergeResponse) Reset() {2803 func (x *CancelAutoMergeResponse) Reset() {
2472 *x = CancelAutoMergeResponse{}2804 *x = CancelAutoMergeResponse{}
2473- mi := &file_ermite_merge_request_proto_msgTypes[28]2805+ mi := &file_ermite_merge_request_proto_msgTypes[30]
2474 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2806 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2475 ms.StoreMessageInfo(mi)2807 ms.StoreMessageInfo(mi)
2476 }2808 }
@@ -2482,7 +2814,7 @@ func (x *CancelAutoMergeResponse) String() string {
2482 func (*CancelAutoMergeResponse) ProtoMessage() {}2814 func (*CancelAutoMergeResponse) ProtoMessage() {}
2483 2815
2484 func (x *CancelAutoMergeResponse) ProtoReflect() protoreflect.Message {2816 func (x *CancelAutoMergeResponse) ProtoReflect() protoreflect.Message {
2485- mi := &file_ermite_merge_request_proto_msgTypes[28]2817+ mi := &file_ermite_merge_request_proto_msgTypes[30]
2486 if x != nil {2818 if x != nil {
2487 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2819 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2488 if ms.LoadMessageInfo() == nil {2820 if ms.LoadMessageInfo() == nil {
@@ -2495,7 +2827,7 @@ func (x *CancelAutoMergeResponse) ProtoReflect() protoreflect.Message {
2495 2827
2496 // Deprecated: Use CancelAutoMergeResponse.ProtoReflect.Descriptor instead.2828 // Deprecated: Use CancelAutoMergeResponse.ProtoReflect.Descriptor instead.
2497 func (*CancelAutoMergeResponse) Descriptor() ([]byte, []int) {2829 func (*CancelAutoMergeResponse) Descriptor() ([]byte, []int) {
2498- return file_ermite_merge_request_proto_rawDescGZIP(), []int{28}2830+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{30}
2499 }2831 }
2500 2832
2501 func (x *CancelAutoMergeResponse) GetMergeRequest() *MergeRequest {2833 func (x *CancelAutoMergeResponse) GetMergeRequest() *MergeRequest {
@@ -2522,7 +2854,7 @@ type MarkReadRequest struct {
2522 2854
2523 func (x *MarkReadRequest) Reset() {2855 func (x *MarkReadRequest) Reset() {
2524 *x = MarkReadRequest{}2856 *x = MarkReadRequest{}
2525- mi := &file_ermite_merge_request_proto_msgTypes[29]2857+ mi := &file_ermite_merge_request_proto_msgTypes[31]
2526 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2858 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2527 ms.StoreMessageInfo(mi)2859 ms.StoreMessageInfo(mi)
2528 }2860 }
@@ -2534,7 +2866,7 @@ func (x *MarkReadRequest) String() string {
2534 func (*MarkReadRequest) ProtoMessage() {}2866 func (*MarkReadRequest) ProtoMessage() {}
2535 2867
2536 func (x *MarkReadRequest) ProtoReflect() protoreflect.Message {2868 func (x *MarkReadRequest) ProtoReflect() protoreflect.Message {
2537- mi := &file_ermite_merge_request_proto_msgTypes[29]2869+ mi := &file_ermite_merge_request_proto_msgTypes[31]
2538 if x != nil {2870 if x != nil {
2539 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2871 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2540 if ms.LoadMessageInfo() == nil {2872 if ms.LoadMessageInfo() == nil {
@@ -2547,7 +2879,7 @@ func (x *MarkReadRequest) ProtoReflect() protoreflect.Message {
2547 2879
2548 // Deprecated: Use MarkReadRequest.ProtoReflect.Descriptor instead.2880 // Deprecated: Use MarkReadRequest.ProtoReflect.Descriptor instead.
2549 func (*MarkReadRequest) Descriptor() ([]byte, []int) {2881 func (*MarkReadRequest) Descriptor() ([]byte, []int) {
2550- return file_ermite_merge_request_proto_rawDescGZIP(), []int{29}2882+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{31}
2551 }2883 }
2552 2884
2553 func (x *MarkReadRequest) GetRepo() string {2885 func (x *MarkReadRequest) GetRepo() string {
@@ -2580,7 +2912,7 @@ type MarkReadResponse struct {
2580 2912
2581 func (x *MarkReadResponse) Reset() {2913 func (x *MarkReadResponse) Reset() {
2582 *x = MarkReadResponse{}2914 *x = MarkReadResponse{}
2583- mi := &file_ermite_merge_request_proto_msgTypes[30]2915+ mi := &file_ermite_merge_request_proto_msgTypes[32]
2584 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2916 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2585 ms.StoreMessageInfo(mi)2917 ms.StoreMessageInfo(mi)
2586 }2918 }
@@ -2592,7 +2924,7 @@ func (x *MarkReadResponse) String() string {
2592 func (*MarkReadResponse) ProtoMessage() {}2924 func (*MarkReadResponse) ProtoMessage() {}
2593 2925
2594 func (x *MarkReadResponse) ProtoReflect() protoreflect.Message {2926 func (x *MarkReadResponse) ProtoReflect() protoreflect.Message {
2595- mi := &file_ermite_merge_request_proto_msgTypes[30]2927+ mi := &file_ermite_merge_request_proto_msgTypes[32]
2596 if x != nil {2928 if x != nil {
2597 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))2929 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
2598 if ms.LoadMessageInfo() == nil {2930 if ms.LoadMessageInfo() == nil {
@@ -2605,7 +2937,7 @@ func (x *MarkReadResponse) ProtoReflect() protoreflect.Message {
2605 2937
2606 // Deprecated: Use MarkReadResponse.ProtoReflect.Descriptor instead.2938 // Deprecated: Use MarkReadResponse.ProtoReflect.Descriptor instead.
2607 func (*MarkReadResponse) Descriptor() ([]byte, []int) {2939 func (*MarkReadResponse) Descriptor() ([]byte, []int) {
2608- return file_ermite_merge_request_proto_rawDescGZIP(), []int{30}2940+ return file_ermite_merge_request_proto_rawDescGZIP(), []int{32}
2609 }2941 }
2610 2942
2611 var File_ermite_merge_request_proto protoreflect.FileDescriptor2943 var File_ermite_merge_request_proto protoreflect.FileDescriptor
@@ -2696,11 +3028,27 @@ const file_ermite_merge_request_proto_rawDesc = "" +
2696 "page_token\x18\x04 \x01(\tR\tpageToken\"\x80\x01\n" +3028 "page_token\x18\x04 \x01(\tR\tpageToken\"\x80\x01\n" +
2697 "\x19ListMergeRequestsResponse\x12;\n" +3029 "\x19ListMergeRequestsResponse\x12;\n" +
2698 "\x0emerge_requests\x18\x01 \x03(\v2\x14.ermite.MergeRequestR\rmergeRequests\x12&\n" +3030 "\x0emerge_requests\x18\x01 \x03(\v2\x14.ermite.MergeRequestR\rmergeRequests\x12&\n" +
2699- "\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\"l\n" +3031+ "\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\"\x8f\x01\n" +
3032+ "\x11MergeRequestIssue\x12\x16\n" +
3033+ "\x06number\x18\x01 \x01(\x03R\x06number\x12\x14\n" +
3034+ "\x05title\x18\x02 \x01(\tR\x05title\x124\n" +
3035+ "\x05state\x18\x03 \x01(\x0e2\x1e.ermite.MergeRequestIssueStateR\x05state\x12\x16\n" +
3036+ "\x06closes\x18\x04 \x01(\bR\x06closes\"\x9c\x02\n" +
3037+ "\n" +
3038+ "IssueEvent\x12\x0e\n" +
3039+ "\x02id\x18\x01 \x01(\tR\x02id\x12*\n" +
3040+ "\x04kind\x18\x02 \x01(\x0e2\x16.ermite.IssueEventKindR\x04kind\x12\x14\n" +
3041+ "\x05issue\x18\x03 \x01(\x03R\x05issue\x12#\n" +
3042+ "\rmerge_request\x18\x04 \x01(\x03R\fmergeRequest\x12.\n" +
3043+ "\x13merge_request_title\x18\x05 \x01(\tR\x11mergeRequestTitle\x12\x16\n" +
3044+ "\x06closes\x18\x06 \x01(\bR\x06closes\x12\x14\n" +
3045+ "\x05actor\x18\a \x01(\tR\x05actor\x129\n" +
3046+ "\n" +
3047+ "created_at\x18\b \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\"l\n" +
2700 "\x16GetMergeRequestRequest\x12\x12\n" +3048 "\x16GetMergeRequestRequest\x12\x12\n" +
2701 "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x16\n" +3049 "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x16\n" +
2702 "\x06number\x18\x02 \x01(\x03R\x06number\x12&\n" +3050 "\x06number\x18\x02 \x01(\x03R\x06number\x12&\n" +
2703- "\x0fsince_last_read\x18\x03 \x01(\bR\rsinceLastRead\"\xc0\x03\n" +3051+ "\x0fsince_last_read\x18\x03 \x01(\bR\rsinceLastRead\"\xaa\x04\n" +
2704 "\x17GetMergeRequestResponse\x129\n" +3052 "\x17GetMergeRequestResponse\x129\n" +
2705 "\rmerge_request\x18\x01 \x01(\v2\x14.ermite.MergeRequestR\fmergeRequest\x12(\n" +3053 "\rmerge_request\x18\x01 \x01(\v2\x14.ermite.MergeRequestR\fmergeRequest\x12(\n" +
2706 "\acommits\x18\x02 \x03(\v2\x0e.ermite.CommitR\acommits\x12+\n" +3054 "\acommits\x18\x02 \x03(\v2\x0e.ermite.CommitR\acommits\x12+\n" +
@@ -2714,7 +3062,9 @@ const file_ermite_merge_request_proto_rawDesc = "" +
2714 "lastReadId\x12$\n" +3062 "lastReadId\x12$\n" +
2715 "\x0elast_read_lost\x18\t \x01(\bR\flastReadLost\x121\n" +3063 "\x0elast_read_lost\x18\t \x01(\bR\flastReadLost\x121\n" +
2716 "\bverdicts\x18\n" +3064 "\bverdicts\x18\n" +
2717- " \x03(\v2\x15.ermite.AuthorVerdictR\bverdicts\"\x86\x02\n" +3065+ " \x03(\v2\x15.ermite.AuthorVerdictR\bverdicts\x121\n" +
3066+ "\x06issues\x18\v \x03(\v2\x19.ermite.MergeRequestIssueR\x06issues\x125\n" +
3067+ "\fissue_events\x18\f \x03(\v2\x12.ermite.IssueEventR\vissueEvents\"\x86\x02\n" +
2718 "\x11AddCommentRequest\x12\x12\n" +3068 "\x11AddCommentRequest\x12\x12\n" +
2719 "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x16\n" +3069 "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x16\n" +
2720 "\x06number\x18\x02 \x01(\x03R\x06number\x12\x12\n" +3070 "\x06number\x18\x02 \x01(\x03R\x06number\x12\x12\n" +
@@ -2806,7 +3156,18 @@ const file_ermite_merge_request_proto_rawDesc = "" +
2806 "\x1bMERGEABILITY_STATE_CHECKING\x10\x01\x12!\n" +3156 "\x1bMERGEABILITY_STATE_CHECKING\x10\x01\x12!\n" +
2807 "\x1dMERGEABILITY_STATE_UP_TO_DATE\x10\x02\x12\x1d\n" +3157 "\x1dMERGEABILITY_STATE_UP_TO_DATE\x10\x02\x12\x1d\n" +
2808 "\x19MERGEABILITY_STATE_BEHIND\x10\x03\x12\x1f\n" +3158 "\x19MERGEABILITY_STATE_BEHIND\x10\x03\x12\x1f\n" +
2809- "\x1bMERGEABILITY_STATE_CONFLICT\x10\x042\xa9\b\n" +3159+ "\x1bMERGEABILITY_STATE_CONFLICT\x10\x04*\xb5\x01\n" +
3160+ "\x16MergeRequestIssueState\x12)\n" +
3161+ "%MERGE_REQUEST_ISSUE_STATE_UNSPECIFIED\x10\x00\x12\"\n" +
3162+ "\x1eMERGE_REQUEST_ISSUE_STATE_OPEN\x10\x01\x12$\n" +
3163+ " MERGE_REQUEST_ISSUE_STATE_CLOSED\x10\x02\x12&\n" +
3164+ "\"MERGE_REQUEST_ISSUE_STATE_RESOLVED\x10\x04*\xae\x01\n" +
3165+ "\x0eIssueEventKind\x12 \n" +
3166+ "\x1cISSUE_EVENT_KIND_UNSPECIFIED\x10\x00\x12\x1f\n" +
3167+ "\x1bISSUE_EVENT_KIND_REFERENCED\x10\x01\x12\x1b\n" +
3168+ "\x17ISSUE_EVENT_KIND_CLOSED\x10\x02\x12\x1d\n" +
3169+ "\x19ISSUE_EVENT_KIND_REOPENED\x10\x03\x12\x1d\n" +
3170+ "\x19ISSUE_EVENT_KIND_RESOLVED\x10\x042\xa9\b\n" +
2810 "\x13MergeRequestService\x12[\n" +3171 "\x13MergeRequestService\x12[\n" +
2811 "\x12CreateMergeRequest\x12!.ermite.CreateMergeRequestRequest\x1a\".ermite.CreateMergeRequestResponse\x12X\n" +3172 "\x12CreateMergeRequest\x12!.ermite.CreateMergeRequestRequest\x1a\".ermite.CreateMergeRequestResponse\x12X\n" +
2812 "\x11ListMergeRequests\x12 .ermite.ListMergeRequestsRequest\x1a!.ermite.ListMergeRequestsResponse\x12R\n" +3173 "\x11ListMergeRequests\x12 .ermite.ListMergeRequestsRequest\x1a!.ermite.ListMergeRequestsResponse\x12R\n" +
@@ -2837,120 +3198,129 @@ func file_ermite_merge_request_proto_rawDescGZIP() []byte {
2837 return file_ermite_merge_request_proto_rawDescData3198 return file_ermite_merge_request_proto_rawDescData
2838 }3199 }
2839 3200
2840-var file_ermite_merge_request_proto_enumTypes = make([]protoimpl.EnumInfo, 4)3201+var file_ermite_merge_request_proto_enumTypes = make([]protoimpl.EnumInfo, 6)
2841-var file_ermite_merge_request_proto_msgTypes = make([]protoimpl.MessageInfo, 31)3202+var file_ermite_merge_request_proto_msgTypes = make([]protoimpl.MessageInfo, 33)
2842 var file_ermite_merge_request_proto_goTypes = []any{3203 var file_ermite_merge_request_proto_goTypes = []any{
2843 (MergeRequestState)(0), // 0: ermite.MergeRequestState3204 (MergeRequestState)(0), // 0: ermite.MergeRequestState
2844 (DiffSide)(0), // 1: ermite.DiffSide3205 (DiffSide)(0), // 1: ermite.DiffSide
2845 (Verdict)(0), // 2: ermite.Verdict3206 (Verdict)(0), // 2: ermite.Verdict
2846 (MergeabilityState)(0), // 3: ermite.MergeabilityState3207 (MergeabilityState)(0), // 3: ermite.MergeabilityState
2847- (*Mergeability)(nil), // 4: ermite.Mergeability3208+ (MergeRequestIssueState)(0), // 4: ermite.MergeRequestIssueState
2848- (*AutoMerge)(nil), // 5: ermite.AutoMerge3209+ (IssueEventKind)(0), // 5: ermite.IssueEventKind
2849- (*MergeRequest)(nil), // 6: ermite.MergeRequest3210+ (*Mergeability)(nil), // 6: ermite.Mergeability
2850- (*Comment)(nil), // 7: ermite.Comment3211+ (*AutoMerge)(nil), // 7: ermite.AutoMerge
2851- (*AuthorVerdict)(nil), // 8: ermite.AuthorVerdict3212+ (*MergeRequest)(nil), // 8: ermite.MergeRequest
2852- (*CreateMergeRequestRequest)(nil), // 9: ermite.CreateMergeRequestRequest3213+ (*Comment)(nil), // 9: ermite.Comment
2853- (*CreateMergeRequestResponse)(nil), // 10: ermite.CreateMergeRequestResponse3214+ (*AuthorVerdict)(nil), // 10: ermite.AuthorVerdict
2854- (*ListMergeRequestsRequest)(nil), // 11: ermite.ListMergeRequestsRequest3215+ (*CreateMergeRequestRequest)(nil), // 11: ermite.CreateMergeRequestRequest
2855- (*ListMergeRequestsResponse)(nil), // 12: ermite.ListMergeRequestsResponse3216+ (*CreateMergeRequestResponse)(nil), // 12: ermite.CreateMergeRequestResponse
2856- (*GetMergeRequestRequest)(nil), // 13: ermite.GetMergeRequestRequest3217+ (*ListMergeRequestsRequest)(nil), // 13: ermite.ListMergeRequestsRequest
2857- (*GetMergeRequestResponse)(nil), // 14: ermite.GetMergeRequestResponse3218+ (*ListMergeRequestsResponse)(nil), // 14: ermite.ListMergeRequestsResponse
2858- (*AddCommentRequest)(nil), // 15: ermite.AddCommentRequest3219+ (*MergeRequestIssue)(nil), // 15: ermite.MergeRequestIssue
2859- (*AddCommentResponse)(nil), // 16: ermite.AddCommentResponse3220+ (*IssueEvent)(nil), // 16: ermite.IssueEvent
2860- (*EditCommentRequest)(nil), // 17: ermite.EditCommentRequest3221+ (*GetMergeRequestRequest)(nil), // 17: ermite.GetMergeRequestRequest
2861- (*EditCommentResponse)(nil), // 18: ermite.EditCommentResponse3222+ (*GetMergeRequestResponse)(nil), // 18: ermite.GetMergeRequestResponse
2862- (*DeleteCommentRequest)(nil), // 19: ermite.DeleteCommentRequest3223+ (*AddCommentRequest)(nil), // 19: ermite.AddCommentRequest
2863- (*DeleteCommentResponse)(nil), // 20: ermite.DeleteCommentResponse3224+ (*AddCommentResponse)(nil), // 20: ermite.AddCommentResponse
2864- (*ResolveCommentRequest)(nil), // 21: ermite.ResolveCommentRequest3225+ (*EditCommentRequest)(nil), // 21: ermite.EditCommentRequest
2865- (*ResolveCommentResponse)(nil), // 22: ermite.ResolveCommentResponse3226+ (*EditCommentResponse)(nil), // 22: ermite.EditCommentResponse
2866- (*CloseMergeRequestRequest)(nil), // 23: ermite.CloseMergeRequestRequest3227+ (*DeleteCommentRequest)(nil), // 23: ermite.DeleteCommentRequest
2867- (*CloseMergeRequestResponse)(nil), // 24: ermite.CloseMergeRequestResponse3228+ (*DeleteCommentResponse)(nil), // 24: ermite.DeleteCommentResponse
2868- (*MarkReadyRequest)(nil), // 25: ermite.MarkReadyRequest3229+ (*ResolveCommentRequest)(nil), // 25: ermite.ResolveCommentRequest
2869- (*MarkReadyResponse)(nil), // 26: ermite.MarkReadyResponse3230+ (*ResolveCommentResponse)(nil), // 26: ermite.ResolveCommentResponse
2870- (*MergeMergeRequestRequest)(nil), // 27: ermite.MergeMergeRequestRequest3231+ (*CloseMergeRequestRequest)(nil), // 27: ermite.CloseMergeRequestRequest
2871- (*MergeMergeRequestResponse)(nil), // 28: ermite.MergeMergeRequestResponse3232+ (*CloseMergeRequestResponse)(nil), // 28: ermite.CloseMergeRequestResponse
2872- (*EnableAutoMergeRequest)(nil), // 29: ermite.EnableAutoMergeRequest3233+ (*MarkReadyRequest)(nil), // 29: ermite.MarkReadyRequest
2873- (*EnableAutoMergeResponse)(nil), // 30: ermite.EnableAutoMergeResponse3234+ (*MarkReadyResponse)(nil), // 30: ermite.MarkReadyResponse
2874- (*CancelAutoMergeRequest)(nil), // 31: ermite.CancelAutoMergeRequest3235+ (*MergeMergeRequestRequest)(nil), // 31: ermite.MergeMergeRequestRequest
2875- (*CancelAutoMergeResponse)(nil), // 32: ermite.CancelAutoMergeResponse3236+ (*MergeMergeRequestResponse)(nil), // 32: ermite.MergeMergeRequestResponse
2876- (*MarkReadRequest)(nil), // 33: ermite.MarkReadRequest3237+ (*EnableAutoMergeRequest)(nil), // 33: ermite.EnableAutoMergeRequest
2877- (*MarkReadResponse)(nil), // 34: ermite.MarkReadResponse3238+ (*EnableAutoMergeResponse)(nil), // 34: ermite.EnableAutoMergeResponse
2878- (*timestamppb.Timestamp)(nil), // 35: google.protobuf.Timestamp3239+ (*CancelAutoMergeRequest)(nil), // 35: ermite.CancelAutoMergeRequest
2879- (MergeMode)(0), // 36: ermite.MergeMode3240+ (*CancelAutoMergeResponse)(nil), // 36: ermite.CancelAutoMergeResponse
2880- (*Commit)(nil), // 37: ermite.Commit3241+ (*MarkReadRequest)(nil), // 37: ermite.MarkReadRequest
2881- (*DiffStats)(nil), // 38: ermite.DiffStats3242+ (*MarkReadResponse)(nil), // 38: ermite.MarkReadResponse
2882- (*Diff)(nil), // 39: ermite.Diff3243+ (*timestamppb.Timestamp)(nil), // 39: google.protobuf.Timestamp
3244+ (MergeMode)(0), // 40: ermite.MergeMode
3245+ (*Commit)(nil), // 41: ermite.Commit
3246+ (*DiffStats)(nil), // 42: ermite.DiffStats
3247+ (*Diff)(nil), // 43: ermite.Diff
2883 }3248 }
2884 var file_ermite_merge_request_proto_depIdxs = []int32{3249 var file_ermite_merge_request_proto_depIdxs = []int32{
2885 3, // 0: ermite.Mergeability.state:type_name -> ermite.MergeabilityState3250 3, // 0: ermite.Mergeability.state:type_name -> ermite.MergeabilityState
2886- 35, // 1: ermite.Mergeability.checked_at:type_name -> google.protobuf.Timestamp3251+ 39, // 1: ermite.Mergeability.checked_at:type_name -> google.protobuf.Timestamp
2887- 36, // 2: ermite.AutoMerge.mode:type_name -> ermite.MergeMode3252+ 40, // 2: ermite.AutoMerge.mode:type_name -> ermite.MergeMode
2888- 35, // 3: ermite.AutoMerge.enabled_at:type_name -> google.protobuf.Timestamp3253+ 39, // 3: ermite.AutoMerge.enabled_at:type_name -> google.protobuf.Timestamp
2889 0, // 4: ermite.MergeRequest.state:type_name -> ermite.MergeRequestState3254 0, // 4: ermite.MergeRequest.state:type_name -> ermite.MergeRequestState
2890- 35, // 5: ermite.MergeRequest.created_at:type_name -> google.protobuf.Timestamp3255+ 39, // 5: ermite.MergeRequest.created_at:type_name -> google.protobuf.Timestamp
2891- 35, // 6: ermite.MergeRequest.updated_at:type_name -> google.protobuf.Timestamp3256+ 39, // 6: ermite.MergeRequest.updated_at:type_name -> google.protobuf.Timestamp
2892- 36, // 7: ermite.MergeRequest.merge_mode:type_name -> ermite.MergeMode3257+ 40, // 7: ermite.MergeRequest.merge_mode:type_name -> ermite.MergeMode
2893- 4, // 8: ermite.MergeRequest.mergeability:type_name -> ermite.Mergeability3258+ 6, // 8: ermite.MergeRequest.mergeability:type_name -> ermite.Mergeability
2894- 5, // 9: ermite.MergeRequest.auto_merge:type_name -> ermite.AutoMerge3259+ 7, // 9: ermite.MergeRequest.auto_merge:type_name -> ermite.AutoMerge
2895 1, // 10: ermite.Comment.side:type_name -> ermite.DiffSide3260 1, // 10: ermite.Comment.side:type_name -> ermite.DiffSide
2896- 35, // 11: ermite.Comment.created_at:type_name -> google.protobuf.Timestamp3261+ 39, // 11: ermite.Comment.created_at:type_name -> google.protobuf.Timestamp
2897 2, // 12: ermite.Comment.verdict:type_name -> ermite.Verdict3262 2, // 12: ermite.Comment.verdict:type_name -> ermite.Verdict
2898- 35, // 13: ermite.Comment.edited_at:type_name -> google.protobuf.Timestamp3263+ 39, // 13: ermite.Comment.edited_at:type_name -> google.protobuf.Timestamp
2899 2, // 14: ermite.AuthorVerdict.verdict:type_name -> ermite.Verdict3264 2, // 14: ermite.AuthorVerdict.verdict:type_name -> ermite.Verdict
2900- 35, // 15: ermite.AuthorVerdict.created_at:type_name -> google.protobuf.Timestamp3265+ 39, // 15: ermite.AuthorVerdict.created_at:type_name -> google.protobuf.Timestamp
2901- 6, // 16: ermite.CreateMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest3266+ 8, // 16: ermite.CreateMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
2902 0, // 17: ermite.ListMergeRequestsRequest.state:type_name -> ermite.MergeRequestState3267 0, // 17: ermite.ListMergeRequestsRequest.state:type_name -> ermite.MergeRequestState
2903- 6, // 18: ermite.ListMergeRequestsResponse.merge_requests:type_name -> ermite.MergeRequest3268+ 8, // 18: ermite.ListMergeRequestsResponse.merge_requests:type_name -> ermite.MergeRequest
2904- 6, // 19: ermite.GetMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest3269+ 4, // 19: ermite.MergeRequestIssue.state:type_name -> ermite.MergeRequestIssueState
2905- 37, // 20: ermite.GetMergeRequestResponse.commits:type_name -> ermite.Commit3270+ 5, // 20: ermite.IssueEvent.kind:type_name -> ermite.IssueEventKind
2906- 38, // 21: ermite.GetMergeRequestResponse.stats:type_name -> ermite.DiffStats3271+ 39, // 21: ermite.IssueEvent.created_at:type_name -> google.protobuf.Timestamp
2907- 39, // 22: ermite.GetMergeRequestResponse.diff:type_name -> ermite.Diff3272+ 8, // 22: ermite.GetMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
2908- 7, // 23: ermite.GetMergeRequestResponse.comments:type_name -> ermite.Comment3273+ 41, // 23: ermite.GetMergeRequestResponse.commits:type_name -> ermite.Commit
2909- 8, // 24: ermite.GetMergeRequestResponse.verdicts:type_name -> ermite.AuthorVerdict3274+ 42, // 24: ermite.GetMergeRequestResponse.stats:type_name -> ermite.DiffStats
2910- 1, // 25: ermite.AddCommentRequest.side:type_name -> ermite.DiffSide3275+ 43, // 25: ermite.GetMergeRequestResponse.diff:type_name -> ermite.Diff
2911- 2, // 26: ermite.AddCommentRequest.verdict:type_name -> ermite.Verdict3276+ 9, // 26: ermite.GetMergeRequestResponse.comments:type_name -> ermite.Comment
2912- 7, // 27: ermite.AddCommentResponse.comment:type_name -> ermite.Comment3277+ 10, // 27: ermite.GetMergeRequestResponse.verdicts:type_name -> ermite.AuthorVerdict
2913- 7, // 28: ermite.EditCommentResponse.comment:type_name -> ermite.Comment3278+ 15, // 28: ermite.GetMergeRequestResponse.issues:type_name -> ermite.MergeRequestIssue
2914- 7, // 29: ermite.DeleteCommentResponse.comment:type_name -> ermite.Comment3279+ 16, // 29: ermite.GetMergeRequestResponse.issue_events:type_name -> ermite.IssueEvent
2915- 7, // 30: ermite.ResolveCommentResponse.comment:type_name -> ermite.Comment3280+ 1, // 30: ermite.AddCommentRequest.side:type_name -> ermite.DiffSide
2916- 6, // 31: ermite.CloseMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest3281+ 2, // 31: ermite.AddCommentRequest.verdict:type_name -> ermite.Verdict
2917- 6, // 32: ermite.MarkReadyResponse.merge_request:type_name -> ermite.MergeRequest3282+ 9, // 32: ermite.AddCommentResponse.comment:type_name -> ermite.Comment
2918- 36, // 33: ermite.MergeMergeRequestRequest.mode:type_name -> ermite.MergeMode3283+ 9, // 33: ermite.EditCommentResponse.comment:type_name -> ermite.Comment
2919- 6, // 34: ermite.MergeMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest3284+ 9, // 34: ermite.DeleteCommentResponse.comment:type_name -> ermite.Comment
2920- 36, // 35: ermite.EnableAutoMergeRequest.mode:type_name -> ermite.MergeMode3285+ 9, // 35: ermite.ResolveCommentResponse.comment:type_name -> ermite.Comment
2921- 6, // 36: ermite.EnableAutoMergeResponse.merge_request:type_name -> ermite.MergeRequest3286+ 8, // 36: ermite.CloseMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
2922- 6, // 37: ermite.CancelAutoMergeResponse.merge_request:type_name -> ermite.MergeRequest3287+ 8, // 37: ermite.MarkReadyResponse.merge_request:type_name -> ermite.MergeRequest
2923- 9, // 38: ermite.MergeRequestService.CreateMergeRequest:input_type -> ermite.CreateMergeRequestRequest3288+ 40, // 38: ermite.MergeMergeRequestRequest.mode:type_name -> ermite.MergeMode
2924- 11, // 39: ermite.MergeRequestService.ListMergeRequests:input_type -> ermite.ListMergeRequestsRequest3289+ 8, // 39: ermite.MergeMergeRequestResponse.merge_request:type_name -> ermite.MergeRequest
2925- 13, // 40: ermite.MergeRequestService.GetMergeRequest:input_type -> ermite.GetMergeRequestRequest3290+ 40, // 40: ermite.EnableAutoMergeRequest.mode:type_name -> ermite.MergeMode
2926- 15, // 41: ermite.MergeRequestService.AddComment:input_type -> ermite.AddCommentRequest3291+ 8, // 41: ermite.EnableAutoMergeResponse.merge_request:type_name -> ermite.MergeRequest
2927- 17, // 42: ermite.MergeRequestService.EditComment:input_type -> ermite.EditCommentRequest3292+ 8, // 42: ermite.CancelAutoMergeResponse.merge_request:type_name -> ermite.MergeRequest
2928- 19, // 43: ermite.MergeRequestService.DeleteComment:input_type -> ermite.DeleteCommentRequest3293+ 11, // 43: ermite.MergeRequestService.CreateMergeRequest:input_type -> ermite.CreateMergeRequestRequest
2929- 21, // 44: ermite.MergeRequestService.ResolveComment:input_type -> ermite.ResolveCommentRequest3294+ 13, // 44: ermite.MergeRequestService.ListMergeRequests:input_type -> ermite.ListMergeRequestsRequest
2930- 23, // 45: ermite.MergeRequestService.CloseMergeRequest:input_type -> ermite.CloseMergeRequestRequest3295+ 17, // 45: ermite.MergeRequestService.GetMergeRequest:input_type -> ermite.GetMergeRequestRequest
2931- 25, // 46: ermite.MergeRequestService.MarkReady:input_type -> ermite.MarkReadyRequest3296+ 19, // 46: ermite.MergeRequestService.AddComment:input_type -> ermite.AddCommentRequest
2932- 27, // 47: ermite.MergeRequestService.MergeMergeRequest:input_type -> ermite.MergeMergeRequestRequest3297+ 21, // 47: ermite.MergeRequestService.EditComment:input_type -> ermite.EditCommentRequest
2933- 29, // 48: ermite.MergeRequestService.EnableAutoMerge:input_type -> ermite.EnableAutoMergeRequest3298+ 23, // 48: ermite.MergeRequestService.DeleteComment:input_type -> ermite.DeleteCommentRequest
2934- 31, // 49: ermite.MergeRequestService.CancelAutoMerge:input_type -> ermite.CancelAutoMergeRequest3299+ 25, // 49: ermite.MergeRequestService.ResolveComment:input_type -> ermite.ResolveCommentRequest
2935- 33, // 50: ermite.MergeRequestService.MarkRead:input_type -> ermite.MarkReadRequest3300+ 27, // 50: ermite.MergeRequestService.CloseMergeRequest:input_type -> ermite.CloseMergeRequestRequest
2936- 10, // 51: ermite.MergeRequestService.CreateMergeRequest:output_type -> ermite.CreateMergeRequestResponse3301+ 29, // 51: ermite.MergeRequestService.MarkReady:input_type -> ermite.MarkReadyRequest
2937- 12, // 52: ermite.MergeRequestService.ListMergeRequests:output_type -> ermite.ListMergeRequestsResponse3302+ 31, // 52: ermite.MergeRequestService.MergeMergeRequest:input_type -> ermite.MergeMergeRequestRequest
2938- 14, // 53: ermite.MergeRequestService.GetMergeRequest:output_type -> ermite.GetMergeRequestResponse3303+ 33, // 53: ermite.MergeRequestService.EnableAutoMerge:input_type -> ermite.EnableAutoMergeRequest
2939- 16, // 54: ermite.MergeRequestService.AddComment:output_type -> ermite.AddCommentResponse3304+ 35, // 54: ermite.MergeRequestService.CancelAutoMerge:input_type -> ermite.CancelAutoMergeRequest
2940- 18, // 55: ermite.MergeRequestService.EditComment:output_type -> ermite.EditCommentResponse3305+ 37, // 55: ermite.MergeRequestService.MarkRead:input_type -> ermite.MarkReadRequest
2941- 20, // 56: ermite.MergeRequestService.DeleteComment:output_type -> ermite.DeleteCommentResponse3306+ 12, // 56: ermite.MergeRequestService.CreateMergeRequest:output_type -> ermite.CreateMergeRequestResponse
2942- 22, // 57: ermite.MergeRequestService.ResolveComment:output_type -> ermite.ResolveCommentResponse3307+ 14, // 57: ermite.MergeRequestService.ListMergeRequests:output_type -> ermite.ListMergeRequestsResponse
2943- 24, // 58: ermite.MergeRequestService.CloseMergeRequest:output_type -> ermite.CloseMergeRequestResponse3308+ 18, // 58: ermite.MergeRequestService.GetMergeRequest:output_type -> ermite.GetMergeRequestResponse
2944- 26, // 59: ermite.MergeRequestService.MarkReady:output_type -> ermite.MarkReadyResponse3309+ 20, // 59: ermite.MergeRequestService.AddComment:output_type -> ermite.AddCommentResponse
2945- 28, // 60: ermite.MergeRequestService.MergeMergeRequest:output_type -> ermite.MergeMergeRequestResponse3310+ 22, // 60: ermite.MergeRequestService.EditComment:output_type -> ermite.EditCommentResponse
2946- 30, // 61: ermite.MergeRequestService.EnableAutoMerge:output_type -> ermite.EnableAutoMergeResponse3311+ 24, // 61: ermite.MergeRequestService.DeleteComment:output_type -> ermite.DeleteCommentResponse
2947- 32, // 62: ermite.MergeRequestService.CancelAutoMerge:output_type -> ermite.CancelAutoMergeResponse3312+ 26, // 62: ermite.MergeRequestService.ResolveComment:output_type -> ermite.ResolveCommentResponse
2948- 34, // 63: ermite.MergeRequestService.MarkRead:output_type -> ermite.MarkReadResponse3313+ 28, // 63: ermite.MergeRequestService.CloseMergeRequest:output_type -> ermite.CloseMergeRequestResponse
2949- 51, // [51:64] is the sub-list for method output_type3314+ 30, // 64: ermite.MergeRequestService.MarkReady:output_type -> ermite.MarkReadyResponse
2950- 38, // [38:51] is the sub-list for method input_type3315+ 32, // 65: ermite.MergeRequestService.MergeMergeRequest:output_type -> ermite.MergeMergeRequestResponse
2951- 38, // [38:38] is the sub-list for extension type_name3316+ 34, // 66: ermite.MergeRequestService.EnableAutoMerge:output_type -> ermite.EnableAutoMergeResponse
2952- 38, // [38:38] is the sub-list for extension extendee3317+ 36, // 67: ermite.MergeRequestService.CancelAutoMerge:output_type -> ermite.CancelAutoMergeResponse
2953- 0, // [0:38] is the sub-list for field type_name3318+ 38, // 68: ermite.MergeRequestService.MarkRead:output_type -> ermite.MarkReadResponse
3319+ 56, // [56:69] is the sub-list for method output_type
3320+ 43, // [43:56] is the sub-list for method input_type
3321+ 43, // [43:43] is the sub-list for extension type_name
3322+ 43, // [43:43] is the sub-list for extension extendee
3323+ 0, // [0:43] is the sub-list for field type_name
2954 }3324 }
2955 3325
2956 func init() { file_ermite_merge_request_proto_init() }3326 func init() { file_ermite_merge_request_proto_init() }
@@ -2965,8 +3335,8 @@ func file_ermite_merge_request_proto_init() {
2965 File: protoimpl.DescBuilder{3335 File: protoimpl.DescBuilder{
2966 GoPackagePath: reflect.TypeOf(x{}).PkgPath(),3336 GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
2967 RawDescriptor: unsafe.Slice(unsafe.StringData(file_ermite_merge_request_proto_rawDesc), len(file_ermite_merge_request_proto_rawDesc)),3337 RawDescriptor: unsafe.Slice(unsafe.StringData(file_ermite_merge_request_proto_rawDesc), len(file_ermite_merge_request_proto_rawDesc)),
2968- NumEnums: 4,3338+ NumEnums: 6,
2969- NumMessages: 31,3339+ NumMessages: 33,
2970 NumExtensions: 0,3340 NumExtensions: 0,
2971 NumServices: 1,3341 NumServices: 1,
2972 },3342 },
M issue_test.go +2 -1
@@ -19,6 +19,7 @@ func TestIssueProcedures(t *testing.T) {
1919 ermiteconnect.IssueServiceAddIssueCommentProcedure: "AddIssueComment",
2020 ermiteconnect.IssueServiceCloseIssueProcedure: "CloseIssue",
2121 ermiteconnect.IssueServiceReopenIssueProcedure: "ReopenIssue",
22+ ermiteconnect.IssueServiceResolveIssueProcedure: "ResolveIssue",
2223 ermiteconnect.IssueServiceListPendingIssuesProcedure: "ListPendingIssues",
2324 ermiteconnect.IssueServiceApproveIssueProcedure: "ApproveIssue",
2425 ermiteconnect.IssueServiceRejectIssueProcedure: "RejectIssue",
@@ -58,7 +59,7 @@ func TestIssueContract(t *testing.T) {
5859 if ermite.Scope_SCOPE_ISSUE_WRITE != 11 {
5960 t.Fatal("issue:write scope number changed")
6061 }
61- for name, want := range map[string]int32{"ISSUE_STATE_UNSPECIFIED": 0, "ISSUE_STATE_OPEN": 1, "ISSUE_STATE_CLOSED": 2, "ISSUE_STATE_PENDING": 3} {
62+ for name, want := range map[string]int32{"ISSUE_STATE_UNSPECIFIED": 0, "ISSUE_STATE_OPEN": 1, "ISSUE_STATE_CLOSED": 2, "ISSUE_STATE_PENDING": 3, "ISSUE_STATE_RESOLVED": 4} {
6263 if got := ermite.IssueState_value[name]; got != want {
6364 t.Errorf("%s = %d, want %d", name, got, want)
6465 }
@@ -19,6 +19,7 @@ func TestIssueProcedures(t *testing.T) {
19 ermiteconnect.IssueServiceAddIssueCommentProcedure: "AddIssueComment",19 ermiteconnect.IssueServiceAddIssueCommentProcedure: "AddIssueComment",
20 ermiteconnect.IssueServiceCloseIssueProcedure: "CloseIssue",20 ermiteconnect.IssueServiceCloseIssueProcedure: "CloseIssue",
21 ermiteconnect.IssueServiceReopenIssueProcedure: "ReopenIssue",21 ermiteconnect.IssueServiceReopenIssueProcedure: "ReopenIssue",
22+ ermiteconnect.IssueServiceResolveIssueProcedure: "ResolveIssue",
22 ermiteconnect.IssueServiceListPendingIssuesProcedure: "ListPendingIssues",23 ermiteconnect.IssueServiceListPendingIssuesProcedure: "ListPendingIssues",
23 ermiteconnect.IssueServiceApproveIssueProcedure: "ApproveIssue",24 ermiteconnect.IssueServiceApproveIssueProcedure: "ApproveIssue",
24 ermiteconnect.IssueServiceRejectIssueProcedure: "RejectIssue",25 ermiteconnect.IssueServiceRejectIssueProcedure: "RejectIssue",
@@ -58,7 +59,7 @@ func TestIssueContract(t *testing.T) {
58 if ermite.Scope_SCOPE_ISSUE_WRITE != 11 {59 if ermite.Scope_SCOPE_ISSUE_WRITE != 11 {
59 t.Fatal("issue:write scope number changed")60 t.Fatal("issue:write scope number changed")
60 }61 }
61- for name, want := range map[string]int32{"ISSUE_STATE_UNSPECIFIED": 0, "ISSUE_STATE_OPEN": 1, "ISSUE_STATE_CLOSED": 2, "ISSUE_STATE_PENDING": 3} {62+ for name, want := range map[string]int32{"ISSUE_STATE_UNSPECIFIED": 0, "ISSUE_STATE_OPEN": 1, "ISSUE_STATE_CLOSED": 2, "ISSUE_STATE_PENDING": 3, "ISSUE_STATE_RESOLVED": 4} {
62 if got := ermite.IssueState_value[name]; got != want {63 if got := ermite.IssueState_value[name]; got != want {
63 t.Errorf("%s = %d, want %d", name, got, want)64 t.Errorf("%s = %d, want %d", name, got, want)
64 }65 }
M proto/ermite/event.proto +12 -2
@@ -21,7 +21,7 @@ service EventService {
2121 // for merge requests, merge_request_opened, merge_request_merged,
2222 // merge_request_closed, comment_added, comment_edited, comment_deleted and
2323 // comment_resolved (a thread resolved or reopened); for issues, issue_opened,
24- // issue_closed, issue_reopened and issue_commented, and issue_submitted. Each
24+ // issue_closed, issue_resolved, issue_reopened and issue_commented, and issue_submitted. Each
2525 // one is delivered on the "repo:<name>" topic of its repository and on
2626 // "home", subject to the visibility of the repository, except
2727 // issue_submitted: it is delivered only on the "owner" topic, never on
@@ -153,6 +153,8 @@ message Event {
153153 ReleaseDeleted release_deleted = 29;
154154 // ReleaseUnpublished reports a release turned into a draft after tag deletion.
155155 ReleaseUnpublished release_unpublished = 30;
156+ // IssueResolved: an issue was resolved.
157+ IssueResolved issue_resolved = 31;
156158 }
157159 }
158160
@@ -290,12 +292,20 @@ message IssueOpened {
290292 Issue issue = 1;
291293 }
292294
293-// IssueClosed reports a closed issue.
295+// IssueClosed reports a closed issue. A merge that resolves an issue sends
296+// issue_resolved, not issue_closed.
294297 message IssueClosed {
295298 // Issue is the issue after closing, including its repository and number.
296299 Issue issue = 1;
297300 }
298301
302+// IssueResolved reports a resolved issue.
303+message IssueResolved {
304+ // Issue is the issue after resolving, including its repository, number and
305+ // closed_by_merge_request.
306+ Issue issue = 1;
307+}
308+
299309 // IssueReopened reports a reopened issue.
300310 message IssueReopened {
301311 // Issue is the issue after reopening, including its repository and number.
@@ -21,7 +21,7 @@ service EventService {
21 // for merge requests, merge_request_opened, merge_request_merged,21 // for merge requests, merge_request_opened, merge_request_merged,
22 // merge_request_closed, comment_added, comment_edited, comment_deleted and22 // merge_request_closed, comment_added, comment_edited, comment_deleted and
23 // comment_resolved (a thread resolved or reopened); for issues, issue_opened,23 // comment_resolved (a thread resolved or reopened); for issues, issue_opened,
24- // issue_closed, issue_reopened and issue_commented, and issue_submitted. Each24+ // issue_closed, issue_resolved, issue_reopened and issue_commented, and issue_submitted. Each
25 // one is delivered on the "repo:<name>" topic of its repository and on25 // one is delivered on the "repo:<name>" topic of its repository and on
26 // "home", subject to the visibility of the repository, except26 // "home", subject to the visibility of the repository, except
27 // issue_submitted: it is delivered only on the "owner" topic, never on27 // issue_submitted: it is delivered only on the "owner" topic, never on
@@ -153,6 +153,8 @@ message Event {
153 ReleaseDeleted release_deleted = 29;153 ReleaseDeleted release_deleted = 29;
154 // ReleaseUnpublished reports a release turned into a draft after tag deletion.154 // ReleaseUnpublished reports a release turned into a draft after tag deletion.
155 ReleaseUnpublished release_unpublished = 30;155 ReleaseUnpublished release_unpublished = 30;
156+ // IssueResolved: an issue was resolved.
157+ IssueResolved issue_resolved = 31;
156 }158 }
157 }159 }
158 160
@@ -290,12 +292,20 @@ message IssueOpened {
290 Issue issue = 1;292 Issue issue = 1;
291 }293 }
292 294
293-// IssueClosed reports a closed issue.295+// IssueClosed reports a closed issue. A merge that resolves an issue sends
296+// issue_resolved, not issue_closed.
294 message IssueClosed {297 message IssueClosed {
295 // Issue is the issue after closing, including its repository and number.298 // Issue is the issue after closing, including its repository and number.
296 Issue issue = 1;299 Issue issue = 1;
297 }300 }
298 301
302+// IssueResolved reports a resolved issue.
303+message IssueResolved {
304+ // Issue is the issue after resolving, including its repository, number and
305+ // closed_by_merge_request.
306+ Issue issue = 1;
307+}
308+
299 // IssueReopened reports a reopened issue.309 // IssueReopened reports a reopened issue.
300 message IssueReopened {310 message IssueReopened {
301 // Issue is the issue after reopening, including its repository and number.311 // Issue is the issue after reopening, including its repository and number.
M proto/ermite/issue.proto +46 -15
@@ -14,10 +14,14 @@ enum IssueState {
1414 ISSUE_STATE_UNSPECIFIED = 0;
1515 // The issue is open.
1616 ISSUE_STATE_OPEN = 1;
17- // The issue is closed.
17+ // The issue is closed without being resolved (won't fix, duplicate, ...).
1818 ISSUE_STATE_CLOSED = 2;
1919 // Reserved for later use: awaiting moderation, owner-only.
2020 ISSUE_STATE_PENDING = 3;
21+ // The issue was fixed: by the merge of a merge request with a closing
22+ // reference, or by hand (ResolveIssue). CLOSED means closed without being
23+ // resolved.
24+ ISSUE_STATE_RESOLVED = 4;
2125 }
2226
2327 // Issue is a discussion in a repository.
@@ -45,9 +49,10 @@ message Issue {
4549 google.protobuf.Timestamp updated_at = 8;
4650 // CommentCount is the number of comments on the issue.
4751 int32 comment_count = 9;
48- // ClosedByMergeRequest is the number of the merge request whose merge closed
49- // the issue (a closing reference such as "Fixes #N"); 0 when the issue was
50- // closed by hand or is open. Reset when the issue is reopened.
52+ // ClosedByMergeRequest is the number of the merge request whose merge
53+ // resolved the issue (a closing reference such as "Fixes #N"); 0 when the
54+ // issue was resolved by hand, is closed, or is open. Reset when the issue is
55+ // reopened.
5156 int64 closed_by_merge_request = 10;
5257 }
5358
@@ -86,29 +91,35 @@ message IssueComment {
8691 //
8792 // Reading (ListIssues, GetIssue) needs the same access as reading the
8893 // repository: nothing for a public one, the repo:read scope for a private one.
89-// Writing (CreateIssue, AddIssueComment, CloseIssue, ReopenIssue) needs the
94+// Writing (CreateIssue, AddIssueComment, CloseIssue, ResolveIssue,
95+// ReopenIssue) needs the
9096 // owner or a token with the issue:write scope on the repository; branch
9197 // prefixes do not restrict it. A caller without credentials gets
9298 // unauthenticated, one with an insufficient scope gets permission_denied, and
9399 // one that cannot read the repository gets not_found.
94100 //
95101 // A closing reference ("Fixes #N", "Closes #N", "Resolves #N") in the title,
96-// description or commit messages of a merge request closes the issue when the
97-// request is merged, and only then; the issue.closed event and Issue carry
98-// closed_by_merge_request. Servers that report these links (GetIssueResponse.
99-// references, Issue.closed_by_merge_request) list "issues.links" in
100-// GetVersionResponse.features; older servers leave them empty.
102+// description or commit messages of a merge request resolves the issue when the
103+// request is merged, and only then: the issue gets the state RESOLVED, an
104+// issue.resolved event is sent, and Issue carries closed_by_merge_request.
105+// Servers that report these links (GetIssueResponse.references,
106+// Issue.closed_by_merge_request) list "issues.links" in
107+// GetVersionResponse.features; older servers leave them empty. Servers that
108+// also keep the history of issues (GetIssueResponse.events), implement
109+// ResolveIssue and the RESOLVED state list "issues.resolve".
101110 //
102111 // Text fields are normalized to NFC and stripped of control and Unicode
103112 // bidirectional characters (line breaks and tabs stay in bodies and comments).
104113 // The title is one line of 1 to 120 code points; body and comment text are at
105114 // most 10,000 code points and a comment must not be blank. A text that breaks
106115 // a rule is rejected with invalid_argument. A comment on an issue that already
107-// holds 1,000 comments gives resource_exhausted. Closing an issue that is not
108-// open, or reopening one that is not closed, gives failed_precondition.
116+// holds 1,000 comments gives resource_exhausted. Closing or resolving an issue
117+// that is not open, or reopening one that is neither closed nor resolved,
118+// gives failed_precondition.
109119 //
110-// The ordinary RPCs only return issues in state OPEN or CLOSED, and
111-// ListIssues with state ISSUE_STATE_PENDING is invalid_argument. Submissions
120+// The ordinary RPCs return issues in state OPEN, CLOSED or RESOLVED, and
121+// ListIssues accepts these three states; ISSUE_STATE_PENDING is
122+// invalid_argument. Submissions
112123 // from the public form wait as PendingIssue records, reachable only through
113124 // the three moderation RPCs (ListPendingIssues, ApproveIssue, RejectIssue).
114125 // These need owner rights (root, an owner session, or a token holding every
@@ -126,7 +137,10 @@ service IssueService {
126137 rpc AddIssueComment(AddIssueCommentRequest) returns (AddIssueCommentResponse);
127138 // CloseIssue closes an issue. Needs the issue:write scope.
128139 rpc CloseIssue(CloseIssueRequest) returns (CloseIssueResponse);
129- // ReopenIssue reopens an issue. Needs the issue:write scope.
140+ // ResolveIssue marks an open issue as resolved. Needs the issue:write scope.
141+ rpc ResolveIssue(ResolveIssueRequest) returns (ResolveIssueResponse);
142+ // ReopenIssue reopens a closed or resolved issue. Needs the issue:write
143+ // scope.
130144 rpc ReopenIssue(ReopenIssueRequest) returns (ReopenIssueResponse);
131145 // ListPendingIssues lists issues awaiting moderation, oldest first. Owner
132146 // rights only; anyone else gets NOT_FOUND.
@@ -196,6 +210,9 @@ message GetIssueResponse {
196210 // References are the merge requests naming the issue, ascending by number,
197211 // at most 100.
198212 repeated IssueReference references = 3;
213+ // Events are the history of the issue, oldest first, at most 500 (a server
214+ // limit). Clients interleave them with the comments by created_at.
215+ repeated IssueEvent events = 4;
199216 }
200217
201218 // AddIssueCommentRequest describes the comment to add.
@@ -228,6 +245,20 @@ message CloseIssueResponse {
228245 Issue issue = 1;
229246 }
230247
248+// ResolveIssueRequest names the issue to resolve.
249+message ResolveIssueRequest {
250+ // Repo is the repository name.
251+ string repo = 1;
252+ // Number is the issue number.
253+ int64 number = 2;
254+}
255+
256+// ResolveIssueResponse holds the issue after resolving.
257+message ResolveIssueResponse {
258+ // Issue is the resolved issue.
259+ Issue issue = 1;
260+}
261+
231262 // ReopenIssueRequest names the issue to reopen.
232263 message ReopenIssueRequest {
233264 // Repo is the repository name.
@@ -14,10 +14,14 @@ enum IssueState {
14 ISSUE_STATE_UNSPECIFIED = 0;14 ISSUE_STATE_UNSPECIFIED = 0;
15 // The issue is open.15 // The issue is open.
16 ISSUE_STATE_OPEN = 1;16 ISSUE_STATE_OPEN = 1;
17- // The issue is closed.17+ // The issue is closed without being resolved (won't fix, duplicate, ...).
18 ISSUE_STATE_CLOSED = 2;18 ISSUE_STATE_CLOSED = 2;
19 // Reserved for later use: awaiting moderation, owner-only.19 // Reserved for later use: awaiting moderation, owner-only.
20 ISSUE_STATE_PENDING = 3;20 ISSUE_STATE_PENDING = 3;
21+ // The issue was fixed: by the merge of a merge request with a closing
22+ // reference, or by hand (ResolveIssue). CLOSED means closed without being
23+ // resolved.
24+ ISSUE_STATE_RESOLVED = 4;
21 }25 }
22 26
23 // Issue is a discussion in a repository.27 // Issue is a discussion in a repository.
@@ -45,9 +49,10 @@ message Issue {
45 google.protobuf.Timestamp updated_at = 8;49 google.protobuf.Timestamp updated_at = 8;
46 // CommentCount is the number of comments on the issue.50 // CommentCount is the number of comments on the issue.
47 int32 comment_count = 9;51 int32 comment_count = 9;
48- // ClosedByMergeRequest is the number of the merge request whose merge closed52+ // ClosedByMergeRequest is the number of the merge request whose merge
49- // the issue (a closing reference such as "Fixes #N"); 0 when the issue was53+ // resolved the issue (a closing reference such as "Fixes #N"); 0 when the
50- // closed by hand or is open. Reset when the issue is reopened.54+ // issue was resolved by hand, is closed, or is open. Reset when the issue is
55+ // reopened.
51 int64 closed_by_merge_request = 10;56 int64 closed_by_merge_request = 10;
52 }57 }
53 58
@@ -86,29 +91,35 @@ message IssueComment {
86 //91 //
87 // Reading (ListIssues, GetIssue) needs the same access as reading the92 // Reading (ListIssues, GetIssue) needs the same access as reading the
88 // repository: nothing for a public one, the repo:read scope for a private one.93 // repository: nothing for a public one, the repo:read scope for a private one.
89-// Writing (CreateIssue, AddIssueComment, CloseIssue, ReopenIssue) needs the94+// Writing (CreateIssue, AddIssueComment, CloseIssue, ResolveIssue,
95+// ReopenIssue) needs the
90 // owner or a token with the issue:write scope on the repository; branch96 // owner or a token with the issue:write scope on the repository; branch
91 // prefixes do not restrict it. A caller without credentials gets97 // prefixes do not restrict it. A caller without credentials gets
92 // unauthenticated, one with an insufficient scope gets permission_denied, and98 // unauthenticated, one with an insufficient scope gets permission_denied, and
93 // one that cannot read the repository gets not_found.99 // one that cannot read the repository gets not_found.
94 //100 //
95 // A closing reference ("Fixes #N", "Closes #N", "Resolves #N") in the title,101 // A closing reference ("Fixes #N", "Closes #N", "Resolves #N") in the title,
96-// description or commit messages of a merge request closes the issue when the102+// description or commit messages of a merge request resolves the issue when the
97-// request is merged, and only then; the issue.closed event and Issue carry103+// request is merged, and only then: the issue gets the state RESOLVED, an
98-// closed_by_merge_request. Servers that report these links (GetIssueResponse.104+// issue.resolved event is sent, and Issue carries closed_by_merge_request.
99-// references, Issue.closed_by_merge_request) list "issues.links" in105+// Servers that report these links (GetIssueResponse.references,
100-// GetVersionResponse.features; older servers leave them empty.106+// Issue.closed_by_merge_request) list "issues.links" in
107+// GetVersionResponse.features; older servers leave them empty. Servers that
108+// also keep the history of issues (GetIssueResponse.events), implement
109+// ResolveIssue and the RESOLVED state list "issues.resolve".
101 //110 //
102 // Text fields are normalized to NFC and stripped of control and Unicode111 // Text fields are normalized to NFC and stripped of control and Unicode
103 // bidirectional characters (line breaks and tabs stay in bodies and comments).112 // bidirectional characters (line breaks and tabs stay in bodies and comments).
104 // The title is one line of 1 to 120 code points; body and comment text are at113 // The title is one line of 1 to 120 code points; body and comment text are at
105 // most 10,000 code points and a comment must not be blank. A text that breaks114 // most 10,000 code points and a comment must not be blank. A text that breaks
106 // a rule is rejected with invalid_argument. A comment on an issue that already115 // a rule is rejected with invalid_argument. A comment on an issue that already
107-// holds 1,000 comments gives resource_exhausted. Closing an issue that is not116+// holds 1,000 comments gives resource_exhausted. Closing or resolving an issue
108-// open, or reopening one that is not closed, gives failed_precondition.117+// that is not open, or reopening one that is neither closed nor resolved,
118+// gives failed_precondition.
109 //119 //
110-// The ordinary RPCs only return issues in state OPEN or CLOSED, and120+// The ordinary RPCs return issues in state OPEN, CLOSED or RESOLVED, and
111-// ListIssues with state ISSUE_STATE_PENDING is invalid_argument. Submissions121+// ListIssues accepts these three states; ISSUE_STATE_PENDING is
122+// invalid_argument. Submissions
112 // from the public form wait as PendingIssue records, reachable only through123 // from the public form wait as PendingIssue records, reachable only through
113 // the three moderation RPCs (ListPendingIssues, ApproveIssue, RejectIssue).124 // the three moderation RPCs (ListPendingIssues, ApproveIssue, RejectIssue).
114 // These need owner rights (root, an owner session, or a token holding every125 // These need owner rights (root, an owner session, or a token holding every
@@ -126,7 +137,10 @@ service IssueService {
126 rpc AddIssueComment(AddIssueCommentRequest) returns (AddIssueCommentResponse);137 rpc AddIssueComment(AddIssueCommentRequest) returns (AddIssueCommentResponse);
127 // CloseIssue closes an issue. Needs the issue:write scope.138 // CloseIssue closes an issue. Needs the issue:write scope.
128 rpc CloseIssue(CloseIssueRequest) returns (CloseIssueResponse);139 rpc CloseIssue(CloseIssueRequest) returns (CloseIssueResponse);
129- // ReopenIssue reopens an issue. Needs the issue:write scope.140+ // ResolveIssue marks an open issue as resolved. Needs the issue:write scope.
141+ rpc ResolveIssue(ResolveIssueRequest) returns (ResolveIssueResponse);
142+ // ReopenIssue reopens a closed or resolved issue. Needs the issue:write
143+ // scope.
130 rpc ReopenIssue(ReopenIssueRequest) returns (ReopenIssueResponse);144 rpc ReopenIssue(ReopenIssueRequest) returns (ReopenIssueResponse);
131 // ListPendingIssues lists issues awaiting moderation, oldest first. Owner145 // ListPendingIssues lists issues awaiting moderation, oldest first. Owner
132 // rights only; anyone else gets NOT_FOUND.146 // rights only; anyone else gets NOT_FOUND.
@@ -196,6 +210,9 @@ message GetIssueResponse {
196 // References are the merge requests naming the issue, ascending by number,210 // References are the merge requests naming the issue, ascending by number,
197 // at most 100.211 // at most 100.
198 repeated IssueReference references = 3;212 repeated IssueReference references = 3;
213+ // Events are the history of the issue, oldest first, at most 500 (a server
214+ // limit). Clients interleave them with the comments by created_at.
215+ repeated IssueEvent events = 4;
199 }216 }
200 217
201 // AddIssueCommentRequest describes the comment to add.218 // AddIssueCommentRequest describes the comment to add.
@@ -228,6 +245,20 @@ message CloseIssueResponse {
228 Issue issue = 1;245 Issue issue = 1;
229 }246 }
230 247
248+// ResolveIssueRequest names the issue to resolve.
249+message ResolveIssueRequest {
250+ // Repo is the repository name.
251+ string repo = 1;
252+ // Number is the issue number.
253+ int64 number = 2;
254+}
255+
256+// ResolveIssueResponse holds the issue after resolving.
257+message ResolveIssueResponse {
258+ // Issue is the resolved issue.
259+ Issue issue = 1;
260+}
261+
231 // ReopenIssueRequest names the issue to reopen.262 // ReopenIssueRequest names the issue to reopen.
232 message ReopenIssueRequest {263 message ReopenIssueRequest {
233 // Repo is the repository name.264 // Repo is the repository name.
M proto/ermite/merge_request.proto +76 -0
@@ -402,6 +402,75 @@ message ListMergeRequestsResponse {
402402 string next_page_token = 2;
403403 }
404404
405+// MergeRequestIssueState is where an issue named by a merge request is in its
406+// life. Values share their numbers with IssueState (3, awaiting moderation,
407+// is never shown here). It exists because issue.proto imports this file and
408+// cannot be imported back.
409+enum MergeRequestIssueState {
410+ // Not set. Never returned by the server.
411+ MERGE_REQUEST_ISSUE_STATE_UNSPECIFIED = 0;
412+ // The issue is open.
413+ MERGE_REQUEST_ISSUE_STATE_OPEN = 1;
414+ // The issue is closed without being resolved.
415+ MERGE_REQUEST_ISSUE_STATE_CLOSED = 2;
416+ // The issue was resolved, by a merge or by hand.
417+ MERGE_REQUEST_ISSUE_STATE_RESOLVED = 4;
418+}
419+
420+// MergeRequestIssue is an issue of the same repository that a merge request
421+// names ("#N").
422+message MergeRequestIssue {
423+ // Number is the number of the issue.
424+ int64 number = 1;
425+ // Title is the title of the issue.
426+ string title = 2;
427+ // State is where the issue is in its life.
428+ MergeRequestIssueState state = 3;
429+ // Closes says that a closing reference names the issue: merging the request
430+ // resolves it.
431+ bool closes = 4;
432+}
433+
434+// IssueEventKind is what happened in an IssueEvent.
435+enum IssueEventKind {
436+ // Not set. Never returned by the server.
437+ ISSUE_EVENT_KIND_UNSPECIFIED = 0;
438+ // A merge request started naming the issue; closes says whether with a
439+ // closing reference.
440+ ISSUE_EVENT_KIND_REFERENCED = 1;
441+ // The issue was closed without being resolved.
442+ ISSUE_EVENT_KIND_CLOSED = 2;
443+ // The issue was reopened.
444+ ISSUE_EVENT_KIND_REOPENED = 3;
445+ // The issue was resolved; merge_request is set when a merge resolved it.
446+ ISSUE_EVENT_KIND_RESOLVED = 4;
447+}
448+
449+// IssueEvent is one entry in the history of an issue. Events are append-only:
450+// a reference that later disappears does not remove its event.
451+message IssueEvent {
452+ // Id identifies the event. Opaque.
453+ string id = 1;
454+ // Kind is what happened.
455+ IssueEventKind kind = 2;
456+ // Issue is the number of the issue.
457+ int64 issue = 3;
458+ // MergeRequest is the number of the merge request involved; 0 if none.
459+ int64 merge_request = 4;
460+ // MergeRequestTitle is the title of that merge request at read time; empty
461+ // if none.
462+ string merge_request_title = 5;
463+ // Closes says that the reference was a closing one. Only set for
464+ // ISSUE_EVENT_KIND_REFERENCED.
465+ bool closes = 6;
466+ // Actor names who caused the event, like Issue.author: the label of the
467+ // token or session. For events triggered by a merge, the label of who
468+ // merged.
469+ string actor = 7;
470+ // CreatedAt is when the event happened.
471+ google.protobuf.Timestamp created_at = 8;
472+}
473+
405474 // GetMergeRequestRequest selects a merge request.
406475 message GetMergeRequestRequest {
407476 // Repo is the repository name.
@@ -452,6 +521,13 @@ message GetMergeRequestResponse {
452521 // Verdicts are the current verdicts, one per author who gave one, ordered
453522 // by the comment that carries them, oldest first.
454523 repeated AuthorVerdict verdicts = 10;
524+ // Issues are the issues of the same repository that the merge request names,
525+ // ascending by number, at most 100. Empty when issues are off.
526+ repeated MergeRequestIssue issues = 11;
527+ // IssueEvents are the history entries that involve this merge request: the
528+ // REFERENCED and RESOLVED events of the issues it names, oldest first, at
529+ // most 500.
530+ repeated IssueEvent issue_events = 12;
455531 }
456532
457533 // AddCommentRequest describes the comment to add.
@@ -402,6 +402,75 @@ message ListMergeRequestsResponse {
402 string next_page_token = 2;402 string next_page_token = 2;
403 }403 }
404 404
405+// MergeRequestIssueState is where an issue named by a merge request is in its
406+// life. Values share their numbers with IssueState (3, awaiting moderation,
407+// is never shown here). It exists because issue.proto imports this file and
408+// cannot be imported back.
409+enum MergeRequestIssueState {
410+ // Not set. Never returned by the server.
411+ MERGE_REQUEST_ISSUE_STATE_UNSPECIFIED = 0;
412+ // The issue is open.
413+ MERGE_REQUEST_ISSUE_STATE_OPEN = 1;
414+ // The issue is closed without being resolved.
415+ MERGE_REQUEST_ISSUE_STATE_CLOSED = 2;
416+ // The issue was resolved, by a merge or by hand.
417+ MERGE_REQUEST_ISSUE_STATE_RESOLVED = 4;
418+}
419+
420+// MergeRequestIssue is an issue of the same repository that a merge request
421+// names ("#N").
422+message MergeRequestIssue {
423+ // Number is the number of the issue.
424+ int64 number = 1;
425+ // Title is the title of the issue.
426+ string title = 2;
427+ // State is where the issue is in its life.
428+ MergeRequestIssueState state = 3;
429+ // Closes says that a closing reference names the issue: merging the request
430+ // resolves it.
431+ bool closes = 4;
432+}
433+
434+// IssueEventKind is what happened in an IssueEvent.
435+enum IssueEventKind {
436+ // Not set. Never returned by the server.
437+ ISSUE_EVENT_KIND_UNSPECIFIED = 0;
438+ // A merge request started naming the issue; closes says whether with a
439+ // closing reference.
440+ ISSUE_EVENT_KIND_REFERENCED = 1;
441+ // The issue was closed without being resolved.
442+ ISSUE_EVENT_KIND_CLOSED = 2;
443+ // The issue was reopened.
444+ ISSUE_EVENT_KIND_REOPENED = 3;
445+ // The issue was resolved; merge_request is set when a merge resolved it.
446+ ISSUE_EVENT_KIND_RESOLVED = 4;
447+}
448+
449+// IssueEvent is one entry in the history of an issue. Events are append-only:
450+// a reference that later disappears does not remove its event.
451+message IssueEvent {
452+ // Id identifies the event. Opaque.
453+ string id = 1;
454+ // Kind is what happened.
455+ IssueEventKind kind = 2;
456+ // Issue is the number of the issue.
457+ int64 issue = 3;
458+ // MergeRequest is the number of the merge request involved; 0 if none.
459+ int64 merge_request = 4;
460+ // MergeRequestTitle is the title of that merge request at read time; empty
461+ // if none.
462+ string merge_request_title = 5;
463+ // Closes says that the reference was a closing one. Only set for
464+ // ISSUE_EVENT_KIND_REFERENCED.
465+ bool closes = 6;
466+ // Actor names who caused the event, like Issue.author: the label of the
467+ // token or session. For events triggered by a merge, the label of who
468+ // merged.
469+ string actor = 7;
470+ // CreatedAt is when the event happened.
471+ google.protobuf.Timestamp created_at = 8;
472+}
473+
405 // GetMergeRequestRequest selects a merge request.474 // GetMergeRequestRequest selects a merge request.
406 message GetMergeRequestRequest {475 message GetMergeRequestRequest {
407 // Repo is the repository name.476 // Repo is the repository name.
@@ -452,6 +521,13 @@ message GetMergeRequestResponse {
452 // Verdicts are the current verdicts, one per author who gave one, ordered521 // Verdicts are the current verdicts, one per author who gave one, ordered
453 // by the comment that carries them, oldest first.522 // by the comment that carries them, oldest first.
454 repeated AuthorVerdict verdicts = 10;523 repeated AuthorVerdict verdicts = 10;
524+ // Issues are the issues of the same repository that the merge request names,
525+ // ascending by number, at most 100. Empty when issues are off.
526+ repeated MergeRequestIssue issues = 11;
527+ // IssueEvents are the history entries that involve this merge request: the
528+ // REFERENCED and RESOLVED events of the issues it names, oldest first, at
529+ // most 500.
530+ repeated IssueEvent issue_events = 12;
455 }531 }
456 532
457 // AddCommentRequest describes the comment to add.533 // AddCommentRequest describes the comment to add.

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