v0.4.0 72f8f2e

merge_request.connect.go RawHistoryFolder

1// SPDX-License-Identifier: MIT
2
3// Code generated by protoc-gen-connect-go. DO NOT EDIT.
4//
5// Source: ermite/merge_request.proto
6
7package ermiteconnect
8
9import (
10	ermite "bnema.dev/ermite-api/gen/ermite"
11	connect "connectrpc.com/connect"
12	context "context"
13	errors "errors"
14	http "net/http"
15	strings "strings"
16)
17
18// This is a compile-time assertion to ensure that this generated file and the connect package are
19// compatible. If you get a compiler error that this constant is not defined, this code was
20// generated with a version of connect newer than the one compiled into your binary. You can fix the
21// problem by either regenerating this code with an older version of connect or updating the connect
22// version compiled into your binary.
23const _ = connect.IsAtLeastVersion1_13_0
24
25const (
26	// MergeRequestServiceName is the fully-qualified name of the MergeRequestService service.
27	MergeRequestServiceName = "ermite.MergeRequestService"
28)
29
30// These constants are the fully-qualified names of the RPCs defined in this package. They're
31// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route.
32//
33// Note that these are different from the fully-qualified method names used by
34// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to
35// reflection-formatted method names, remove the leading slash and convert the remaining slash to a
36// period.
37const (
38	// MergeRequestServiceCreateMergeRequestProcedure is the fully-qualified name of the
39	// MergeRequestService's CreateMergeRequest RPC.
40	MergeRequestServiceCreateMergeRequestProcedure = "/ermite.MergeRequestService/CreateMergeRequest"
41	// MergeRequestServiceListMergeRequestsProcedure is the fully-qualified name of the
42	// MergeRequestService's ListMergeRequests RPC.
43	MergeRequestServiceListMergeRequestsProcedure = "/ermite.MergeRequestService/ListMergeRequests"
44	// MergeRequestServiceGetMergeRequestProcedure is the fully-qualified name of the
45	// MergeRequestService's GetMergeRequest RPC.
46	MergeRequestServiceGetMergeRequestProcedure = "/ermite.MergeRequestService/GetMergeRequest"
47	// MergeRequestServiceAddCommentProcedure is the fully-qualified name of the MergeRequestService's
48	// AddComment RPC.
49	MergeRequestServiceAddCommentProcedure = "/ermite.MergeRequestService/AddComment"
50	// MergeRequestServiceResolveCommentProcedure is the fully-qualified name of the
51	// MergeRequestService's ResolveComment RPC.
52	MergeRequestServiceResolveCommentProcedure = "/ermite.MergeRequestService/ResolveComment"
53	// MergeRequestServiceCloseMergeRequestProcedure is the fully-qualified name of the
54	// MergeRequestService's CloseMergeRequest RPC.
55	MergeRequestServiceCloseMergeRequestProcedure = "/ermite.MergeRequestService/CloseMergeRequest"
56	// MergeRequestServiceMergeMergeRequestProcedure is the fully-qualified name of the
57	// MergeRequestService's MergeMergeRequest RPC.
58	MergeRequestServiceMergeMergeRequestProcedure = "/ermite.MergeRequestService/MergeMergeRequest"
59	// MergeRequestServiceMarkReadProcedure is the fully-qualified name of the MergeRequestService's
60	// MarkRead RPC.
61	MergeRequestServiceMarkReadProcedure = "/ermite.MergeRequestService/MarkRead"
62)
63
64// MergeRequestServiceClient is a client for the ermite.MergeRequestService service.
65type MergeRequestServiceClient interface {
66	// CreateMergeRequest opens a merge request. Needs the mr:write scope. Fails
67	// with invalid_argument if a text rule is broken, if a branch does not exist
68	// or if source and target are the same branch, and with already_exists if an
69	// open merge request already has the same source and target.
70	CreateMergeRequest(context.Context, *connect.Request[ermite.CreateMergeRequestRequest]) (*connect.Response[ermite.CreateMergeRequestResponse], error)
71	// ListMergeRequests lists the merge requests of a repository, highest
72	// number (newest) first, optionally restricted to one state. The listed
73	// merge requests carry no diff or comments; head_id is set. Fails with
74	// not_found if the repository does not exist or is not readable.
75	ListMergeRequests(context.Context, *connect.Request[ermite.ListMergeRequestsRequest]) (*connect.Response[ermite.ListMergeRequestsResponse], error)
76	// GetMergeRequest returns one merge request with its commits, its diff and
77	// its comments. The diff compares the target with the head (what the merge
78	// would bring: "target...head"), or, with since_last_read, the head the
79	// caller last marked read with the current head. Fails with not_found if
80	// the repository or the number is unknown.
81	GetMergeRequest(context.Context, *connect.Request[ermite.GetMergeRequestRequest]) (*connect.Response[ermite.GetMergeRequestResponse], error)
82	// AddComment adds a general comment or a comment on a line of the diff.
83	// Needs the mr:write scope. Fails with invalid_argument if the text breaks
84	// a rule or if path, line and side do not designate a line of the current
85	// diff of the merge request, and with failed_precondition if the merge
86	// request is not open.
87	AddComment(context.Context, *connect.Request[ermite.AddCommentRequest]) (*connect.Response[ermite.AddCommentResponse], error)
88	// ResolveComment marks a comment resolved or unresolved. Needs the mr:write
89	// scope. Fails with not_found if the comment is unknown and with
90	// failed_precondition if the merge request is not open. Setting the state
91	// the comment already has succeeds and changes nothing.
92	ResolveComment(context.Context, *connect.Request[ermite.ResolveCommentRequest]) (*connect.Response[ermite.ResolveCommentResponse], error)
93	// CloseMergeRequest closes an open merge request without merging it. Needs
94	// the mr:write scope. Fails with failed_precondition if the merge request
95	// is not open. A closed merge request cannot be reopened: open a new one.
96	CloseMergeRequest(context.Context, *connect.Request[ermite.CloseMergeRequestRequest]) (*connect.Response[ermite.CloseMergeRequestResponse], error)
97	// MergeMergeRequest merges an open merge request. Needs the mr:merge scope.
98	// The caller passes the head it reviewed: the server merges only if the
99	// source branch still points to it, so a push between review and merge is
100	// never merged unseen. Fails with invalid_argument if head_id is empty or
101	// not a commit id, and with failed_precondition if the merge request is not
102	// open, if the source branch no longer points to head_id ("branch moved,
103	// read again"), if the target is not an ancestor of the head (rebase and
104	// push again), if the mode is not allowed by RepoSettings, or if a check
105	// fails and RepoSettings.failing_checks_block is set. Merges of one
106	// repository run one at a time. Repeating a call that succeeded fails with
107	// failed_precondition (not open). On success the server publishes
108	// MergeRequestMerged then Pushed for the target branch.
109	MergeMergeRequest(context.Context, *connect.Request[ermite.MergeMergeRequestRequest]) (*connect.Response[ermite.MergeMergeRequestResponse], error)
110	// MarkRead records the head the caller has reviewed, for the since_last_read
111	// option of GetMergeRequest. There is one read position per merge request,
112	// the reviewer's. Needs the mr:write scope. Marking a commit that does not
113	// exist in the repository is invalid_argument.
114	MarkRead(context.Context, *connect.Request[ermite.MarkReadRequest]) (*connect.Response[ermite.MarkReadResponse], error)
115}
116
117// NewMergeRequestServiceClient constructs a client for the ermite.MergeRequestService service. By
118// default, it uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses,
119// and sends uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the
120// connect.WithGRPC() or connect.WithGRPCWeb() options.
121//
122// The URL supplied here should be the base URL for the Connect or gRPC server (for example,
123// http://api.acme.com or https://acme.com/grpc).
124func NewMergeRequestServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) MergeRequestServiceClient {
125	baseURL = strings.TrimRight(baseURL, "/")
126	mergeRequestServiceMethods := ermite.File_ermite_merge_request_proto.Services().ByName("MergeRequestService").Methods()
127	return &mergeRequestServiceClient{
128		createMergeRequest: connect.NewClient[ermite.CreateMergeRequestRequest, ermite.CreateMergeRequestResponse](
129			httpClient,
130			baseURL+MergeRequestServiceCreateMergeRequestProcedure,
131			connect.WithSchema(mergeRequestServiceMethods.ByName("CreateMergeRequest")),
132			connect.WithClientOptions(opts...),
133		),
134		listMergeRequests: connect.NewClient[ermite.ListMergeRequestsRequest, ermite.ListMergeRequestsResponse](
135			httpClient,
136			baseURL+MergeRequestServiceListMergeRequestsProcedure,
137			connect.WithSchema(mergeRequestServiceMethods.ByName("ListMergeRequests")),
138			connect.WithClientOptions(opts...),
139		),
140		getMergeRequest: connect.NewClient[ermite.GetMergeRequestRequest, ermite.GetMergeRequestResponse](
141			httpClient,
142			baseURL+MergeRequestServiceGetMergeRequestProcedure,
143			connect.WithSchema(mergeRequestServiceMethods.ByName("GetMergeRequest")),
144			connect.WithClientOptions(opts...),
145		),
146		addComment: connect.NewClient[ermite.AddCommentRequest, ermite.AddCommentResponse](
147			httpClient,
148			baseURL+MergeRequestServiceAddCommentProcedure,
149			connect.WithSchema(mergeRequestServiceMethods.ByName("AddComment")),
150			connect.WithClientOptions(opts...),
151		),
152		resolveComment: connect.NewClient[ermite.ResolveCommentRequest, ermite.ResolveCommentResponse](
153			httpClient,
154			baseURL+MergeRequestServiceResolveCommentProcedure,
155			connect.WithSchema(mergeRequestServiceMethods.ByName("ResolveComment")),
156			connect.WithClientOptions(opts...),
157		),
158		closeMergeRequest: connect.NewClient[ermite.CloseMergeRequestRequest, ermite.CloseMergeRequestResponse](
159			httpClient,
160			baseURL+MergeRequestServiceCloseMergeRequestProcedure,
161			connect.WithSchema(mergeRequestServiceMethods.ByName("CloseMergeRequest")),
162			connect.WithClientOptions(opts...),
163		),
164		mergeMergeRequest: connect.NewClient[ermite.MergeMergeRequestRequest, ermite.MergeMergeRequestResponse](
165			httpClient,
166			baseURL+MergeRequestServiceMergeMergeRequestProcedure,
167			connect.WithSchema(mergeRequestServiceMethods.ByName("MergeMergeRequest")),
168			connect.WithClientOptions(opts...),
169		),
170		markRead: connect.NewClient[ermite.MarkReadRequest, ermite.MarkReadResponse](
171			httpClient,
172			baseURL+MergeRequestServiceMarkReadProcedure,
173			connect.WithSchema(mergeRequestServiceMethods.ByName("MarkRead")),
174			connect.WithClientOptions(opts...),
175		),
176	}
177}
178
179// mergeRequestServiceClient implements MergeRequestServiceClient.
180type mergeRequestServiceClient struct {
181	createMergeRequest *connect.Client[ermite.CreateMergeRequestRequest, ermite.CreateMergeRequestResponse]
182	listMergeRequests  *connect.Client[ermite.ListMergeRequestsRequest, ermite.ListMergeRequestsResponse]
183	getMergeRequest    *connect.Client[ermite.GetMergeRequestRequest, ermite.GetMergeRequestResponse]
184	addComment         *connect.Client[ermite.AddCommentRequest, ermite.AddCommentResponse]
185	resolveComment     *connect.Client[ermite.ResolveCommentRequest, ermite.ResolveCommentResponse]
186	closeMergeRequest  *connect.Client[ermite.CloseMergeRequestRequest, ermite.CloseMergeRequestResponse]
187	mergeMergeRequest  *connect.Client[ermite.MergeMergeRequestRequest, ermite.MergeMergeRequestResponse]
188	markRead           *connect.Client[ermite.MarkReadRequest, ermite.MarkReadResponse]
189}
190
191// CreateMergeRequest calls ermite.MergeRequestService.CreateMergeRequest.
192func (c *mergeRequestServiceClient) CreateMergeRequest(ctx context.Context, req *connect.Request[ermite.CreateMergeRequestRequest]) (*connect.Response[ermite.CreateMergeRequestResponse], error) {
193	return c.createMergeRequest.CallUnary(ctx, req)
194}
195
196// ListMergeRequests calls ermite.MergeRequestService.ListMergeRequests.
197func (c *mergeRequestServiceClient) ListMergeRequests(ctx context.Context, req *connect.Request[ermite.ListMergeRequestsRequest]) (*connect.Response[ermite.ListMergeRequestsResponse], error) {
198	return c.listMergeRequests.CallUnary(ctx, req)
199}
200
201// GetMergeRequest calls ermite.MergeRequestService.GetMergeRequest.
202func (c *mergeRequestServiceClient) GetMergeRequest(ctx context.Context, req *connect.Request[ermite.GetMergeRequestRequest]) (*connect.Response[ermite.GetMergeRequestResponse], error) {
203	return c.getMergeRequest.CallUnary(ctx, req)
204}
205
206// AddComment calls ermite.MergeRequestService.AddComment.
207func (c *mergeRequestServiceClient) AddComment(ctx context.Context, req *connect.Request[ermite.AddCommentRequest]) (*connect.Response[ermite.AddCommentResponse], error) {
208	return c.addComment.CallUnary(ctx, req)
209}
210
211// ResolveComment calls ermite.MergeRequestService.ResolveComment.
212func (c *mergeRequestServiceClient) ResolveComment(ctx context.Context, req *connect.Request[ermite.ResolveCommentRequest]) (*connect.Response[ermite.ResolveCommentResponse], error) {
213	return c.resolveComment.CallUnary(ctx, req)
214}
215
216// CloseMergeRequest calls ermite.MergeRequestService.CloseMergeRequest.
217func (c *mergeRequestServiceClient) CloseMergeRequest(ctx context.Context, req *connect.Request[ermite.CloseMergeRequestRequest]) (*connect.Response[ermite.CloseMergeRequestResponse], error) {
218	return c.closeMergeRequest.CallUnary(ctx, req)
219}
220
221// MergeMergeRequest calls ermite.MergeRequestService.MergeMergeRequest.
222func (c *mergeRequestServiceClient) MergeMergeRequest(ctx context.Context, req *connect.Request[ermite.MergeMergeRequestRequest]) (*connect.Response[ermite.MergeMergeRequestResponse], error) {
223	return c.mergeMergeRequest.CallUnary(ctx, req)
224}
225
226// MarkRead calls ermite.MergeRequestService.MarkRead.
227func (c *mergeRequestServiceClient) MarkRead(ctx context.Context, req *connect.Request[ermite.MarkReadRequest]) (*connect.Response[ermite.MarkReadResponse], error) {
228	return c.markRead.CallUnary(ctx, req)
229}
230
231// MergeRequestServiceHandler is an implementation of the ermite.MergeRequestService service.
232type MergeRequestServiceHandler interface {
233	// CreateMergeRequest opens a merge request. Needs the mr:write scope. Fails
234	// with invalid_argument if a text rule is broken, if a branch does not exist
235	// or if source and target are the same branch, and with already_exists if an
236	// open merge request already has the same source and target.
237	CreateMergeRequest(context.Context, *connect.Request[ermite.CreateMergeRequestRequest]) (*connect.Response[ermite.CreateMergeRequestResponse], error)
238	// ListMergeRequests lists the merge requests of a repository, highest
239	// number (newest) first, optionally restricted to one state. The listed
240	// merge requests carry no diff or comments; head_id is set. Fails with
241	// not_found if the repository does not exist or is not readable.
242	ListMergeRequests(context.Context, *connect.Request[ermite.ListMergeRequestsRequest]) (*connect.Response[ermite.ListMergeRequestsResponse], error)
243	// GetMergeRequest returns one merge request with its commits, its diff and
244	// its comments. The diff compares the target with the head (what the merge
245	// would bring: "target...head"), or, with since_last_read, the head the
246	// caller last marked read with the current head. Fails with not_found if
247	// the repository or the number is unknown.
248	GetMergeRequest(context.Context, *connect.Request[ermite.GetMergeRequestRequest]) (*connect.Response[ermite.GetMergeRequestResponse], error)
249	// AddComment adds a general comment or a comment on a line of the diff.
250	// Needs the mr:write scope. Fails with invalid_argument if the text breaks
251	// a rule or if path, line and side do not designate a line of the current
252	// diff of the merge request, and with failed_precondition if the merge
253	// request is not open.
254	AddComment(context.Context, *connect.Request[ermite.AddCommentRequest]) (*connect.Response[ermite.AddCommentResponse], error)
255	// ResolveComment marks a comment resolved or unresolved. Needs the mr:write
256	// scope. Fails with not_found if the comment is unknown and with
257	// failed_precondition if the merge request is not open. Setting the state
258	// the comment already has succeeds and changes nothing.
259	ResolveComment(context.Context, *connect.Request[ermite.ResolveCommentRequest]) (*connect.Response[ermite.ResolveCommentResponse], error)
260	// CloseMergeRequest closes an open merge request without merging it. Needs
261	// the mr:write scope. Fails with failed_precondition if the merge request
262	// is not open. A closed merge request cannot be reopened: open a new one.
263	CloseMergeRequest(context.Context, *connect.Request[ermite.CloseMergeRequestRequest]) (*connect.Response[ermite.CloseMergeRequestResponse], error)
264	// MergeMergeRequest merges an open merge request. Needs the mr:merge scope.
265	// The caller passes the head it reviewed: the server merges only if the
266	// source branch still points to it, so a push between review and merge is
267	// never merged unseen. Fails with invalid_argument if head_id is empty or
268	// not a commit id, and with failed_precondition if the merge request is not
269	// open, if the source branch no longer points to head_id ("branch moved,
270	// read again"), if the target is not an ancestor of the head (rebase and
271	// push again), if the mode is not allowed by RepoSettings, or if a check
272	// fails and RepoSettings.failing_checks_block is set. Merges of one
273	// repository run one at a time. Repeating a call that succeeded fails with
274	// failed_precondition (not open). On success the server publishes
275	// MergeRequestMerged then Pushed for the target branch.
276	MergeMergeRequest(context.Context, *connect.Request[ermite.MergeMergeRequestRequest]) (*connect.Response[ermite.MergeMergeRequestResponse], error)
277	// MarkRead records the head the caller has reviewed, for the since_last_read
278	// option of GetMergeRequest. There is one read position per merge request,
279	// the reviewer's. Needs the mr:write scope. Marking a commit that does not
280	// exist in the repository is invalid_argument.
281	MarkRead(context.Context, *connect.Request[ermite.MarkReadRequest]) (*connect.Response[ermite.MarkReadResponse], error)
282}
283
284// NewMergeRequestServiceHandler builds an HTTP handler from the service implementation. It returns
285// the path on which to mount the handler and the handler itself.
286//
287// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf
288// and JSON codecs. They also support gzip compression.
289func NewMergeRequestServiceHandler(svc MergeRequestServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) {
290	mergeRequestServiceMethods := ermite.File_ermite_merge_request_proto.Services().ByName("MergeRequestService").Methods()
291	mergeRequestServiceCreateMergeRequestHandler := connect.NewUnaryHandler(
292		MergeRequestServiceCreateMergeRequestProcedure,
293		svc.CreateMergeRequest,
294		connect.WithSchema(mergeRequestServiceMethods.ByName("CreateMergeRequest")),
295		connect.WithHandlerOptions(opts...),
296	)
297	mergeRequestServiceListMergeRequestsHandler := connect.NewUnaryHandler(
298		MergeRequestServiceListMergeRequestsProcedure,
299		svc.ListMergeRequests,
300		connect.WithSchema(mergeRequestServiceMethods.ByName("ListMergeRequests")),
301		connect.WithHandlerOptions(opts...),
302	)
303	mergeRequestServiceGetMergeRequestHandler := connect.NewUnaryHandler(
304		MergeRequestServiceGetMergeRequestProcedure,
305		svc.GetMergeRequest,
306		connect.WithSchema(mergeRequestServiceMethods.ByName("GetMergeRequest")),
307		connect.WithHandlerOptions(opts...),
308	)
309	mergeRequestServiceAddCommentHandler := connect.NewUnaryHandler(
310		MergeRequestServiceAddCommentProcedure,
311		svc.AddComment,
312		connect.WithSchema(mergeRequestServiceMethods.ByName("AddComment")),
313		connect.WithHandlerOptions(opts...),
314	)
315	mergeRequestServiceResolveCommentHandler := connect.NewUnaryHandler(
316		MergeRequestServiceResolveCommentProcedure,
317		svc.ResolveComment,
318		connect.WithSchema(mergeRequestServiceMethods.ByName("ResolveComment")),
319		connect.WithHandlerOptions(opts...),
320	)
321	mergeRequestServiceCloseMergeRequestHandler := connect.NewUnaryHandler(
322		MergeRequestServiceCloseMergeRequestProcedure,
323		svc.CloseMergeRequest,
324		connect.WithSchema(mergeRequestServiceMethods.ByName("CloseMergeRequest")),
325		connect.WithHandlerOptions(opts...),
326	)
327	mergeRequestServiceMergeMergeRequestHandler := connect.NewUnaryHandler(
328		MergeRequestServiceMergeMergeRequestProcedure,
329		svc.MergeMergeRequest,
330		connect.WithSchema(mergeRequestServiceMethods.ByName("MergeMergeRequest")),
331		connect.WithHandlerOptions(opts...),
332	)
333	mergeRequestServiceMarkReadHandler := connect.NewUnaryHandler(
334		MergeRequestServiceMarkReadProcedure,
335		svc.MarkRead,
336		connect.WithSchema(mergeRequestServiceMethods.ByName("MarkRead")),
337		connect.WithHandlerOptions(opts...),
338	)
339	return "/ermite.MergeRequestService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
340		switch r.URL.Path {
341		case MergeRequestServiceCreateMergeRequestProcedure:
342			mergeRequestServiceCreateMergeRequestHandler.ServeHTTP(w, r)
343		case MergeRequestServiceListMergeRequestsProcedure:
344			mergeRequestServiceListMergeRequestsHandler.ServeHTTP(w, r)
345		case MergeRequestServiceGetMergeRequestProcedure:
346			mergeRequestServiceGetMergeRequestHandler.ServeHTTP(w, r)
347		case MergeRequestServiceAddCommentProcedure:
348			mergeRequestServiceAddCommentHandler.ServeHTTP(w, r)
349		case MergeRequestServiceResolveCommentProcedure:
350			mergeRequestServiceResolveCommentHandler.ServeHTTP(w, r)
351		case MergeRequestServiceCloseMergeRequestProcedure:
352			mergeRequestServiceCloseMergeRequestHandler.ServeHTTP(w, r)
353		case MergeRequestServiceMergeMergeRequestProcedure:
354			mergeRequestServiceMergeMergeRequestHandler.ServeHTTP(w, r)
355		case MergeRequestServiceMarkReadProcedure:
356			mergeRequestServiceMarkReadHandler.ServeHTTP(w, r)
357		default:
358			http.NotFound(w, r)
359		}
360	})
361}
362
363// UnimplementedMergeRequestServiceHandler returns CodeUnimplemented from all methods.
364type UnimplementedMergeRequestServiceHandler struct{}
365
366func (UnimplementedMergeRequestServiceHandler) CreateMergeRequest(context.Context, *connect.Request[ermite.CreateMergeRequestRequest]) (*connect.Response[ermite.CreateMergeRequestResponse], error) {
367	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.MergeRequestService.CreateMergeRequest is not implemented"))
368}
369
370func (UnimplementedMergeRequestServiceHandler) ListMergeRequests(context.Context, *connect.Request[ermite.ListMergeRequestsRequest]) (*connect.Response[ermite.ListMergeRequestsResponse], error) {
371	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.MergeRequestService.ListMergeRequests is not implemented"))
372}
373
374func (UnimplementedMergeRequestServiceHandler) GetMergeRequest(context.Context, *connect.Request[ermite.GetMergeRequestRequest]) (*connect.Response[ermite.GetMergeRequestResponse], error) {
375	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.MergeRequestService.GetMergeRequest is not implemented"))
376}
377
378func (UnimplementedMergeRequestServiceHandler) AddComment(context.Context, *connect.Request[ermite.AddCommentRequest]) (*connect.Response[ermite.AddCommentResponse], error) {
379	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.MergeRequestService.AddComment is not implemented"))
380}
381
382func (UnimplementedMergeRequestServiceHandler) ResolveComment(context.Context, *connect.Request[ermite.ResolveCommentRequest]) (*connect.Response[ermite.ResolveCommentResponse], error) {
383	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.MergeRequestService.ResolveComment is not implemented"))
384}
385
386func (UnimplementedMergeRequestServiceHandler) CloseMergeRequest(context.Context, *connect.Request[ermite.CloseMergeRequestRequest]) (*connect.Response[ermite.CloseMergeRequestResponse], error) {
387	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.MergeRequestService.CloseMergeRequest is not implemented"))
388}
389
390func (UnimplementedMergeRequestServiceHandler) MergeMergeRequest(context.Context, *connect.Request[ermite.MergeMergeRequestRequest]) (*connect.Response[ermite.MergeMergeRequestResponse], error) {
391	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.MergeRequestService.MergeMergeRequest is not implemented"))
392}
393
394func (UnimplementedMergeRequestServiceHandler) MarkRead(context.Context, *connect.Request[ermite.MarkReadRequest]) (*connect.Response[ermite.MarkReadResponse], error) {
395	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.MergeRequestService.MarkRead is not implemented"))
396}

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