diff --git a/changelogs/unreleased/zj-pagination-lines-sender.yml b/changelogs/unreleased/zj-pagination-lines-sender.yml new file mode 100644 index 0000000000000000000000000000000000000000..0fc2b7c0be0c84827521573a2cd94f722ca63f04 --- /dev/null +++ b/changelogs/unreleased/zj-pagination-lines-sender.yml @@ -0,0 +1,5 @@ +--- +title: Allow pagination for FindAllLocalBranches +merge_request: 2251 +author: +type: added diff --git a/internal/helper/lines/send.go b/internal/helper/lines/send.go index 4414344d0dedc54295ce58e3dd709d48a71ccb54..65fd2c019909cb4db65299118a8d7e88ffd0cd2c 100644 --- a/internal/helper/lines/send.go +++ b/internal/helper/lines/send.go @@ -6,6 +6,24 @@ import ( "io" ) +// SenderOpts contains fields that Send() uses to determine what is considered +// a line, and how to handle pagination. That is, how many lines to skip, before +// a line gets fed into the Sender. +type SenderOpts struct { + // Delimiter is the separator used to split the sender's output into + // lines. Defaults to "\n". + Delimiter []byte + // Limit is the upper limit of how many lines will be sent. The zero + // value will cause no lines to be sent. + Limit int + // IsPageToken allows control over which results are sent as part of the + // response. When IsPageToken evaluates to true for the first time, + // results will start to be sent as part of the response. This function + // will be called with an empty slice previous to sending the first line + // in order to allow sending everything right from the beginning. + IsPageToken func([]byte) bool +} + // ItemsPerMessage establishes the threshold to flush the buffer when using the // `Send` function. It's a variable instead of a constant to make it possible to // override in tests. @@ -15,9 +33,9 @@ var ItemsPerMessage = 20 type Sender func([][]byte) error type writer struct { - sender Sender - lines [][]byte - delim []byte + sender Sender + lines [][]byte + options SenderOpts } // CopyAndAppend adds a newly allocated copy of `e` to the `s` slice. Useful to @@ -62,33 +80,45 @@ func (w *writer) addLine(p []byte) error { func (w *writer) consume(r io.Reader) error { buf := bufio.NewReader(r) - for finished := false; !finished; { + // As `IsPageToken` will instruct us to send the _next_ line only, we + // need to call it before the first iteration to allow for the case + // where we want to send right from the beginning. + pastPageToken := w.options.IsPageToken([]byte{}) + for i := 0; i < w.options.Limit; { var line []byte for { // delim can be multiple bytes, so we read till the end byte of it ... - chunk, err := buf.ReadBytes(w.delim[len(w.delim)-1]) + chunk, err := buf.ReadBytes(w.delimiter()[len(w.delimiter())-1]) if err != nil && err != io.EOF { return err } line = append(line, chunk...) // ... then we check if the last bytes of line are the same as delim - if bytes.HasSuffix(line, w.delim) { + if bytes.HasSuffix(line, w.delimiter()) { break } if err == io.EOF { - finished = true + i = w.options.Limit // Implicit exit clause for the loop break } } - line = bytes.TrimRight(line, string(w.delim)) + line = bytes.TrimSuffix(line, w.delimiter()) if len(line) == 0 { break } + // If a page token is given, we need to skip all lines until we've found it. + // All remaining lines will then be sent until we reach the pagination limit. + if !pastPageToken { + pastPageToken = w.options.IsPageToken(line) + continue + } + i++ // Only increment the counter if the result wasn't skipped + if err := w.addLine(line); err != nil { return err } @@ -97,12 +127,19 @@ func (w *writer) consume(r io.Reader) error { return w.flush() } -// Send reads output from `r`, splits it at `delim`, then handles the buffered lines using `sender`. -func Send(r io.Reader, sender Sender, delim []byte) error { - if len(delim) == 0 { - delim = []byte{'\n'} +func (w *writer) delimiter() []byte { return w.options.Delimiter } + +// Send reads output from `r`, splits it at `opts.Delimiter`, then handles the +// buffered lines using `sender`. +func Send(r io.Reader, sender Sender, opts SenderOpts) error { + if len(opts.Delimiter) == 0 { + opts.Delimiter = []byte{'\n'} + } + + if opts.IsPageToken == nil { + opts.IsPageToken = func(_ []byte) bool { return true } } - writer := &writer{sender: sender, delim: delim} + writer := &writer{sender: sender, options: opts} return writer.consume(r) } diff --git a/internal/helper/lines/send_test.go b/internal/helper/lines/send_test.go new file mode 100644 index 0000000000000000000000000000000000000000..523d822ac2b3a2c43570a9770b0e74231fc9bf2f --- /dev/null +++ b/internal/helper/lines/send_test.go @@ -0,0 +1,66 @@ +package lines + +import ( + "bytes" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestLinesSend(t *testing.T) { + expected := [][]byte{ + []byte("mepmep"), + []byte("foo"), + []byte("bar"), + } + + tcs := []struct { + desc string + limit int + isPageToken func([]byte) bool + output [][]byte + }{ + { + desc: "high limit", + limit: 100, + output: expected, + }, + { + desc: "limit is 0", + limit: 0, + output: [][]byte(nil), + }, + { + desc: "limit 2", + limit: 2, + output: expected[0:2], + }, + { + desc: "skip lines", + limit: 100, + isPageToken: func(line []byte) bool { return bytes.HasPrefix(line, expected[0]) }, + output: expected[1:3], + }, + { + desc: "skip no lines", + limit: 100, + isPageToken: func(_ []byte) bool { return true }, + output: expected, + }, + } + + for _, tc := range tcs { + t.Run(tc.desc, func(t *testing.T) { + reader := bytes.NewBufferString("mepmep\nfoo\nbar") + var out [][]byte + sender := func(in [][]byte) error { out = in; return nil } + + err := Send(reader, sender, SenderOpts{ + Limit: tc.limit, + IsPageToken: tc.isPageToken, + }) + require.NoError(t, err) + require.Equal(t, tc.output, out) + }) + } +} diff --git a/internal/service/ref/refs.go b/internal/service/ref/refs.go index c4a8e831f5cce2cc5e2eb42a548d2b9798cf2dc2..f15f16796142197749c4ec52903cb218eb9b5216 100644 --- a/internal/service/ref/refs.go +++ b/internal/service/ref/refs.go @@ -6,6 +6,7 @@ import ( "context" "errors" "fmt" + "math" "strings" "github.com/golang/protobuf/proto" @@ -34,6 +35,7 @@ var ( type findRefsOpts struct { cmdArgs []git.Option delim []byte + lines.SenderOpts } func findRefs(ctx context.Context, writer lines.Sender, repo *gitalypb.Repository, patterns []string, opts *findRefsOpts) error { @@ -54,7 +56,11 @@ func findRefs(ctx context.Context, writer lines.Sender, repo *gitalypb.Repositor return err } - if err := lines.Send(cmd, writer, opts.delim); err != nil { + if err := lines.Send(cmd, writer, lines.SenderOpts{ + IsPageToken: opts.IsPageToken, + Delimiter: opts.delim, + Limit: int(opts.Limit), + }); err != nil { return err } @@ -299,12 +305,11 @@ func findLocalBranches(in *gitalypb.FindLocalBranchesRequest, stream gitalypb.Re } writer := newFindLocalBranchesWriter(stream, c) - opts := &findRefsOpts{ - cmdArgs: []git.Option{ - // %00 inserts the null character into the output (see for-each-ref docs) - git.Flag{"--format=" + strings.Join(localBranchFormatFields, "%00")}, - git.Flag{"--sort=" + parseSortKey(in.GetSortBy())}, - }, + opts := paginationParamsToOpts(in.GetPaginationParams()) + opts.cmdArgs = []git.Option{ + // %00 inserts the null character into the output (see for-each-ref docs) + git.Flag{"--format=" + strings.Join(localBranchFormatFields, "%00")}, + git.Flag{"--sort=" + parseSortKey(in.GetSortBy())}, } return findRefs(ctx, writer, in.Repository, []string{"refs/heads"}, opts) @@ -349,9 +354,9 @@ func findAllBranches(in *gitalypb.FindAllBranchesRequest, stream gitalypb.RefSer return err } - opts := &findRefsOpts{ - cmdArgs: args, - } + opts := paginationParamsToOpts(nil) + opts.cmdArgs = args + writer := newFindAllBranchesWriter(stream, c) return findRefs(ctx, writer, in.Repository, patterns, opts) @@ -456,3 +461,23 @@ func validateFindTagRequest(in *gitalypb.FindTagRequest) error { } return nil } + +func paginationParamsToOpts(p *gitalypb.PaginationParameter) *findRefsOpts { + opts := &findRefsOpts{} + opts.IsPageToken = func(_ []byte) bool { return true } + opts.Limit = math.MaxInt32 + + if p == nil { + return opts + } + + if p.GetLimit() >= 0 { + opts.Limit = int(p.GetLimit()) + } + + if p.GetPageToken() != "" { + opts.IsPageToken = func(l []byte) bool { return bytes.Compare(l, []byte(p.GetPageToken())) >= 0 } + } + + return opts +} diff --git a/internal/service/ref/refs_test.go b/internal/service/ref/refs_test.go index a026fbd410a02003922f7e8f3fc73f6352e1a8b2..c3dff3f37b3f33a187cc08e7ae301612848e11e4 100644 --- a/internal/service/ref/refs_test.go +++ b/internal/service/ref/refs_test.go @@ -932,6 +932,69 @@ func TestSuccessfulFindLocalBranches(t *testing.T) { } } +func TestFindLocalBranchesPagination(t *testing.T) { + stop, serverSocketPath := runRefServiceServer(t) + defer stop() + + client, conn := newRefServiceClient(t, serverSocketPath) + defer conn.Close() + + testRepo, _, cleanupFn := testhelper.NewTestRepo(t) + defer cleanupFn() + + ctx, cancel := testhelper.Context() + defer cancel() + + limit := 1 + rpcRequest := &gitalypb.FindLocalBranchesRequest{ + Repository: testRepo, + PaginationParams: &gitalypb.PaginationParameter{ + Limit: int32(limit), + PageToken: "refs/heads/gitaly/squash-test", + }, + } + c, err := client.FindLocalBranches(ctx, rpcRequest) + if err != nil { + t.Fatal(err) + } + + var branches []*gitalypb.FindLocalBranchResponse + for { + r, err := c.Recv() + if err == io.EOF { + break + } + require.NoError(t, err) + if err != nil { + t.Fatal(err) + } + branches = append(branches, r.GetBranches()...) + } + + require.Len(t, branches, limit) + + expectedBranch := "refs/heads/improve/awesome" + target := localBranches[expectedBranch] + + branch := &gitalypb.FindLocalBranchResponse{ + Name: []byte(expectedBranch), + CommitId: target.Id, + CommitSubject: target.Subject, + CommitAuthor: &gitalypb.FindLocalBranchCommitAuthor{ + Name: target.Author.Name, + Email: target.Author.Email, + Date: target.Author.Date, + }, + CommitCommitter: &gitalypb.FindLocalBranchCommitAuthor{ + Name: target.Committer.Name, + Email: target.Committer.Email, + Date: target.Committer.Date, + }, + Commit: target, + } + assertContainsLocalBranch(t, branches, branch) +} + // Test that `s` contains the elements in `relativeOrder` in that order // (relative to each other) func isOrderedSubset(subset, set []string) bool { diff --git a/internal/service/ref/remote_branches.go b/internal/service/ref/remote_branches.go index a9712cc7c7d40443facd60a23ee06b2551aeceb3..f82e9b3f8695b0682d3af46ea343742db1c9ed21 100644 --- a/internal/service/ref/remote_branches.go +++ b/internal/service/ref/remote_branches.go @@ -35,9 +35,8 @@ func findAllRemoteBranches(req *gitalypb.FindAllRemoteBranchesRequest, stream gi return err } - opts := &findRefsOpts{ - cmdArgs: args, - } + opts := paginationParamsToOpts(nil) + opts.cmdArgs = args writer := newFindAllRemoteBranchesWriter(stream, c) return findRefs(ctx, writer, req.GetRepository(), patterns, opts) diff --git a/internal/service/ref/testhelper_test.go b/internal/service/ref/testhelper_test.go index cc84e57f83fcf608635c5a7940a291448d7a119e..f40730edef0ad4da8253f93bd1febc7263079491 100644 --- a/internal/service/ref/testhelper_test.go +++ b/internal/service/ref/testhelper_test.go @@ -116,6 +116,8 @@ func newRefServiceClient(t *testing.T, serverSocketPath string) (gitalypb.RefSer } func assertContainsLocalBranch(t *testing.T, branches []*gitalypb.FindLocalBranchResponse, branch *gitalypb.FindLocalBranchResponse) { + t.Helper() + for _, b := range branches { if bytes.Equal(branch.Name, b.Name) { if !testhelper.FindLocalBranchResponsesEqual(branch, b) { @@ -129,6 +131,8 @@ func assertContainsLocalBranch(t *testing.T, branches []*gitalypb.FindLocalBranc } func assertContainsBranch(t *testing.T, branches []*gitalypb.FindAllBranchesResponse_Branch, branch *gitalypb.FindAllBranchesResponse_Branch) { + t.Helper() + var branchNames [][]byte for _, b := range branches { diff --git a/internal/service/repository/search_files.go b/internal/service/repository/search_files.go index fac6ecbe0e845d59c14e7659ae8f758c3ad51885..5a19550d3ae2545b4a096ad1263fb2e09ab4a2fd 100644 --- a/internal/service/repository/search_files.go +++ b/internal/service/repository/search_files.go @@ -5,6 +5,7 @@ import ( "bytes" "errors" "io" + "math" "gitlab.com/gitlab-org/gitaly/internal/command" "gitlab.com/gitlab-org/gitaly/internal/git" @@ -123,7 +124,7 @@ func (s *server) SearchFilesByName(req *gitalypb.SearchFilesByNameRequest, strea return stream.Send(&gitalypb.SearchFilesByNameResponse{Files: objs}) } - return lines.Send(cmd, lr, []byte{'\n'}) + return lines.Send(cmd, lr, lines.SenderOpts{Delimiter: []byte{'\n'}, Limit: math.MaxInt32}) } type searchFilesRequest interface { diff --git a/proto/go/gitalypb/ref.pb.go b/proto/go/gitalypb/ref.pb.go index dbcfe68f606582cf82da4e61c267ddd1a29df2c6..940c3d9a97d42aec650efb004ff4af0e6c12ee13 100644 --- a/proto/go/gitalypb/ref.pb.go +++ b/proto/go/gitalypb/ref.pb.go @@ -512,11 +512,16 @@ func (m *FindRefNameResponse) GetName() []byte { } type FindLocalBranchesRequest struct { - Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"` - SortBy FindLocalBranchesRequest_SortBy `protobuf:"varint,2,opt,name=sort_by,json=sortBy,proto3,enum=gitaly.FindLocalBranchesRequest_SortBy" json:"sort_by,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"` + SortBy FindLocalBranchesRequest_SortBy `protobuf:"varint,2,opt,name=sort_by,json=sortBy,proto3,enum=gitaly.FindLocalBranchesRequest_SortBy" json:"sort_by,omitempty"` + // The page token is the branch name, with the `refs/heads/` prefix, for + // example "refs/heads/master". After the first branch name is encountered + // which lexicographically exceeds the page token, it will be the first result + // send as part of the response. + PaginationParams *PaginationParameter `protobuf:"bytes,3,opt,name=pagination_params,json=paginationParams,proto3" json:"pagination_params,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *FindLocalBranchesRequest) Reset() { *m = FindLocalBranchesRequest{} } @@ -558,6 +563,13 @@ func (m *FindLocalBranchesRequest) GetSortBy() FindLocalBranchesRequest_SortBy { return FindLocalBranchesRequest_NAME } +func (m *FindLocalBranchesRequest) GetPaginationParams() *PaginationParameter { + if m != nil { + return m.PaginationParams + } + return nil +} + type FindLocalBranchesResponse struct { Branches []*FindLocalBranchResponse `protobuf:"bytes,1,rep,name=branches,proto3" json:"branches,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -2089,114 +2101,116 @@ func init() { func init() { proto.RegisterFile("ref.proto", fileDescriptor_65d958559ea81b29) } var fileDescriptor_65d958559ea81b29 = []byte{ - // 1702 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0x5f, 0x6f, 0x1b, 0x4b, - 0x15, 0xbf, 0xeb, 0x24, 0x8e, 0x7d, 0xec, 0x3a, 0x9b, 0xc9, 0x3f, 0x67, 0xd3, 0x36, 0xe9, 0xdc, - 0xdb, 0x36, 0xa1, 0xc5, 0x29, 0xa9, 0x40, 0x48, 0x20, 0x81, 0x93, 0x98, 0x36, 0xb4, 0x75, 0xa2, - 0xb1, 0x4b, 0x5b, 0x84, 0x58, 0xad, 0xed, 0xf1, 0x66, 0x61, 0xbd, 0x6b, 0x76, 0x27, 0x6d, 0x03, - 0x6f, 0x94, 0x47, 0x24, 0x24, 0x10, 0x82, 0x07, 0x9e, 0x78, 0xe0, 0x23, 0xf0, 0x11, 0x78, 0x41, - 0x7c, 0x21, 0x9e, 0xd0, 0xce, 0xcc, 0xfe, 0xb3, 0xd7, 0x4e, 0xa4, 0xb8, 0xe2, 0x3e, 0x79, 0xe7, - 0xcc, 0x39, 0xbf, 0x73, 0xe6, 0xcc, 0x99, 0xf3, 0xc7, 0x50, 0xf4, 0x68, 0xbf, 0x36, 0xf4, 0x5c, - 0xe6, 0xa2, 0xbc, 0x69, 0x31, 0xc3, 0xbe, 0xd4, 0xc0, 0xb6, 0x1c, 0x26, 0x68, 0x5a, 0xd9, 0x3f, - 0x37, 0x3c, 0xda, 0x93, 0x2b, 0xe8, 0xd8, 0x6e, 0x47, 0x7e, 0x6f, 0x9b, 0xae, 0x6b, 0xda, 0x74, - 0x9f, 0xaf, 0x3a, 0x17, 0xfd, 0x7d, 0x66, 0x0d, 0xa8, 0xcf, 0x8c, 0xc1, 0x50, 0x30, 0xe0, 0xdf, - 0x2a, 0xb0, 0xf2, 0xd2, 0xf2, 0x59, 0x93, 0x7e, 0x38, 0xb4, 0xdd, 0x8e, 0x4f, 0xe8, 0xaf, 0x2e, - 0xa8, 0xcf, 0xd0, 0x77, 0x01, 0x3c, 0x3a, 0x74, 0x7d, 0x8b, 0xb9, 0xde, 0x65, 0x55, 0xd9, 0x51, - 0x76, 0x4b, 0x07, 0xa8, 0x26, 0x74, 0xd7, 0x48, 0xb4, 0x73, 0x38, 0xff, 0xd7, 0x7f, 0x3d, 0x56, - 0x48, 0x82, 0x17, 0x6d, 0x41, 0xb1, 0xeb, 0x0e, 0x06, 0x16, 0xd3, 0xad, 0x5e, 0x35, 0xb7, 0xa3, - 0xec, 0x16, 0x49, 0x41, 0x10, 0x4e, 0x7a, 0x68, 0x15, 0x16, 0x6c, 0x6b, 0x60, 0xb1, 0xea, 0xdc, - 0x8e, 0xb2, 0x7b, 0x8b, 0x88, 0x05, 0x7e, 0x03, 0xab, 0x69, 0x1b, 0xfc, 0xa1, 0xeb, 0xf8, 0x14, - 0xfd, 0x00, 0x54, 0x87, 0x7e, 0xd0, 0x83, 0xf3, 0xe8, 0x6e, 0xe7, 0x17, 0xb4, 0xcb, 0xfc, 0xaa, - 0xb2, 0x33, 0xb7, 0x5b, 0x3a, 0x58, 0x0b, 0x4d, 0x91, 0x32, 0xa7, 0x7c, 0x97, 0x54, 0x9c, 0xe4, - 0xd2, 0xc7, 0x6f, 0xe1, 0xf6, 0x8f, 0x2c, 0xa7, 0x77, 0x4c, 0xfb, 0xc6, 0x85, 0xcd, 0x0e, 0x3d, - 0xc3, 0xe9, 0x9e, 0x37, 0x8d, 0x01, 0xbd, 0xf1, 0x29, 0xf1, 0x53, 0xb8, 0x33, 0x01, 0x59, 0xda, - 0x8e, 0x60, 0xde, 0x31, 0x06, 0x94, 0x83, 0x96, 0x09, 0xff, 0xc6, 0xaf, 0x61, 0x33, 0x10, 0xaa, - 0xdb, 0x76, 0x2c, 0x70, 0x73, 0x8f, 0xe3, 0x03, 0xd0, 0xb2, 0x60, 0xa5, 0x21, 0xab, 0xb0, 0x10, - 0x28, 0x17, 0x9e, 0x2b, 0x13, 0xb1, 0xc0, 0x04, 0xd6, 0xa5, 0x4c, 0xdb, 0x30, 0x67, 0x64, 0xc7, - 0x3e, 0x6c, 0x8c, 0x61, 0x4e, 0x35, 0xe2, 0x93, 0x02, 0x28, 0x90, 0x20, 0xb4, 0x3f, 0x93, 0x5b, - 0x99, 0x1e, 0x7b, 0xeb, 0x90, 0x1f, 0x7a, 0xb4, 0x6f, 0x7d, 0xe4, 0xc1, 0x57, 0x26, 0x72, 0x85, - 0xf7, 0x60, 0x25, 0x65, 0xc4, 0x94, 0x0b, 0xfc, 0x8f, 0x02, 0xd5, 0x80, 0xf7, 0xa5, 0xdb, 0x35, - 0xa4, 0xb3, 0x67, 0xe0, 0x38, 0xf4, 0x43, 0x58, 0xf4, 0x5d, 0x8f, 0xe9, 0x9d, 0x4b, 0x6e, 0x74, - 0xe5, 0xe0, 0x61, 0x28, 0x36, 0x49, 0x59, 0xad, 0xe5, 0x7a, 0xec, 0xf0, 0x92, 0xe4, 0x7d, 0xfe, - 0x8b, 0xbf, 0x0d, 0x79, 0x41, 0x41, 0x05, 0x98, 0x6f, 0xd6, 0x5f, 0x35, 0xd4, 0x2f, 0xd0, 0x12, - 0x94, 0x5e, 0x9f, 0x1d, 0xd7, 0xdb, 0x8d, 0x63, 0xbd, 0xde, 0x3a, 0x52, 0x15, 0xa4, 0x42, 0x39, - 0x24, 0x1c, 0x37, 0x5a, 0x47, 0x6a, 0x0e, 0xbf, 0x15, 0x01, 0x39, 0xa2, 0x41, 0x3a, 0xe0, 0x7b, - 0x50, 0xe8, 0x48, 0x9a, 0x7c, 0x75, 0xdb, 0x13, 0xcc, 0x0a, 0x45, 0x48, 0x24, 0x80, 0xff, 0x99, - 0x13, 0xc1, 0x90, 0xc1, 0x95, 0xe5, 0xd9, 0xe9, 0x37, 0x77, 0x1f, 0x2a, 0x72, 0xd3, 0xbf, 0xe0, - 0x2f, 0x5b, 0xde, 0xe0, 0x2d, 0x41, 0x6d, 0x09, 0x22, 0x7a, 0x0e, 0x92, 0xa0, 0x1b, 0x17, 0xec, - 0xdc, 0xf5, 0xaa, 0xf3, 0xfc, 0x0e, 0xbe, 0x9c, 0x60, 0xf5, 0x11, 0xe7, 0xad, 0x73, 0x56, 0x52, - 0xee, 0x26, 0x56, 0xa8, 0x09, 0xaa, 0x44, 0x12, 0x3f, 0x8c, 0x7a, 0xd5, 0x85, 0xeb, 0x83, 0x2d, - 0x09, 0xa9, 0xa3, 0x50, 0x16, 0xed, 0x41, 0x5e, 0x90, 0xaa, 0x79, 0x8e, 0xb2, 0x1c, 0xa2, 0x3c, - 0x0b, 0xb9, 0x88, 0x64, 0xc0, 0x7f, 0x52, 0x60, 0x6b, 0x0a, 0x76, 0xa6, 0xf3, 0x56, 0x61, 0x81, - 0x0e, 0x0c, 0xcb, 0xe6, 0x8e, 0x2b, 0x13, 0xb1, 0x40, 0x35, 0x98, 0xef, 0x19, 0x8c, 0x72, 0x5f, - 0x95, 0x0e, 0xb4, 0x9a, 0x28, 0x05, 0xb5, 0xb0, 0x14, 0xd4, 0xda, 0x61, 0x29, 0x20, 0x9c, 0x0f, - 0x69, 0x50, 0x08, 0xaa, 0xc3, 0xaf, 0x5d, 0x87, 0x72, 0xcf, 0x95, 0x49, 0xb4, 0xc6, 0x7f, 0x53, - 0xa2, 0x7c, 0x31, 0xbb, 0xb0, 0xdf, 0x86, 0xd2, 0x80, 0x7a, 0x26, 0xed, 0xe9, 0xae, 0x63, 0x8b, - 0xd0, 0x2f, 0x10, 0x10, 0xa4, 0x53, 0xc7, 0xbe, 0x44, 0x0f, 0x61, 0x49, 0x32, 0x44, 0x81, 0x38, - 0xc7, 0xf3, 0x47, 0x45, 0x90, 0x43, 0x53, 0xf0, 0x3f, 0x94, 0x28, 0xf5, 0x8c, 0x85, 0xf1, 0xe1, - 0x58, 0x18, 0x3f, 0x48, 0xde, 0x61, 0x86, 0x48, 0x4d, 0xc6, 0x6b, 0x24, 0xa7, 0x3d, 0x83, 0xbc, - 0xa0, 0x65, 0xba, 0x7f, 0x0f, 0xf2, 0xcc, 0xf0, 0x4c, 0xca, 0xf8, 0x11, 0xb2, 0x6f, 0x57, 0x30, - 0x60, 0x0a, 0x95, 0x40, 0x69, 0xdb, 0x30, 0x6f, 0xee, 0xbe, 0x4d, 0x28, 0x30, 0xc3, 0xd4, 0xb9, - 0x39, 0xe2, 0xe2, 0x17, 0x99, 0xc8, 0xbb, 0xf8, 0x09, 0x2c, 0x45, 0x6a, 0xa4, 0x1b, 0xee, 0xc0, - 0x1c, 0x33, 0x4c, 0xa9, 0xa0, 0x14, 0x2a, 0x08, 0x38, 0x02, 0x3a, 0x6e, 0x8a, 0x4c, 0x2c, 0x72, - 0xf7, 0x0c, 0x6a, 0xc1, 0x77, 0x44, 0x52, 0x8d, 0xf0, 0xa4, 0x15, 0xdb, 0x30, 0xcf, 0x0c, 0x33, - 0xbc, 0x88, 0x94, 0x19, 0x7c, 0x03, 0xff, 0x1c, 0x54, 0x42, 0xfb, 0x8d, 0x8f, 0x96, 0xcf, 0x66, - 0x10, 0x61, 0x2a, 0xcc, 0x79, 0xb4, 0x2f, 0xbd, 0x13, 0x7c, 0xe2, 0x3d, 0x58, 0x4e, 0xe0, 0xc7, - 0xd5, 0xe9, 0xbd, 0x61, 0x5f, 0x88, 0x5b, 0x2d, 0x10, 0xb1, 0xc0, 0xbf, 0x53, 0x60, 0xe5, 0xc8, - 0xa3, 0x06, 0xa3, 0x61, 0xfe, 0xba, 0xa9, 0x39, 0x61, 0xf0, 0xe4, 0x12, 0xc1, 0xb3, 0x0d, 0x25, - 0x9f, 0x19, 0x1e, 0xd3, 0x87, 0xae, 0xe5, 0x84, 0x89, 0x0d, 0x38, 0xe9, 0x2c, 0xa0, 0xe0, 0x7f, - 0x2b, 0xb0, 0x9a, 0x36, 0x23, 0xca, 0xcf, 0x79, 0x9f, 0x19, 0xec, 0xc2, 0xe7, 0x36, 0x54, 0xe2, - 0xd4, 0x94, 0xc5, 0x5d, 0x6b, 0x71, 0x56, 0x22, 0x45, 0xd0, 0x03, 0xc8, 0x8b, 0xe8, 0x96, 0x31, - 0x5b, 0x09, 0x85, 0xa5, 0x98, 0xdc, 0xc5, 0x4d, 0xc8, 0x0b, 0x49, 0x94, 0x87, 0xdc, 0xe9, 0x0b, - 0xf5, 0x0b, 0x54, 0x01, 0x68, 0x10, 0xa2, 0x37, 0xde, 0x9e, 0xb4, 0xda, 0x2d, 0x55, 0x09, 0xca, - 0x4c, 0xb0, 0x3e, 0x69, 0xfe, 0xa4, 0xfe, 0xf2, 0xe4, 0x58, 0xcd, 0xa1, 0x2d, 0xd8, 0x48, 0x10, - 0xf4, 0x56, 0xbb, 0x4e, 0xda, 0xfa, 0xd9, 0xe9, 0x49, 0xb3, 0xad, 0xce, 0xe1, 0x2e, 0xac, 0x1c, - 0x53, 0x9b, 0x7e, 0x56, 0x9f, 0xe2, 0x75, 0x58, 0x4d, 0x2b, 0x11, 0x3e, 0xc0, 0x06, 0x2c, 0x07, - 0x41, 0xf9, 0x39, 0x55, 0x7f, 0x5f, 0xbc, 0xa3, 0x91, 0xab, 0x8a, 0xbd, 0xad, 0x4c, 0xf5, 0xf6, - 0x1f, 0x14, 0x58, 0x16, 0x96, 0x13, 0xda, 0x9f, 0x41, 0xfc, 0x3f, 0x06, 0x44, 0x3f, 0x76, 0xe9, - 0x90, 0xe9, 0x1f, 0x2c, 0x76, 0xae, 0xcb, 0xf6, 0x27, 0xc7, 0x73, 0xa8, 0x2a, 0x76, 0xde, 0x58, - 0xec, 0xfc, 0x8c, 0xd3, 0x83, 0xf3, 0x78, 0xb4, 0x1f, 0xe6, 0x58, 0xfe, 0x8d, 0xbf, 0x05, 0x28, - 0x69, 0x90, 0x3c, 0xcf, 0x16, 0x14, 0x4d, 0x8b, 0xe9, 0xd4, 0xf3, 0x5c, 0x8f, 0x1b, 0x54, 0x24, - 0x05, 0xd3, 0x62, 0x8d, 0x60, 0x8d, 0xff, 0xac, 0xc0, 0x83, 0xa0, 0x9d, 0x4f, 0x34, 0xa3, 0x47, - 0xae, 0xc3, 0x0c, 0xcb, 0xb1, 0x1c, 0x53, 0xe6, 0xc3, 0xff, 0xc7, 0x94, 0x41, 0xe0, 0xe1, 0x95, - 0x66, 0xc9, 0xf3, 0xdd, 0x83, 0xb2, 0xb8, 0x11, 0x5d, 0x74, 0xad, 0xc2, 0x63, 0xa5, 0x4e, 0x2c, - 0xfa, 0xe3, 0xf9, 0x82, 0xa2, 0xe6, 0xf0, 0x1f, 0x15, 0xf8, 0x32, 0x00, 0x0d, 0x1b, 0xde, 0xaf, - 0xc5, 0x41, 0x4f, 0xe0, 0xab, 0xe9, 0x36, 0xc5, 0xb7, 0x18, 0x16, 0x90, 0xf0, 0x88, 0x05, 0x59, - 0x41, 0xc2, 0xf3, 0xfd, 0x06, 0xd6, 0x9e, 0xd1, 0x00, 0xe9, 0x15, 0xf5, 0x7d, 0xc3, 0x9c, 0x45, - 0xd5, 0xdf, 0x80, 0xa0, 0x4c, 0xe9, 0x56, 0x4f, 0x04, 0x5a, 0x31, 0xa8, 0x8d, 0xe6, 0x49, 0x2f, - 0xd0, 0x98, 0x53, 0xe7, 0x48, 0x6c, 0x12, 0x7e, 0x07, 0xeb, 0xa3, 0xca, 0xa5, 0xe5, 0x55, 0x58, - 0x1c, 0x08, 0x5a, 0x58, 0xf9, 0xe4, 0x12, 0xad, 0x05, 0xb5, 0x38, 0x40, 0xe7, 0x2e, 0x29, 0x92, - 0x05, 0x0e, 0x2e, 0x4e, 0x43, 0xa2, 0x7a, 0x89, 0x1d, 0x58, 0x93, 0x13, 0xa7, 0xf0, 0xc9, 0x67, - 0x9e, 0x7b, 0x71, 0x03, 0xd6, 0x47, 0xf5, 0xc9, 0xa3, 0x3c, 0x82, 0x45, 0xc1, 0x15, 0x16, 0xc5, - 0x8c, 0xee, 0x21, 0xe4, 0xc0, 0x97, 0x62, 0x9e, 0xad, 0xdb, 0x36, 0xa1, 0x03, 0x37, 0xcc, 0x6f, - 0x33, 0xea, 0xc5, 0x3c, 0x0e, 0x19, 0xf7, 0x13, 0xc5, 0x80, 0x21, 0x20, 0xf1, 0x96, 0xe2, 0x85, - 0x18, 0x78, 0x33, 0x54, 0xcb, 0x83, 0x7c, 0x63, 0xac, 0xcf, 0x1a, 0xcd, 0x72, 0xf1, 0x74, 0xd0, - 0x87, 0xa5, 0x33, 0xa3, 0xfb, 0xcb, 0xd9, 0x24, 0xb9, 0x4d, 0x28, 0x18, 0xb6, 0xad, 0xf3, 0xd4, - 0x25, 0x7a, 0xc8, 0x45, 0x23, 0xb0, 0xb2, 0xef, 0x63, 0x04, 0x6a, 0xac, 0x47, 0xd8, 0x79, 0xf0, - 0xf7, 0x5b, 0x00, 0x84, 0xf6, 0x5b, 0xd4, 0x7b, 0x6f, 0x75, 0x29, 0xb2, 0x61, 0x2d, 0x73, 0x90, - 0x47, 0x5f, 0x25, 0xbb, 0xc4, 0x49, 0xff, 0x20, 0x68, 0xf7, 0xaf, 0xe0, 0x92, 0x95, 0x27, 0xff, - 0xdf, 0xbf, 0xec, 0xe6, 0x0a, 0x39, 0x44, 0xa3, 0x36, 0x2b, 0x91, 0x86, 0xd0, 0xbd, 0xcc, 0x86, - 0x34, 0x39, 0x95, 0x6b, 0x78, 0x1a, 0x4b, 0x5a, 0xc9, 0x13, 0x05, 0xfd, 0x4c, 0xf4, 0x7f, 0x89, - 0x49, 0x1c, 0xdd, 0x1d, 0x01, 0x18, 0x19, 0xfb, 0xb5, 0xed, 0x89, 0xfb, 0x63, 0xe8, 0x4d, 0x28, - 0x25, 0x06, 0x66, 0xa4, 0x25, 0x25, 0xd3, 0xa3, 0xbc, 0xb6, 0x95, 0xb9, 0x37, 0xe2, 0x94, 0x8e, - 0x28, 0xcb, 0xa9, 0x29, 0x14, 0xed, 0x5c, 0x35, 0x02, 0x6b, 0xf7, 0xa6, 0x70, 0x4c, 0xf1, 0x48, - 0xa4, 0xe1, 0xee, 0xc4, 0x31, 0x20, 0xdb, 0x23, 0x53, 0xd0, 0xcf, 0x84, 0x47, 0x64, 0xb7, 0x9b, - 0xf6, 0x48, 0xba, 0xa5, 0x4e, 0x7b, 0x64, 0xa4, 0x3d, 0x4e, 0x20, 0x1e, 0xc2, 0xa2, 0xec, 0xe0, - 0xd1, 0x7a, 0x52, 0x22, 0x9e, 0x1c, 0xb4, 0x8d, 0x31, 0xfa, 0x88, 0x5f, 0x1d, 0x11, 0xda, 0x63, - 0x4f, 0x36, 0x1d, 0xda, 0x93, 0x92, 0x49, 0x3a, 0xb4, 0x27, 0xbe, 0xfb, 0x84, 0xcd, 0xcf, 0xa1, - 0x18, 0xf5, 0xd6, 0xa8, 0x1a, 0xbf, 0xdd, 0x74, 0x3b, 0xaf, 0x6d, 0x66, 0xec, 0x8c, 0x58, 0xfe, - 0x02, 0x20, 0xee, 0xa2, 0xd0, 0x66, 0xd2, 0x90, 0x54, 0xf3, 0xa6, 0x69, 0x59, 0x5b, 0xe3, 0x60, - 0x71, 0x0b, 0x13, 0x83, 0x8d, 0xf5, 0x59, 0x31, 0xd8, 0x78, 0xc7, 0x23, 0xc1, 0x14, 0xf4, 0x7b, - 0x05, 0xb6, 0xaf, 0xe8, 0x22, 0x50, 0x2d, 0xc4, 0xb9, 0x5e, 0x17, 0xa4, 0xed, 0x5f, 0x9b, 0x7f, - 0xcc, 0xe5, 0x9f, 0x14, 0xb8, 0x3d, 0xad, 0xd6, 0xa3, 0x47, 0x49, 0xec, 0x2b, 0xba, 0x14, 0xed, - 0xf1, 0xf5, 0x98, 0xc7, 0xac, 0x78, 0x07, 0x95, 0x74, 0xa1, 0x46, 0x77, 0xa2, 0x22, 0x96, 0xd5, - 0x3d, 0x68, 0x77, 0x27, 0x6d, 0x67, 0x41, 0xa7, 0x0b, 0x67, 0x0c, 0x9d, 0x59, 0xc0, 0x63, 0xe8, - 0xec, 0x7a, 0x9b, 0x80, 0x6e, 0x41, 0x39, 0xf9, 0xaf, 0x33, 0xda, 0x1a, 0x91, 0x4c, 0xfe, 0x1f, - 0xae, 0xdd, 0xce, 0xde, 0x1c, 0x03, 0x6d, 0x40, 0x21, 0xac, 0x38, 0x28, 0x7a, 0xa0, 0x23, 0xb5, - 0x4e, 0xab, 0x8e, 0x6f, 0xa4, 0xc3, 0xec, 0xf0, 0xc9, 0x4f, 0x03, 0x16, 0xdb, 0xe8, 0xd4, 0xba, - 0xee, 0x60, 0x5f, 0x7c, 0x7e, 0xd3, 0xf5, 0xcc, 0x7d, 0x21, 0x28, 0xfe, 0xcf, 0xdf, 0x37, 0x5d, - 0xb9, 0x1e, 0x76, 0x3a, 0x79, 0x4e, 0x7a, 0xfa, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x08, 0x97, - 0xa3, 0xee, 0x2b, 0x18, 0x00, 0x00, + // 1742 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0x5f, 0x73, 0x1b, 0x49, + 0x11, 0xbf, 0x95, 0x6d, 0x59, 0x6a, 0x29, 0xf2, 0x7a, 0xe2, 0x3f, 0xf2, 0x3a, 0x89, 0x9d, 0xb9, + 0xbb, 0xc4, 0xe1, 0x82, 0x1c, 0x7c, 0x05, 0x45, 0x15, 0x54, 0x81, 0xff, 0x88, 0xc4, 0x24, 0xa7, + 0xa8, 0x46, 0x3a, 0x2e, 0x47, 0x51, 0x6c, 0x8d, 0xa4, 0xd1, 0x7a, 0x61, 0xb5, 0x2b, 0x76, 0xc7, + 0x97, 0x18, 0xde, 0x38, 0x1e, 0xa9, 0xa2, 0x0a, 0x8a, 0x0a, 0x0f, 0x3c, 0xf1, 0xc0, 0x47, 0xe0, + 0x23, 0xf0, 0xc2, 0x37, 0xe2, 0x89, 0xda, 0x99, 0xd9, 0x7f, 0xd2, 0x4a, 0x4e, 0x95, 0x95, 0xe2, + 0x9e, 0xb4, 0xd3, 0xd3, 0xfd, 0x9b, 0xdf, 0xf4, 0xf4, 0x76, 0xf7, 0xac, 0xa0, 0xec, 0xb3, 0x61, + 0x63, 0xec, 0x7b, 0xdc, 0x43, 0x45, 0xcb, 0xe6, 0xd4, 0xb9, 0x32, 0xc0, 0xb1, 0x5d, 0x2e, 0x65, + 0x46, 0x35, 0xb8, 0xa0, 0x3e, 0x1b, 0xa8, 0x11, 0xf4, 0x1c, 0xaf, 0xa7, 0x9e, 0xf7, 0x2c, 0xcf, + 0xb3, 0x1c, 0x76, 0x28, 0x46, 0xbd, 0xcb, 0xe1, 0x21, 0xb7, 0x47, 0x2c, 0xe0, 0x74, 0x34, 0x96, + 0x0a, 0xf8, 0xf7, 0x1a, 0xdc, 0x7e, 0x61, 0x07, 0xbc, 0xc5, 0x5e, 0x9f, 0x38, 0x5e, 0x2f, 0x20, + 0xec, 0x37, 0x97, 0x2c, 0xe0, 0xe8, 0xfb, 0x00, 0x3e, 0x1b, 0x7b, 0x81, 0xcd, 0x3d, 0xff, 0xaa, + 0xae, 0xed, 0x6b, 0x07, 0x95, 0x23, 0xd4, 0x90, 0x6b, 0x37, 0x48, 0x3c, 0x73, 0xb2, 0xfc, 0xb7, + 0x7f, 0x3f, 0xd6, 0x48, 0x4a, 0x17, 0xed, 0x42, 0xb9, 0xef, 0x8d, 0x46, 0x36, 0x37, 0xed, 0x41, + 0xbd, 0xb0, 0xaf, 0x1d, 0x94, 0x49, 0x49, 0x0a, 0xce, 0x07, 0x68, 0x03, 0x56, 0x1c, 0x7b, 0x64, + 0xf3, 0xfa, 0xd2, 0xbe, 0x76, 0x70, 0x8b, 0xc8, 0x01, 0xfe, 0x02, 0x36, 0xb2, 0x1c, 0x82, 0xb1, + 0xe7, 0x06, 0x0c, 0xfd, 0x08, 0x74, 0x97, 0xbd, 0x36, 0xc3, 0xfd, 0x98, 0x5e, 0xef, 0x57, 0xac, + 0xcf, 0x83, 0xba, 0xb6, 0xbf, 0x74, 0x50, 0x39, 0xda, 0x8c, 0xa8, 0x28, 0x9b, 0x97, 0x62, 0x96, + 0xd4, 0xdc, 0xf4, 0x30, 0xc0, 0xaf, 0xe0, 0xce, 0x4f, 0x6c, 0x77, 0x70, 0xc6, 0x86, 0xf4, 0xd2, + 0xe1, 0x27, 0x3e, 0x75, 0xfb, 0x17, 0x2d, 0x3a, 0x62, 0x37, 0xde, 0x25, 0xfe, 0x14, 0xee, 0xce, + 0x40, 0x56, 0xdc, 0x11, 0x2c, 0xbb, 0x74, 0xc4, 0x04, 0x68, 0x95, 0x88, 0x67, 0xfc, 0x39, 0xec, + 0x84, 0x46, 0xc7, 0x8e, 0x93, 0x18, 0xdc, 0xdc, 0xe3, 0xf8, 0x08, 0x8c, 0x3c, 0x58, 0x45, 0x64, + 0x03, 0x56, 0xc2, 0xc5, 0xa5, 0xe7, 0xaa, 0x44, 0x0e, 0x30, 0x81, 0x2d, 0x65, 0xd3, 0xa5, 0xd6, + 0x82, 0x78, 0x1c, 0xc2, 0xf6, 0x14, 0xe6, 0x5c, 0x12, 0x5f, 0x6b, 0x80, 0x42, 0x0b, 0xc2, 0x86, + 0x0b, 0x39, 0x95, 0xf9, 0xb1, 0xb7, 0x05, 0xc5, 0xb1, 0xcf, 0x86, 0xf6, 0x1b, 0x11, 0x7c, 0x55, + 0xa2, 0x46, 0xf8, 0x11, 0xdc, 0xce, 0x90, 0x98, 0x73, 0x80, 0x6f, 0x0b, 0x50, 0x0f, 0x75, 0x5f, + 0x78, 0x7d, 0xaa, 0x9c, 0xbd, 0x00, 0xc7, 0xa1, 0x1f, 0xc3, 0x6a, 0xe0, 0xf9, 0xdc, 0xec, 0x5d, + 0x09, 0xd2, 0xb5, 0xa3, 0x87, 0x91, 0xd9, 0xac, 0xc5, 0x1a, 0x1d, 0xcf, 0xe7, 0x27, 0x57, 0xa4, + 0x18, 0x88, 0x5f, 0xf4, 0x0c, 0xd6, 0xc7, 0xd4, 0xb2, 0x5d, 0xca, 0x6d, 0xcf, 0x35, 0xc7, 0xd4, + 0xa7, 0xa3, 0x40, 0x6c, 0xb3, 0x72, 0xb4, 0x1b, 0x61, 0xb5, 0x63, 0x85, 0x76, 0x38, 0xcf, 0x38, + 0xf3, 0x89, 0x3e, 0xce, 0x0a, 0x03, 0xfc, 0x5d, 0x28, 0x4a, 0x6c, 0x54, 0x82, 0xe5, 0xd6, 0xf1, + 0x67, 0x4d, 0xfd, 0x03, 0xb4, 0x06, 0x95, 0xcf, 0xdb, 0x67, 0xc7, 0xdd, 0xe6, 0x99, 0x79, 0xdc, + 0x39, 0xd5, 0x35, 0xa4, 0x43, 0x35, 0x12, 0x9c, 0x35, 0x3b, 0xa7, 0x7a, 0x01, 0xbf, 0x92, 0xa1, + 0x3d, 0xc1, 0x55, 0xb9, 0xf2, 0x07, 0x50, 0xea, 0x29, 0x99, 0x7a, 0x7f, 0xf7, 0x66, 0x6c, 0x30, + 0x32, 0x21, 0xb1, 0x01, 0xfe, 0x57, 0x41, 0x86, 0x55, 0x8e, 0x56, 0xde, 0x19, 0xcd, 0x8f, 0x81, + 0x8f, 0xa1, 0xa6, 0x26, 0x83, 0x4b, 0x91, 0x23, 0x54, 0x2c, 0xdc, 0x92, 0xd2, 0x8e, 0x14, 0xa2, + 0x67, 0xa0, 0x04, 0x26, 0xbd, 0xe4, 0x17, 0x9e, 0x5f, 0x5f, 0x16, 0xae, 0xfc, 0x70, 0x06, 0xeb, + 0x53, 0xa1, 0x7b, 0x2c, 0x54, 0x49, 0xb5, 0x9f, 0x1a, 0xa1, 0x16, 0xe8, 0x0a, 0x49, 0xfe, 0x70, + 0xe6, 0xd7, 0x57, 0xde, 0x1d, 0x6c, 0x4d, 0x5a, 0x9d, 0x46, 0xb6, 0xe8, 0x11, 0x14, 0xa5, 0xa8, + 0x5e, 0x14, 0x28, 0xeb, 0x11, 0xca, 0xd3, 0x48, 0x8b, 0x28, 0x05, 0xfc, 0x17, 0x0d, 0x76, 0xe7, + 0x60, 0xe7, 0x3a, 0x6f, 0x03, 0x56, 0xd8, 0x88, 0xda, 0x8e, 0x70, 0x5c, 0x95, 0xc8, 0x01, 0x6a, + 0xc0, 0xf2, 0x80, 0x72, 0xa6, 0x02, 0xca, 0x68, 0xc8, 0xa2, 0xd2, 0x88, 0x8a, 0x4a, 0xa3, 0x1b, + 0x15, 0x15, 0x22, 0xf4, 0x90, 0x01, 0xa5, 0xb0, 0xce, 0xfc, 0xd6, 0x73, 0x99, 0xf0, 0x5c, 0x95, + 0xc4, 0x63, 0xfc, 0x77, 0x2d, 0xce, 0x3c, 0x8b, 0x7b, 0x81, 0xf6, 0xa0, 0x32, 0x62, 0xbe, 0xc5, + 0x06, 0xa6, 0xe7, 0x3a, 0xf2, 0x25, 0x2a, 0x11, 0x90, 0xa2, 0x97, 0xae, 0x73, 0x85, 0x1e, 0xc2, + 0x9a, 0x52, 0x88, 0x03, 0x71, 0x49, 0x64, 0xa2, 0x9a, 0x14, 0x47, 0x54, 0xf0, 0x3f, 0xb5, 0x38, + 0x89, 0x4d, 0x85, 0xf1, 0xc9, 0x54, 0x18, 0x3f, 0x48, 0x9f, 0x61, 0x8e, 0x49, 0x43, 0xc5, 0x6b, + 0x6c, 0x67, 0x3c, 0x85, 0xa2, 0x94, 0xe5, 0xba, 0xff, 0x11, 0x14, 0x39, 0xf5, 0x2d, 0xc6, 0xc5, + 0x16, 0xf2, 0x4f, 0x57, 0x2a, 0x60, 0x06, 0xb5, 0x70, 0xd1, 0x2e, 0xb5, 0x6e, 0xee, 0xbe, 0x1d, + 0x28, 0x71, 0x6a, 0x99, 0x82, 0x8e, 0x3c, 0xf8, 0x55, 0x2e, 0x33, 0x38, 0x7e, 0x02, 0x6b, 0xf1, + 0x32, 0xca, 0x0d, 0x77, 0x61, 0x89, 0x53, 0x4b, 0x2d, 0x50, 0x89, 0x16, 0x08, 0x35, 0x42, 0x39, + 0x6e, 0xc9, 0x9c, 0x2e, 0xab, 0xc0, 0x02, 0xaa, 0xca, 0xf7, 0x64, 0x7a, 0x8e, 0xf1, 0x14, 0x8b, + 0x3d, 0x58, 0xe6, 0xd4, 0x8a, 0x0e, 0x22, 0x43, 0x43, 0x4c, 0xe0, 0x5f, 0x82, 0x4e, 0xd8, 0xb0, + 0xf9, 0xc6, 0x0e, 0xf8, 0x02, 0x22, 0x4c, 0x87, 0x25, 0x9f, 0x0d, 0x95, 0x77, 0xc2, 0x47, 0xfc, + 0x08, 0xd6, 0x53, 0xf8, 0x49, 0x9d, 0xfb, 0x8a, 0x3a, 0x97, 0xf2, 0x54, 0x4b, 0x44, 0x0e, 0xf0, + 0x1f, 0x34, 0xb8, 0x7d, 0xea, 0x33, 0xca, 0x59, 0x94, 0xbf, 0x6e, 0x4a, 0x27, 0x0a, 0x9e, 0x42, + 0x2a, 0x78, 0xf6, 0xa0, 0x12, 0x70, 0xea, 0x73, 0x73, 0xec, 0xd9, 0x6e, 0x94, 0xd8, 0x40, 0x88, + 0xda, 0xa1, 0x04, 0xff, 0x47, 0x83, 0x8d, 0x2c, 0x8d, 0x38, 0x3f, 0x17, 0x03, 0x4e, 0xf9, 0x65, + 0x20, 0x38, 0xd4, 0x92, 0xd4, 0x94, 0xa7, 0xdd, 0xe8, 0x08, 0x55, 0xa2, 0x4c, 0xd0, 0x03, 0x28, + 0xca, 0xe8, 0x56, 0x31, 0x5b, 0x8b, 0x8c, 0x95, 0x99, 0x9a, 0xc5, 0x2d, 0x28, 0x4a, 0x4b, 0x54, + 0x84, 0xc2, 0xcb, 0xe7, 0xfa, 0x07, 0xa8, 0x06, 0xd0, 0x24, 0xc4, 0x6c, 0xbe, 0x3a, 0xef, 0x74, + 0x3b, 0xba, 0x16, 0x96, 0x99, 0x70, 0x7c, 0xde, 0xfa, 0xd9, 0xf1, 0x8b, 0xf3, 0x33, 0xbd, 0x80, + 0x76, 0x61, 0x3b, 0x25, 0x30, 0x3b, 0xdd, 0x63, 0xd2, 0x35, 0xdb, 0x2f, 0xcf, 0x5b, 0x5d, 0x7d, + 0x09, 0xf7, 0xe1, 0xf6, 0x19, 0x73, 0xd8, 0x7b, 0xf5, 0x29, 0xde, 0x82, 0x8d, 0xec, 0x22, 0xd2, + 0x07, 0x98, 0xc2, 0x7a, 0x18, 0x94, 0xef, 0x73, 0xe9, 0x1f, 0xca, 0xf7, 0x68, 0xe2, 0xa8, 0x12, + 0x6f, 0x6b, 0x73, 0xbd, 0xfd, 0x27, 0x0d, 0xd6, 0x25, 0x73, 0xc2, 0x86, 0x0b, 0x88, 0xff, 0xc7, + 0x80, 0xd8, 0x9b, 0x3e, 0x1b, 0x73, 0xf3, 0xb5, 0xcd, 0x2f, 0x4c, 0xd5, 0x48, 0x15, 0x44, 0x0e, + 0xd5, 0xe5, 0xcc, 0x17, 0x36, 0xbf, 0x68, 0x0b, 0x79, 0xb8, 0x1f, 0x9f, 0x0d, 0xa3, 0x1c, 0x2b, + 0x9e, 0xf1, 0x77, 0x00, 0xa5, 0x09, 0xa9, 0xfd, 0xec, 0x42, 0xd9, 0xb2, 0xb9, 0xc9, 0x7c, 0xdf, + 0xf3, 0x05, 0xa1, 0x32, 0x29, 0x59, 0x36, 0x6f, 0x86, 0x63, 0xfc, 0x57, 0x0d, 0x1e, 0x84, 0x17, + 0x83, 0x54, 0x5b, 0x7b, 0xea, 0xb9, 0x9c, 0xda, 0xae, 0xed, 0x5a, 0x2a, 0x1f, 0xfe, 0x3f, 0xee, + 0x2b, 0x04, 0x1e, 0x5e, 0x4b, 0x4b, 0xed, 0xef, 0x3e, 0x54, 0xe5, 0x89, 0x98, 0xb2, 0xff, 0x95, + 0x1e, 0xab, 0xf4, 0x12, 0xd3, 0x9f, 0x2e, 0x97, 0x34, 0xbd, 0x80, 0xff, 0xac, 0xc1, 0x87, 0x21, + 0x68, 0xd4, 0x3a, 0x7f, 0x23, 0x36, 0x7a, 0x0e, 0x1f, 0xcd, 0xe7, 0x94, 0x9c, 0x62, 0x54, 0x40, + 0xa2, 0x2d, 0x96, 0x54, 0x05, 0x89, 0xf6, 0xf7, 0x3b, 0xd8, 0x7c, 0xca, 0x42, 0xa4, 0xcf, 0x58, + 0x10, 0x50, 0x6b, 0x11, 0x55, 0x7f, 0x1b, 0xc2, 0x32, 0x65, 0xda, 0x03, 0x19, 0x68, 0xe5, 0xb0, + 0x36, 0x5a, 0xe7, 0x83, 0x70, 0xc5, 0x82, 0xbe, 0x44, 0x12, 0x4a, 0xf8, 0x4b, 0xd8, 0x9a, 0x5c, + 0x5c, 0x31, 0xaf, 0xc3, 0xea, 0x48, 0xca, 0xa2, 0xca, 0xa7, 0x86, 0x68, 0x33, 0xac, 0xc5, 0x21, + 0xba, 0x70, 0x49, 0x99, 0xac, 0x08, 0x70, 0xb9, 0x1b, 0x12, 0xd7, 0x4b, 0xec, 0xc2, 0xa6, 0xba, + 0xbb, 0x4a, 0x9f, 0xbc, 0xe7, 0x1b, 0x34, 0x6e, 0xc2, 0xd6, 0xe4, 0x7a, 0x6a, 0x2b, 0x9f, 0xc0, + 0xaa, 0xd4, 0x8a, 0x8a, 0x62, 0x4e, 0xf7, 0x10, 0x69, 0xe0, 0x2b, 0x79, 0x33, 0x3e, 0x76, 0x1c, + 0xc2, 0x46, 0x5e, 0x94, 0xdf, 0x16, 0xd4, 0x8b, 0xf9, 0x02, 0x32, 0xe9, 0x27, 0xca, 0xa1, 0x42, + 0x28, 0x12, 0x2d, 0xc5, 0x73, 0x79, 0x75, 0xce, 0x59, 0x5a, 0x6d, 0xe4, 0x5b, 0x53, 0x7d, 0xd6, + 0x64, 0x96, 0x4b, 0x6e, 0x07, 0x43, 0x58, 0x6b, 0xd3, 0xfe, 0xaf, 0x17, 0x93, 0xe4, 0x76, 0xa0, + 0x44, 0x1d, 0xc7, 0x14, 0xa9, 0x4b, 0xf6, 0x90, 0xab, 0x34, 0x64, 0x39, 0x0c, 0x30, 0x02, 0x3d, + 0x59, 0x47, 0xf2, 0x3c, 0xfa, 0xc7, 0x2d, 0x00, 0xc2, 0x86, 0x1d, 0xe6, 0x7f, 0x65, 0xf7, 0x19, + 0x72, 0x60, 0x33, 0xf7, 0x93, 0x00, 0xfa, 0x28, 0xdd, 0x25, 0xce, 0xfa, 0x16, 0x61, 0x7c, 0x7c, + 0x8d, 0x96, 0xaa, 0x3c, 0xc5, 0xff, 0xbe, 0x3d, 0x28, 0x94, 0x0a, 0x88, 0xc5, 0x6d, 0x56, 0x2a, + 0x0d, 0xa1, 0xfb, 0xb9, 0x0d, 0x69, 0xfa, 0x7e, 0x6f, 0xe0, 0x79, 0x2a, 0xd9, 0x45, 0x9e, 0x68, + 0xe8, 0x17, 0xb2, 0xff, 0x4b, 0xdd, 0xe9, 0xd1, 0xbd, 0x09, 0x80, 0x89, 0x0f, 0x08, 0xc6, 0xde, + 0xcc, 0xf9, 0x29, 0xf4, 0x16, 0x54, 0x52, 0x57, 0x6f, 0x64, 0xa4, 0x2d, 0xb3, 0x1f, 0x05, 0x8c, + 0xdd, 0xdc, 0xb9, 0x09, 0xa7, 0xf4, 0x64, 0x59, 0xce, 0xdc, 0x42, 0xd1, 0xfe, 0x75, 0x97, 0x69, + 0xe3, 0xfe, 0x1c, 0x8d, 0x39, 0x1e, 0x89, 0x57, 0xb8, 0x37, 0xf3, 0x1a, 0x90, 0xef, 0x91, 0x39, + 0xe8, 0x6d, 0xe9, 0x11, 0xd5, 0xed, 0x66, 0x3d, 0x92, 0x6d, 0xa9, 0xb3, 0x1e, 0x99, 0x68, 0x8f, + 0x53, 0x88, 0x27, 0xb0, 0xaa, 0x3a, 0x78, 0xb4, 0x95, 0xb6, 0x48, 0x6e, 0x0e, 0xc6, 0xf6, 0x94, + 0x7c, 0xc2, 0xaf, 0xae, 0x0c, 0xed, 0xa9, 0x57, 0x36, 0x1b, 0xda, 0xb3, 0x92, 0x49, 0x36, 0xb4, + 0x67, 0xbe, 0xf7, 0x29, 0xce, 0xcf, 0xa0, 0x1c, 0xf7, 0xd6, 0xa8, 0x9e, 0xbc, 0xbb, 0xd9, 0x76, + 0xde, 0xd8, 0xc9, 0x99, 0x99, 0x60, 0xfe, 0x1c, 0x20, 0xe9, 0xa2, 0xd0, 0x4e, 0x9a, 0x48, 0xa6, + 0x79, 0x33, 0x8c, 0xbc, 0xa9, 0x69, 0xb0, 0xa4, 0x85, 0x49, 0xc0, 0xa6, 0xfa, 0xac, 0x04, 0x6c, + 0xba, 0xe3, 0x51, 0x60, 0x1a, 0xfa, 0xa3, 0x06, 0x7b, 0xd7, 0x74, 0x11, 0xa8, 0x11, 0xe1, 0xbc, + 0x5b, 0x17, 0x64, 0x1c, 0xbe, 0xb3, 0xfe, 0x94, 0xcb, 0xbf, 0xd6, 0xe0, 0xce, 0xbc, 0x5a, 0x8f, + 0x3e, 0x49, 0x63, 0x5f, 0xd3, 0xa5, 0x18, 0x8f, 0xdf, 0x4d, 0x79, 0x8a, 0xc5, 0x97, 0x50, 0xcb, + 0x16, 0x6a, 0x74, 0x37, 0x2e, 0x62, 0x79, 0xdd, 0x83, 0x71, 0x6f, 0xd6, 0x74, 0x1e, 0x74, 0xb6, + 0x70, 0x26, 0xd0, 0xb9, 0x05, 0x3c, 0x81, 0xce, 0xaf, 0xb7, 0x29, 0xe8, 0x0e, 0x54, 0xd3, 0xdf, + 0xaf, 0xd1, 0xee, 0x84, 0x65, 0xfa, 0xcb, 0xba, 0x71, 0x27, 0x7f, 0x72, 0x0a, 0xb4, 0x09, 0xa5, + 0xa8, 0xe2, 0xa0, 0xed, 0xe4, 0x1b, 0x5e, 0xa6, 0xd6, 0x19, 0xf5, 0xe9, 0x89, 0x6c, 0x98, 0x9d, + 0x3c, 0xf9, 0x79, 0xa8, 0xe2, 0xd0, 0x5e, 0xa3, 0xef, 0x8d, 0x0e, 0xe5, 0xe3, 0xb7, 0x3d, 0xdf, + 0x3a, 0x94, 0x86, 0xf2, 0x9f, 0x81, 0x43, 0xcb, 0x53, 0xe3, 0x71, 0xaf, 0x57, 0x14, 0xa2, 0x4f, + 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0x7a, 0xea, 0x94, 0xeb, 0x75, 0x18, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/proto/go/gitalypb/shared.pb.go b/proto/go/gitalypb/shared.pb.go index 8f6955f0f02efd9bdb6ebbc3b408bc2cb980058e..7691d2471cf420a14c22fe657fa551a60b834cda 100644 --- a/proto/go/gitalypb/shared.pb.go +++ b/proto/go/gitalypb/shared.pb.go @@ -615,6 +615,64 @@ func (m *ObjectPool) GetRepository() *Repository { return nil } +type PaginationParameter struct { + // Instructs pagination to start sending results after the provided page + // token appears. A page token allows for a generic pattern to uniquely + // identify a result or 'page'. Each paginated RPC may interpret a page + // token differently. + PageToken string `protobuf:"bytes,1,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` + // When fully consuming the response the client will receive _at most_ + // `limit` number of resulting objects. Note that the number of response + // messages might be much lower, as some response messages already send + // multiple objects per message. + // When the limit is smaller than 0, it will be normalized to 2147483647 + // on the server side. When limit is not set, it defaults to 0, and no + // results are send in the response. + Limit int32 `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PaginationParameter) Reset() { *m = PaginationParameter{} } +func (m *PaginationParameter) String() string { return proto.CompactTextString(m) } +func (*PaginationParameter) ProtoMessage() {} +func (*PaginationParameter) Descriptor() ([]byte, []int) { + return fileDescriptor_d8a4e87e678c5ced, []int{8} +} + +func (m *PaginationParameter) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PaginationParameter.Unmarshal(m, b) +} +func (m *PaginationParameter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PaginationParameter.Marshal(b, m, deterministic) +} +func (m *PaginationParameter) XXX_Merge(src proto.Message) { + xxx_messageInfo_PaginationParameter.Merge(m, src) +} +func (m *PaginationParameter) XXX_Size() int { + return xxx_messageInfo_PaginationParameter.Size(m) +} +func (m *PaginationParameter) XXX_DiscardUnknown() { + xxx_messageInfo_PaginationParameter.DiscardUnknown(m) +} + +var xxx_messageInfo_PaginationParameter proto.InternalMessageInfo + +func (m *PaginationParameter) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *PaginationParameter) GetLimit() int32 { + if m != nil { + return m.Limit + } + return 0 +} + func init() { proto.RegisterEnum("gitaly.ObjectType", ObjectType_name, ObjectType_value) proto.RegisterEnum("gitaly.SignatureType", SignatureType_name, SignatureType_value) @@ -626,60 +684,64 @@ func init() { proto.RegisterType((*Tag)(nil), "gitaly.Tag") proto.RegisterType((*User)(nil), "gitaly.User") proto.RegisterType((*ObjectPool)(nil), "gitaly.ObjectPool") + proto.RegisterType((*PaginationParameter)(nil), "gitaly.PaginationParameter") } func init() { proto.RegisterFile("shared.proto", fileDescriptor_d8a4e87e678c5ced) } var fileDescriptor_d8a4e87e678c5ced = []byte{ - // 797 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0x5d, 0x6f, 0x23, 0x35, - 0x14, 0xdd, 0x99, 0x4c, 0xbe, 0x6e, 0x26, 0x65, 0x30, 0x45, 0x1a, 0x15, 0xad, 0xb6, 0x0c, 0x12, - 0xaa, 0x56, 0x65, 0x52, 0x05, 0x81, 0x40, 0xe2, 0xa5, 0x59, 0x4a, 0xd5, 0x85, 0x4d, 0xa2, 0x69, - 0x2a, 0x10, 0x2f, 0x23, 0x27, 0xe3, 0x75, 0x8c, 0x3c, 0xf1, 0xc8, 0x76, 0x56, 0xa4, 0xcf, 0x3c, - 0xf1, 0xc4, 0x9f, 0xe0, 0x95, 0x9f, 0xc1, 0xef, 0x42, 0xb6, 0x67, 0xb2, 0x59, 0x28, 0x88, 0x7d, - 0xbb, 0xf7, 0xfa, 0xf8, 0xfa, 0xdc, 0xe3, 0x63, 0x43, 0xa8, 0xd6, 0x58, 0x92, 0x22, 0xad, 0xa4, - 0xd0, 0x02, 0x75, 0x28, 0xd3, 0x98, 0xef, 0x4e, 0x9e, 0x50, 0x21, 0x28, 0x27, 0x23, 0x5b, 0x5d, - 0x6e, 0x5f, 0x8e, 0x34, 0x2b, 0x89, 0xd2, 0xb8, 0xac, 0x1c, 0xf0, 0x04, 0x38, 0xdb, 0x68, 0x17, - 0x27, 0x7f, 0xf8, 0x00, 0x19, 0xa9, 0x84, 0x62, 0x5a, 0xc8, 0x1d, 0xfa, 0x10, 0x42, 0xa5, 0x85, - 0xc4, 0x94, 0xe4, 0x1b, 0x5c, 0x92, 0xd8, 0x3f, 0xf5, 0xce, 0xfa, 0xd9, 0xa0, 0xae, 0x4d, 0x71, - 0x49, 0xd0, 0x47, 0x30, 0x94, 0x84, 0x63, 0xcd, 0x5e, 0x91, 0xbc, 0xc2, 0x7a, 0x1d, 0xb7, 0x2c, - 0x26, 0x6c, 0x8a, 0x73, 0xac, 0xd7, 0xe8, 0x02, 0x8e, 0x29, 0xd3, 0xb9, 0x58, 0xfe, 0x44, 0x56, - 0x3a, 0x2f, 0x98, 0x24, 0x2b, 0xd3, 0x3f, 0x0e, 0x2c, 0x16, 0x51, 0xa6, 0x67, 0x76, 0xe9, 0xeb, - 0x66, 0x05, 0x5d, 0xc3, 0xa9, 0xd9, 0x81, 0xb9, 0x26, 0x72, 0x83, 0x35, 0xf9, 0xfb, 0x5e, 0x46, - 0x54, 0xdc, 0x3e, 0x6d, 0x9d, 0xf5, 0xb3, 0xc7, 0x94, 0xe9, 0xcb, 0x06, 0xf6, 0x66, 0x1b, 0x46, - 0x94, 0xe1, 0x47, 0x79, 0x2e, 0xf7, 0x33, 0xc5, 0x1d, 0xc7, 0x8f, 0xf2, 0x83, 0x39, 0x3f, 0x86, - 0x77, 0x28, 0xcf, 0x2b, 0x29, 0xec, 0x19, 0x76, 0x8c, 0x9e, 0x85, 0x0d, 0x29, 0x9f, 0xbb, 0xaa, - 0x99, 0xe3, 0x79, 0xd0, 0xf3, 0x22, 0xff, 0x79, 0xd0, 0xeb, 0x46, 0xbd, 0x2c, 0x30, 0xb0, 0xe4, - 0x77, 0x1f, 0xfa, 0xd7, 0x4c, 0x3f, 0x13, 0x65, 0xc9, 0x34, 0x3a, 0x02, 0x9f, 0x15, 0xb1, 0x67, - 0xb7, 0xfa, 0xac, 0x40, 0x31, 0x74, 0xd5, 0xd6, 0x52, 0xb2, 0xd2, 0x85, 0x59, 0x93, 0x22, 0x04, - 0xc1, 0x52, 0x14, 0x3b, 0xab, 0x56, 0x98, 0xd9, 0x18, 0x9d, 0x43, 0x07, 0x6f, 0xf5, 0x5a, 0x48, - 0xab, 0xcb, 0x60, 0x7c, 0x9c, 0xba, 0x2b, 0x4c, 0x5d, 0xf7, 0x4b, 0xbb, 0x96, 0xd5, 0x18, 0x34, - 0x86, 0xfe, 0xca, 0xd6, 0x35, 0x91, 0x71, 0xfb, 0x3f, 0x36, 0xbc, 0x86, 0xa1, 0xc7, 0x00, 0x15, - 0x96, 0x64, 0xa3, 0x73, 0x56, 0xa8, 0xb8, 0x63, 0xf5, 0xeb, 0xbb, 0xca, 0x4d, 0xa1, 0xd0, 0x07, - 0xd0, 0x37, 0x44, 0x72, 0xc5, 0xee, 0x49, 0xdc, 0x3d, 0xf5, 0xce, 0x5a, 0x59, 0xcf, 0x14, 0x6e, - 0xd9, 0x3d, 0x41, 0x5f, 0xc1, 0x91, 0x62, 0x74, 0x83, 0xf5, 0x56, 0x92, 0x5c, 0xef, 0x2a, 0x62, - 0x25, 0x3a, 0x1a, 0xbf, 0xdf, 0x1c, 0x7a, 0xdb, 0xac, 0x2e, 0x76, 0x15, 0xc9, 0x86, 0xea, 0x30, - 0x4d, 0x7e, 0xf1, 0x20, 0x3c, 0x64, 0x65, 0x04, 0xb0, 0x96, 0xf2, 0x9c, 0x00, 0x26, 0x46, 0xc7, - 0xd0, 0x26, 0x25, 0x66, 0xbc, 0x16, 0xcb, 0x25, 0x28, 0x85, 0xa0, 0xc0, 0x9a, 0x58, 0xa9, 0x06, - 0xe3, 0x93, 0xd4, 0xf9, 0x39, 0x6d, 0xfc, 0x9c, 0x2e, 0x1a, 0x3f, 0x67, 0x16, 0x87, 0x4e, 0xa0, - 0x67, 0x2c, 0x7e, 0x2f, 0x36, 0xc4, 0x0a, 0x19, 0x66, 0xfb, 0x3c, 0x49, 0x00, 0xae, 0x7e, 0x66, - 0xfa, 0x56, 0x63, 0xbd, 0x55, 0xe6, 0xbc, 0x57, 0x98, 0x6f, 0x1d, 0x89, 0x76, 0xe6, 0x92, 0x64, - 0x01, 0x9d, 0x89, 0xc4, 0x9b, 0xd5, 0xfa, 0x41, 0x8e, 0x9f, 0xc3, 0x50, 0x63, 0x49, 0x89, 0xce, - 0x9d, 0xac, 0x96, 0xeb, 0x60, 0xfc, 0x6e, 0xa3, 0xc2, 0xde, 0x0c, 0x59, 0xe8, 0x70, 0x2e, 0x4b, - 0x7e, 0xf5, 0xa1, 0xb5, 0xc0, 0xf4, 0xc1, 0x9e, 0xce, 0x36, 0xfe, 0xde, 0x36, 0xff, 0x38, 0xa3, - 0xf5, 0xbf, 0xce, 0x30, 0x76, 0x2b, 0x89, 0x52, 0x98, 0x36, 0x83, 0x37, 0xa9, 0x79, 0xc8, 0x75, - 0xe8, 0x2e, 0xb7, 0x6d, 0x2f, 0x77, 0x50, 0xd7, 0xec, 0xfd, 0x9e, 0x43, 0x47, 0x63, 0x4a, 0x89, - 0xb4, 0x2f, 0xe4, 0x5f, 0xdd, 0xe7, 0x30, 0x0f, 0xb8, 0xa1, 0xfb, 0x16, 0x6e, 0x78, 0x09, 0xc1, - 0x9d, 0x22, 0x12, 0xbd, 0x07, 0x6d, 0xca, 0xf3, 0xfd, 0x93, 0x09, 0x28, 0xbf, 0x29, 0xf6, 0x0a, - 0xf9, 0x0f, 0x39, 0xa3, 0x75, 0xe8, 0x8c, 0x27, 0x30, 0xa0, 0x3c, 0xdf, 0x2a, 0xf3, 0xf6, 0x4b, - 0x52, 0xff, 0x26, 0x40, 0xf9, 0x5d, 0x5d, 0x49, 0xbe, 0x01, 0x70, 0x3f, 0xc2, 0x5c, 0x08, 0x8e, - 0xbe, 0x00, 0x38, 0xf8, 0x07, 0x3c, 0x3b, 0x25, 0x6a, 0xf8, 0xbe, 0xfe, 0x0d, 0x26, 0xc1, 0x6f, - 0x7f, 0x9e, 0x7b, 0xd9, 0x01, 0xf6, 0xe9, 0xa4, 0xe9, 0x63, 0xd8, 0xa3, 0x01, 0x74, 0xef, 0xa6, - 0xdf, 0x4e, 0x67, 0xdf, 0x4f, 0xa3, 0x47, 0x08, 0xa0, 0xf3, 0x6c, 0xf6, 0xe2, 0xc5, 0xcd, 0x22, - 0xf2, 0x50, 0x0f, 0x82, 0xc9, 0x77, 0xb3, 0x49, 0xe4, 0x9b, 0x68, 0x91, 0x5d, 0x5d, 0x45, 0x2d, - 0xd4, 0x85, 0xd6, 0xe2, 0xf2, 0x3a, 0x0a, 0x9e, 0x9e, 0xc3, 0xf0, 0x0d, 0x4d, 0x0c, 0x66, 0x3a, - 0x9b, 0x5e, 0x45, 0x8f, 0x0c, 0x66, 0x7e, 0x3d, 0x77, 0x0d, 0x7e, 0xf8, 0xec, 0xe2, 0xcb, 0xc8, - 0x9f, 0x5c, 0xfc, 0x68, 0x88, 0x71, 0xbc, 0x4c, 0x57, 0xa2, 0x1c, 0xb9, 0xf0, 0x13, 0x21, 0xe9, - 0xc8, 0xd1, 0x75, 0xbf, 0xf9, 0x88, 0x8a, 0x3a, 0xaf, 0x96, 0xcb, 0x8e, 0x2d, 0x7d, 0xfa, 0x57, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x11, 0x19, 0x40, 0xb8, 0x06, 0x06, 0x00, 0x00, + // 835 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0x4f, 0x8f, 0xe3, 0x34, + 0x1c, 0xdd, 0xa4, 0xe9, 0xbf, 0x5f, 0xdb, 0x21, 0x78, 0x07, 0x29, 0x1a, 0xb4, 0xda, 0x21, 0x48, + 0x68, 0xb4, 0x1a, 0xda, 0x51, 0x11, 0x08, 0x24, 0x2e, 0xd3, 0x65, 0x18, 0xcd, 0xc0, 0xb6, 0x55, + 0xa6, 0x23, 0x10, 0x97, 0xc8, 0x6d, 0xbc, 0xae, 0xc1, 0x89, 0x23, 0xdb, 0x5d, 0xd1, 0x39, 0x73, + 0xe2, 0xc4, 0x97, 0xe0, 0xca, 0xc7, 0xe0, 0x73, 0x21, 0xdb, 0x49, 0xb7, 0x0b, 0x05, 0xb1, 0x37, + 0xff, 0x5e, 0x9e, 0xed, 0xf7, 0x7b, 0x7e, 0x76, 0xa0, 0xaf, 0xd6, 0x58, 0x92, 0x6c, 0x58, 0x4a, + 0xa1, 0x05, 0x6a, 0x51, 0xa6, 0x31, 0xdf, 0x9e, 0x3c, 0xa5, 0x42, 0x50, 0x4e, 0x46, 0x16, 0x5d, + 0x6e, 0x5e, 0x8e, 0x34, 0xcb, 0x89, 0xd2, 0x38, 0x2f, 0x1d, 0xf1, 0x04, 0x38, 0x2b, 0xb4, 0x1b, + 0xc7, 0x7f, 0xf8, 0x00, 0x09, 0x29, 0x85, 0x62, 0x5a, 0xc8, 0x2d, 0xfa, 0x00, 0xfa, 0x4a, 0x0b, + 0x89, 0x29, 0x49, 0x0b, 0x9c, 0x93, 0xc8, 0x3f, 0xf5, 0xce, 0xba, 0x49, 0xaf, 0xc2, 0xa6, 0x38, + 0x27, 0xe8, 0x43, 0x18, 0x48, 0xc2, 0xb1, 0x66, 0xaf, 0x48, 0x5a, 0x62, 0xbd, 0x8e, 0x1a, 0x96, + 0xd3, 0xaf, 0xc1, 0x39, 0xd6, 0x6b, 0x74, 0x01, 0xc7, 0x94, 0xe9, 0x54, 0x2c, 0x7f, 0x24, 0x2b, + 0x9d, 0x66, 0x4c, 0x92, 0x95, 0x59, 0x3f, 0x0a, 0x2c, 0x17, 0x51, 0xa6, 0x67, 0xf6, 0xd3, 0x57, + 0xf5, 0x17, 0x74, 0x0d, 0xa7, 0x66, 0x06, 0xe6, 0x9a, 0xc8, 0x02, 0x6b, 0xf2, 0xf7, 0xb9, 0x8c, + 0xa8, 0xa8, 0x79, 0xda, 0x38, 0xeb, 0x26, 0x4f, 0x28, 0xd3, 0x97, 0x35, 0xed, 0xcd, 0x65, 0x18, + 0x51, 0x46, 0x1f, 0xe5, 0xa9, 0xdc, 0xf5, 0x14, 0xb5, 0x9c, 0x3e, 0xca, 0xf7, 0xfa, 0xfc, 0x08, + 0xde, 0xa1, 0x3c, 0x2d, 0xa5, 0xb0, 0x7b, 0xd8, 0x36, 0x3a, 0x96, 0x36, 0xa0, 0x7c, 0xee, 0x50, + 0xd3, 0xc7, 0x6d, 0xd0, 0xf1, 0x42, 0xff, 0x36, 0xe8, 0xb4, 0xc3, 0x4e, 0x12, 0x18, 0x5a, 0xfc, + 0xbb, 0x0f, 0xdd, 0x6b, 0xa6, 0x9f, 0x8b, 0x3c, 0x67, 0x1a, 0x1d, 0x81, 0xcf, 0xb2, 0xc8, 0xb3, + 0x53, 0x7d, 0x96, 0xa1, 0x08, 0xda, 0x6a, 0x63, 0x25, 0x59, 0xeb, 0xfa, 0x49, 0x5d, 0x22, 0x04, + 0xc1, 0x52, 0x64, 0x5b, 0xeb, 0x56, 0x3f, 0xb1, 0x63, 0x74, 0x0e, 0x2d, 0xbc, 0xd1, 0x6b, 0x21, + 0xad, 0x2f, 0xbd, 0xf1, 0xf1, 0xd0, 0x1d, 0xe1, 0xd0, 0xad, 0x7e, 0x69, 0xbf, 0x25, 0x15, 0x07, + 0x8d, 0xa1, 0xbb, 0xb2, 0xb8, 0x26, 0x32, 0x6a, 0xfe, 0xc7, 0x84, 0xd7, 0x34, 0xf4, 0x04, 0xa0, + 0xc4, 0x92, 0x14, 0x3a, 0x65, 0x99, 0x8a, 0x5a, 0xd6, 0xbf, 0xae, 0x43, 0x6e, 0x32, 0x85, 0xde, + 0x87, 0xae, 0x11, 0x92, 0x2a, 0xf6, 0x40, 0xa2, 0xf6, 0xa9, 0x77, 0xd6, 0x48, 0x3a, 0x06, 0xb8, + 0x63, 0x0f, 0x04, 0x7d, 0x09, 0x47, 0x8a, 0xd1, 0x02, 0xeb, 0x8d, 0x24, 0xa9, 0xde, 0x96, 0xc4, + 0x5a, 0x74, 0x34, 0x7e, 0xaf, 0xde, 0xf4, 0xae, 0xfe, 0xba, 0xd8, 0x96, 0x24, 0x19, 0xa8, 0xfd, + 0x32, 0xfe, 0xc5, 0x83, 0xfe, 0xbe, 0x2a, 0x63, 0x80, 0x8d, 0x94, 0xe7, 0x0c, 0x30, 0x63, 0x74, + 0x0c, 0x4d, 0x92, 0x63, 0xc6, 0x2b, 0xb3, 0x5c, 0x81, 0x86, 0x10, 0x64, 0x58, 0x13, 0x6b, 0x55, + 0x6f, 0x7c, 0x32, 0x74, 0x79, 0x1e, 0xd6, 0x79, 0x1e, 0x2e, 0xea, 0x3c, 0x27, 0x96, 0x87, 0x4e, + 0xa0, 0x63, 0x22, 0xfe, 0x20, 0x0a, 0x62, 0x8d, 0xec, 0x27, 0xbb, 0x3a, 0x8e, 0x01, 0xae, 0x7e, + 0x66, 0xfa, 0x4e, 0x63, 0xbd, 0x51, 0x66, 0xbf, 0x57, 0x98, 0x6f, 0x9c, 0x88, 0x66, 0xe2, 0x8a, + 0x78, 0x01, 0xad, 0x89, 0xc4, 0xc5, 0x6a, 0x7d, 0x50, 0xe3, 0x67, 0x30, 0xd0, 0x58, 0x52, 0xa2, + 0x53, 0x67, 0xab, 0xd5, 0xda, 0x1b, 0xbf, 0x5b, 0xbb, 0xb0, 0x0b, 0x43, 0xd2, 0x77, 0x3c, 0x57, + 0xc5, 0xbf, 0xfa, 0xd0, 0x58, 0x60, 0x7a, 0x70, 0x4d, 0x17, 0x1b, 0x7f, 0x17, 0x9b, 0x7f, 0xec, + 0xd1, 0xf8, 0x5f, 0x7b, 0x98, 0xb8, 0xe5, 0x44, 0x29, 0x4c, 0xeb, 0xc6, 0xeb, 0xd2, 0x5c, 0xe4, + 0x6a, 0xe8, 0x0e, 0xb7, 0x69, 0x0f, 0xb7, 0x57, 0x61, 0xf6, 0x7c, 0xcf, 0xa1, 0xa5, 0x31, 0xa5, + 0x44, 0xda, 0x1b, 0xf2, 0xaf, 0xe9, 0x73, 0x9c, 0x03, 0x69, 0x68, 0xbf, 0x45, 0x1a, 0x5e, 0x42, + 0x70, 0xaf, 0x88, 0x44, 0x8f, 0xa1, 0x49, 0x79, 0xba, 0xbb, 0x32, 0x01, 0xe5, 0x37, 0xd9, 0xce, + 0x21, 0xff, 0x50, 0x32, 0x1a, 0xfb, 0xc9, 0x78, 0x0a, 0x3d, 0xca, 0xd3, 0x8d, 0x32, 0x77, 0x3f, + 0x27, 0xd5, 0x6b, 0x02, 0x94, 0xdf, 0x57, 0x48, 0xfc, 0x35, 0x80, 0x7b, 0x11, 0xe6, 0x42, 0x70, + 0xf4, 0x39, 0xc0, 0xde, 0x3b, 0xe0, 0xd9, 0x2e, 0x51, 0xad, 0xf7, 0xf5, 0x6b, 0x30, 0x09, 0x7e, + 0xfb, 0xf3, 0xdc, 0x4b, 0xf6, 0xb8, 0xf1, 0x2d, 0x3c, 0x9e, 0x63, 0xca, 0x0a, 0xac, 0x99, 0x28, + 0xe6, 0x58, 0xe2, 0x9c, 0xec, 0xae, 0x13, 0x25, 0xa9, 0x16, 0x3f, 0x91, 0xa2, 0xea, 0xa1, 0x6b, + 0x90, 0x85, 0x01, 0x8c, 0x68, 0xce, 0xea, 0x88, 0x34, 0x13, 0x57, 0x3c, 0x9b, 0xd4, 0x9a, 0x8c, + 0x13, 0xa8, 0x07, 0xed, 0xfb, 0xe9, 0x37, 0xd3, 0xd9, 0x77, 0xd3, 0xf0, 0x11, 0x02, 0x68, 0x3d, + 0x9f, 0xbd, 0x78, 0x71, 0xb3, 0x08, 0x3d, 0xd4, 0x81, 0x60, 0xf2, 0xed, 0x6c, 0x12, 0xfa, 0x66, + 0xb4, 0x48, 0xae, 0xae, 0xc2, 0x06, 0x6a, 0x43, 0x63, 0x71, 0x79, 0x1d, 0x06, 0xcf, 0xce, 0x61, + 0xf0, 0x86, 0xbf, 0x86, 0x33, 0x9d, 0x4d, 0xaf, 0xc2, 0x47, 0x86, 0x33, 0xbf, 0x9e, 0xbb, 0x05, + 0xbe, 0xff, 0xf4, 0xe2, 0x8b, 0xd0, 0x9f, 0x5c, 0xfc, 0x60, 0x9a, 0xe4, 0x78, 0x39, 0x5c, 0x89, + 0x7c, 0xe4, 0x86, 0x1f, 0x0b, 0x49, 0x47, 0xae, 0x75, 0xf7, 0x67, 0x18, 0x51, 0x51, 0xd5, 0xe5, + 0x72, 0xd9, 0xb2, 0xd0, 0x27, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0x7d, 0xe3, 0xe3, 0xc9, 0x52, + 0x06, 0x00, 0x00, } diff --git a/proto/ref.proto b/proto/ref.proto index 8e99267fa24318f2d9b95d22570367741a916371..1943b83c43cae716fc4cf4fe2ec4d5e0cbbdee0b 100644 --- a/proto/ref.proto +++ b/proto/ref.proto @@ -167,6 +167,11 @@ message FindLocalBranchesRequest { UPDATED_DESC = 2; } SortBy sort_by = 2; + // The page token is the branch name, with the `refs/heads/` prefix, for + // example "refs/heads/master". After the first branch name is encountered + // which lexicographically exceeds the page token, it will be the first result + // send as part of the response. + PaginationParameter pagination_params = 3; } message FindLocalBranchesResponse { diff --git a/proto/shared.proto b/proto/shared.proto index 59076a441814d90dea81ebab4a0f5d425fbb30f5..9f843ee68b71adffccaceb5eaf66a1bf51da19a0 100644 --- a/proto/shared.proto +++ b/proto/shared.proto @@ -103,3 +103,19 @@ message User { message ObjectPool { Repository repository = 1 [(gitaly.repository)=true]; } + +message PaginationParameter { + // Instructs pagination to start sending results after the provided page + // token appears. A page token allows for a generic pattern to uniquely + // identify a result or 'page'. Each paginated RPC may interpret a page + // token differently. + string page_token = 1; + // When fully consuming the response the client will receive _at most_ + // `limit` number of resulting objects. Note that the number of response + // messages might be much lower, as some response messages already send + // multiple objects per message. + // When the limit is smaller than 0, it will be normalized to 2147483647 + // on the server side. When limit is not set, it defaults to 0, and no + // results are send in the response. + int32 limit = 2; +} diff --git a/ruby/proto/gitaly/ref_pb.rb b/ruby/proto/gitaly/ref_pb.rb index 21521ed29d3e8859731fe1b99c14ece647825c2b..adac1a6dfb2152858bcec12fdd720e9bb770c56a 100644 --- a/ruby/proto/gitaly/ref_pb.rb +++ b/ruby/proto/gitaly/ref_pb.rb @@ -45,6 +45,7 @@ Google::Protobuf::DescriptorPool.generated_pool.build do add_message "gitaly.FindLocalBranchesRequest" do optional :repository, :message, 1, "gitaly.Repository" optional :sort_by, :enum, 2, "gitaly.FindLocalBranchesRequest.SortBy" + optional :pagination_params, :message, 3, "gitaly.PaginationParameter" end add_enum "gitaly.FindLocalBranchesRequest.SortBy" do value :NAME, 0 diff --git a/ruby/proto/gitaly/shared_pb.rb b/ruby/proto/gitaly/shared_pb.rb index 00c318cd2f98507579dbc1ccd4bba1fceedca9dd..2581101d7d8a9f96771ac703733f541fea7bd1fe 100644 --- a/ruby/proto/gitaly/shared_pb.rb +++ b/ruby/proto/gitaly/shared_pb.rb @@ -55,6 +55,10 @@ Google::Protobuf::DescriptorPool.generated_pool.build do add_message "gitaly.ObjectPool" do optional :repository, :message, 1, "gitaly.Repository" end + add_message "gitaly.PaginationParameter" do + optional :page_token, :string, 1 + optional :limit, :int32, 2 + end add_enum "gitaly.ObjectType" do value :UNKNOWN, 0 value :COMMIT, 1 @@ -78,6 +82,7 @@ module Gitaly Tag = Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.Tag").msgclass User = Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.User").msgclass ObjectPool = Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.ObjectPool").msgclass + PaginationParameter = Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.PaginationParameter").msgclass ObjectType = Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.ObjectType").enummodule SignatureType = Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.SignatureType").enummodule end