diff options
author | James Fargher <proglottis@gmail.com> | 2021-07-05 04:27:49 +0300 |
---|---|---|
committer | James Fargher <proglottis@gmail.com> | 2021-07-05 04:27:49 +0300 |
commit | c9f804dd7049915ab276d8897d0e9f938cf8b362 (patch) | |
tree | 1eebfb999906f5073ce0acc0f3f5ef378276397d | |
parent | 99fd5bd82fe3ea84ac19c8f2a2dfdb419227c334 (diff) | |
parent | c3dfb4ecb6b4f439ea2ed7685e9e46a7a31ae955 (diff) |
Merge branch 'pks-list-commits' into 'master'
Introduce two new RPCs to list commits
Closes #3600
See merge request gitlab-org/gitaly!3628
22 files changed, 3058 insertions, 1083 deletions
diff --git a/internal/git/catfile/commit.go b/internal/git/catfile/commit.go index 0444dad5f..dc6a4dc3e 100644 --- a/internal/git/catfile/commit.go +++ b/internal/git/catfile/commit.go @@ -25,7 +25,7 @@ func GetCommit(ctx context.Context, c Batch, revision git.Revision) (*gitalypb.G return nil, err } - return parseRawCommit(obj.Reader, &obj.ObjectInfo) + return ParseCommit(obj.Reader, &obj.ObjectInfo) } // GetCommitWithTrailers looks up a commit by revision using an existing Batch instance, and @@ -81,7 +81,8 @@ func GetCommitMessage(ctx context.Context, c Batch, repo repository.GitRepo, rev return body, nil } -func parseRawCommit(r io.Reader, info *ObjectInfo) (*gitalypb.GitCommit, error) { +// ParseCommit parses the commit data from the Reader. +func ParseCommit(r io.Reader, info *ObjectInfo) (*gitalypb.GitCommit, error) { header, body, err := splitRawCommit(r) if err != nil { return nil, err diff --git a/internal/git/catfile/commit_test.go b/internal/git/catfile/commit_test.go index a46973a1a..134e62570 100644 --- a/internal/git/catfile/commit_test.go +++ b/internal/git/catfile/commit_test.go @@ -12,7 +12,7 @@ import ( "google.golang.org/grpc/metadata" ) -func TestParseRawCommit(t *testing.T) { +func TestParseCommit(t *testing.T) { info := &ObjectInfo{ Oid: "a984dfa4dee018c6d5f5f57ffec0d0e22763df16", Type: "commit", @@ -98,7 +98,7 @@ func TestParseRawCommit(t *testing.T) { for _, tc := range testCases { t.Run(tc.desc, func(t *testing.T) { info.Size = int64(len(tc.in)) - out, err := parseRawCommit(bytes.NewBuffer(tc.in), info) + out, err := ParseCommit(bytes.NewBuffer(tc.in), info) require.NoError(t, err, "parse error") require.Equal(t, tc.out, out) }) diff --git a/internal/git/gitpipe/catfile_info.go b/internal/git/gitpipe/catfile_info.go index 5d928ef51..8a139989e 100644 --- a/internal/git/gitpipe/catfile_info.go +++ b/internal/git/gitpipe/catfile_info.go @@ -2,6 +2,7 @@ package gitpipe import ( "bufio" + "bytes" "context" "errors" "fmt" @@ -92,6 +93,7 @@ func CatfileInfoAllObjects(ctx context.Context, repo *localrepo.Repo) CatfileInf } } + var stderr bytes.Buffer cmd, err := repo.Exec(ctx, git.SubCmd{ Name: "cat-file", Flags: []git.Option{ @@ -100,7 +102,7 @@ func CatfileInfoAllObjects(ctx context.Context, repo *localrepo.Repo) CatfileInf git.Flag{Name: "--buffer"}, git.Flag{Name: "--unordered"}, }, - }) + }, git.WithStderr(&stderr)) if err != nil { sendResult(CatfileInfoResult{ err: fmt.Errorf("spawning cat-file failed: %w", err), @@ -131,7 +133,7 @@ func CatfileInfoAllObjects(ctx context.Context, repo *localrepo.Repo) CatfileInf if err := cmd.Wait(); err != nil { sendResult(CatfileInfoResult{ - err: fmt.Errorf("cat-file failed: %w", err), + err: fmt.Errorf("cat-file failed: %w, stderr: %q", err, stderr), }) return } diff --git a/internal/git/gitpipe/pipeline_test.go b/internal/git/gitpipe/pipeline_test.go index 75b3396c3..1a0f8aea1 100644 --- a/internal/git/gitpipe/pipeline_test.go +++ b/internal/git/gitpipe/pipeline_test.go @@ -26,6 +26,7 @@ func TestPipeline(t *testing.T) { for _, tc := range []struct { desc string revisions []string + revlistOptions []RevlistOption revlistFilter func(RevlistResult) bool catfileInfoFilter func(CatfileInfoResult) bool expectedResults []CatfileObjectResult @@ -36,17 +37,30 @@ func TestPipeline(t *testing.T) { revisions: []string{ lfsPointer1, }, + revlistOptions: []RevlistOption{ + WithObjects(), + }, expectedResults: []CatfileObjectResult{ {ObjectInfo: &catfile.ObjectInfo{Oid: lfsPointer1, Type: "blob", Size: 133}}, }, }, { + desc: "single blob without objects", + revisions: []string{ + lfsPointer1, + }, + expectedResults: nil, + }, + { desc: "multiple blobs", revisions: []string{ lfsPointer1, lfsPointer2, lfsPointer3, }, + revlistOptions: []RevlistOption{ + WithObjects(), + }, expectedResults: []CatfileObjectResult{ {ObjectInfo: &catfile.ObjectInfo{Oid: lfsPointer1, Type: "blob", Size: 133}}, {ObjectInfo: &catfile.ObjectInfo{Oid: lfsPointer2, Type: "blob", Size: 127}}, @@ -60,6 +74,9 @@ func TestPipeline(t *testing.T) { lfsPointer2, lfsPointer3, }, + revlistOptions: []RevlistOption{ + WithObjects(), + }, revlistFilter: func(r RevlistResult) bool { return r.OID == lfsPointer2 }, @@ -72,16 +89,29 @@ func TestPipeline(t *testing.T) { revisions: []string{ "b95c0fad32f4361845f91d9ce4c1721b52b82793", }, + revlistOptions: []RevlistOption{ + WithObjects(), + }, expectedResults: []CatfileObjectResult{ {ObjectInfo: &catfile.ObjectInfo{Oid: "b95c0fad32f4361845f91d9ce4c1721b52b82793", Type: "tree", Size: 43}}, {ObjectInfo: &catfile.ObjectInfo{Oid: "93e123ac8a3e6a0b600953d7598af629dec7b735", Type: "blob", Size: 59}, ObjectName: []byte("branch-test.txt")}, }, }, { + desc: "tree without objects", + revisions: []string{ + "b95c0fad32f4361845f91d9ce4c1721b52b82793", + }, + expectedResults: nil, + }, + { desc: "tree with blob filter", revisions: []string{ "b95c0fad32f4361845f91d9ce4c1721b52b82793", }, + revlistOptions: []RevlistOption{ + WithObjects(), + }, catfileInfoFilter: func(r CatfileInfoResult) bool { return r.ObjectInfo.Type == "blob" }, @@ -95,6 +125,9 @@ func TestPipeline(t *testing.T) { "^master~", "master", }, + revlistOptions: []RevlistOption{ + WithObjects(), + }, expectedResults: []CatfileObjectResult{ {ObjectInfo: &catfile.ObjectInfo{Oid: "1e292f8fedd741b75372e19097c76d327140c312", Type: "commit", Size: 388}}, {ObjectInfo: &catfile.ObjectInfo{Oid: "07f8147e8e73aab6c935c296e8cdc5194dee729b", Type: "tree", Size: 780}}, @@ -106,10 +139,24 @@ func TestPipeline(t *testing.T) { }, }, { + desc: "revision range without objects", + revisions: []string{ + "^master~", + "master", + }, + expectedResults: []CatfileObjectResult{ + {ObjectInfo: &catfile.ObjectInfo{Oid: "1e292f8fedd741b75372e19097c76d327140c312", Type: "commit", Size: 388}}, + {ObjectInfo: &catfile.ObjectInfo{Oid: "c1c67abbaf91f624347bb3ae96eabe3a1b742478", Type: "commit", Size: 326}}, + }, + }, + { desc: "--all with all filters", revisions: []string{ "--all", }, + revlistOptions: []RevlistOption{ + WithObjects(), + }, revlistFilter: func(r RevlistResult) bool { // Let through two LFS pointers and a tree. return r.OID == "b95c0fad32f4361845f91d9ce4c1721b52b82793" || @@ -166,7 +213,7 @@ func TestPipeline(t *testing.T) { catfileProcess, err := catfileCache.BatchProcess(ctx, repo) require.NoError(t, err) - revlistIter := Revlist(ctx, repo, tc.revisions) + revlistIter := Revlist(ctx, repo, tc.revisions, tc.revlistOptions...) if tc.revlistFilter != nil { revlistIter = RevlistFilter(ctx, revlistIter, tc.revlistFilter) } @@ -258,7 +305,7 @@ func TestPipeline(t *testing.T) { catfileProcess, err := catfileCache.BatchProcess(ctx, repo) require.NoError(t, err) - revlistIter := Revlist(ctx, repo, []string{"--all"}) + revlistIter := Revlist(ctx, repo, []string{"--all"}, WithObjects()) catfileInfoIter := CatfileInfo(ctx, catfileProcess, revlistIter) catfileObjectIter := CatfileObject(ctx, catfileProcess, catfileInfoIter) diff --git a/internal/git/gitpipe/revlist.go b/internal/git/gitpipe/revlist.go index f13b3336b..0c020fe86 100644 --- a/internal/git/gitpipe/revlist.go +++ b/internal/git/gitpipe/revlist.go @@ -5,6 +5,7 @@ import ( "bytes" "context" "fmt" + "time" "gitlab.com/gitlab-org/gitaly/v14/internal/git" "gitlab.com/gitlab-org/gitaly/v14/internal/git/localrepo" @@ -40,13 +41,28 @@ const ( // revlistConfig is configuration for the revlist pipeline step. type revlistConfig struct { - blobLimit int - objectType ObjectType + blobLimit int + objects bool + objectType ObjectType + order Order + maxParents uint + disabledWalk bool + firstParent bool + before, after time.Time + author []byte } // RevlistOption is an option for the revlist pipeline step. type RevlistOption func(cfg *revlistConfig) +// WithObjects will cause git-rev-list(1) to not only list commits, but also objects referenced by +// those commits. +func WithObjects() RevlistOption { + return func(cfg *revlistConfig) { + cfg.objects = true + } +} + // WithBlobLimit sets up a size limit for blobs. Only blobs whose size is smaller than this limit // will be returned by the pipeline step. func WithBlobLimit(limit int) RevlistOption { @@ -65,6 +81,75 @@ func WithObjectTypeFilter(t ObjectType) RevlistOption { } } +// Order is the order in which objects are printed. +type Order int + +const ( + // OrderNone is the default ordering, which is reverse chronological order. + OrderNone = Order(iota) + // OrderTopo will cause no parents to be shown before all of its children are shown. + // Furthermore, multiple lines of history will not be intermixed. + OrderTopo + // OrderDate order will cause no parents to be shown before all of its children are shown. + // Otherwise, commits are shown in commit timestamp order. This can cause history to be + // shown intermixed. + OrderDate +) + +// WithOrder will change the ordering of how objects are listed. +func WithOrder(o Order) RevlistOption { + return func(cfg *revlistConfig) { + cfg.order = o + } +} + +// WithMaxParents will cause git-rev-list(1) to list only commits with at most p parents. If set to +// 1, then merge commits will be skipped. While the zero-value for git-rev-list(1) would cause it to +// only print the root commit, we use it as the default value and simply print all commits in that +// case. +func WithMaxParents(p uint) RevlistOption { + return func(cfg *revlistConfig) { + cfg.maxParents = p + } +} + +// WithDisabledWalk will cause git-rev-list(1) to not do a graph walk beyond the immediate specified +// tips. +func WithDisabledWalk() RevlistOption { + return func(cfg *revlistConfig) { + cfg.disabledWalk = true + } +} + +// WithFirstParent will cause git-rev-list(1) to only walk down the first-parent chain of commits. +func WithFirstParent() RevlistOption { + return func(cfg *revlistConfig) { + cfg.firstParent = true + } +} + +// WithBefore will cause git-rev-list(1) to only show commits older than the specified time. +func WithBefore(t time.Time) RevlistOption { + return func(cfg *revlistConfig) { + cfg.before = t + } +} + +// WithAfter will cause git-rev-list(1) to only show commits newer than the specified time. +func WithAfter(t time.Time) RevlistOption { + return func(cfg *revlistConfig) { + cfg.after = t + } +} + +// WithAuthor will cause git-rev-list(1) to only show commits created by an author matching the +// given pattern. +func WithAuthor(author []byte) RevlistOption { + return func(cfg *revlistConfig) { + cfg.author = author + } +} + // Revlist runs git-rev-list(1) with objects and object names enabled. The returned channel will // contain all object IDs listed by this command. Cancelling the context will cause the pipeline to // be cancelled, too. @@ -92,16 +177,22 @@ func Revlist( } } - flags := []git.Option{ - git.Flag{Name: "--in-commit-order"}, - git.Flag{Name: "--objects"}, - git.Flag{Name: "--object-names"}, + flags := []git.Option{} + + if cfg.objects { + flags = append(flags, + git.Flag{Name: "--in-commit-order"}, + git.Flag{Name: "--objects"}, + git.Flag{Name: "--object-names"}, + ) } + if cfg.blobLimit > 0 { flags = append(flags, git.Flag{ Name: fmt.Sprintf("--filter=blob:limit=%d", cfg.blobLimit), }) } + if cfg.objectType != "" { flags = append(flags, git.Flag{Name: fmt.Sprintf("--filter=object:type=%s", cfg.objectType)}, @@ -109,6 +200,47 @@ func Revlist( ) } + switch cfg.order { + case OrderNone: + // Default order, nothing to do. + case OrderTopo: + flags = append(flags, git.Flag{Name: "--topo-order"}) + case OrderDate: + flags = append(flags, git.Flag{Name: "--date-order"}) + } + + if cfg.maxParents > 0 { + flags = append(flags, git.Flag{ + Name: fmt.Sprintf("--max-parents=%d", cfg.maxParents)}, + ) + } + + if cfg.disabledWalk { + flags = append(flags, git.Flag{Name: "--no-walk"}) + } + + if cfg.firstParent { + flags = append(flags, git.Flag{Name: "--first-parent"}) + } + + if !cfg.before.IsZero() { + flags = append(flags, git.Flag{ + Name: fmt.Sprintf("--before=%s", cfg.before.String()), + }) + } + + if !cfg.after.IsZero() { + flags = append(flags, git.Flag{ + Name: fmt.Sprintf("--after=%s", cfg.after.String()), + }) + } + + if len(cfg.author) > 0 { + flags = append(flags, git.Flag{ + Name: fmt.Sprintf("--author=%s", string(cfg.author)), + }) + } + revlist, err := repo.Exec(ctx, git.SubCmd{ Name: "rev-list", Flags: flags, diff --git a/internal/git/gitpipe/revlist_test.go b/internal/git/gitpipe/revlist_test.go index d808927ea..8c8ca9bd5 100644 --- a/internal/git/gitpipe/revlist_test.go +++ b/internal/git/gitpipe/revlist_test.go @@ -3,6 +3,7 @@ package gitpipe import ( "errors" "testing" + "time" "github.com/stretchr/testify/require" "gitlab.com/gitlab-org/gitaly/v14/internal/git" @@ -44,6 +45,9 @@ func TestRevlist(t *testing.T) { revisions: []string{ lfsPointer1, }, + options: []RevlistOption{ + WithObjects(), + }, expectedResults: []RevlistResult{ {OID: lfsPointer1}, }, @@ -56,6 +60,9 @@ func TestRevlist(t *testing.T) { lfsPointer3, lfsPointer4, }, + options: []RevlistOption{ + WithObjects(), + }, expectedResults: []RevlistResult{ {OID: lfsPointer1}, {OID: lfsPointer2}, @@ -64,11 +71,24 @@ func TestRevlist(t *testing.T) { }, }, { + desc: "multiple blobs without objects", + revisions: []string{ + lfsPointer1, + lfsPointer2, + lfsPointer3, + lfsPointer4, + }, + expectedResults: nil, + }, + { desc: "duplicated blob prints blob once only", revisions: []string{ lfsPointer1, lfsPointer1, }, + options: []RevlistOption{ + WithObjects(), + }, expectedResults: []RevlistResult{ {OID: lfsPointer1}, }, @@ -78,17 +98,42 @@ func TestRevlist(t *testing.T) { revisions: []string{ "b95c0fad32f4361845f91d9ce4c1721b52b82793", }, + options: []RevlistOption{ + WithObjects(), + }, expectedResults: []RevlistResult{ {OID: "b95c0fad32f4361845f91d9ce4c1721b52b82793"}, {OID: "93e123ac8a3e6a0b600953d7598af629dec7b735", ObjectName: []byte("branch-test.txt")}, }, }, { + desc: "tree without objects returns nothing", + revisions: []string{ + "b95c0fad32f4361845f91d9ce4c1721b52b82793", + }, + expectedResults: nil, + }, + { + desc: "revision without disabled walk", + revisions: []string{ + "refs/heads/master", + }, + options: []RevlistOption{ + WithDisabledWalk(), + }, + expectedResults: []RevlistResult{ + {OID: "1e292f8fedd741b75372e19097c76d327140c312"}, + }, + }, + { desc: "revision range", revisions: []string{ "^refs/heads/master~", "refs/heads/master", }, + options: []RevlistOption{ + WithObjects(), + }, expectedResults: []RevlistResult{ {OID: "1e292f8fedd741b75372e19097c76d327140c312"}, {OID: "07f8147e8e73aab6c935c296e8cdc5194dee729b"}, @@ -100,6 +145,127 @@ func TestRevlist(t *testing.T) { }, }, { + desc: "revision range without objects", + revisions: []string{ + "^refs/heads/master~", + "refs/heads/master", + }, + expectedResults: []RevlistResult{ + {OID: "1e292f8fedd741b75372e19097c76d327140c312"}, + {OID: "c1c67abbaf91f624347bb3ae96eabe3a1b742478"}, + }, + }, + { + desc: "revision range without objects with at most one parent", + revisions: []string{ + "^refs/heads/master~", + "refs/heads/master", + }, + options: []RevlistOption{ + WithMaxParents(1), + }, + expectedResults: []RevlistResult{ + {OID: "c1c67abbaf91f624347bb3ae96eabe3a1b742478"}, + }, + }, + { + desc: "revision range with topo order", + revisions: []string{ + // This is one of the smaller examples I've found which reproduces + // different sorting orders between topo- and date-sorting. Expected + // results contain the same object for this and the next test case, + // but ordering is different. + "master", + "^master~5", + "flat-path", + }, + options: []RevlistOption{ + WithOrder(OrderTopo), + }, + expectedResults: []RevlistResult{ + {OID: "1e292f8fedd741b75372e19097c76d327140c312"}, + {OID: "c1c67abbaf91f624347bb3ae96eabe3a1b742478"}, + {OID: "7975be0116940bf2ad4321f79d02a55c5f7779aa"}, + {OID: "c84ff944ff4529a70788a5e9003c2b7feae29047"}, + {OID: "60ecb67744cb56576c30214ff52294f8ce2def98"}, + {OID: "55bc176024cfa3baaceb71db584c7e5df900ea65"}, + {OID: "e63f41fe459e62e1228fcef60d7189127aeba95a"}, + {OID: "4a24d82dbca5c11c61556f3b35ca472b7463187e"}, + {OID: "b83d6e391c22777fca1ed3012fce84f633d7fed0"}, + {OID: "498214de67004b1da3d820901307bed2a68a8ef6"}, + // The following commit is sorted differently in the next testcase. + {OID: "ce369011c189f62c815f5971d096b26759bab0d1"}, + }, + }, + { + desc: "revision range with date order", + revisions: []string{ + "master", + "^master~5", + "flat-path", + }, + options: []RevlistOption{ + WithOrder(OrderDate), + }, + expectedResults: []RevlistResult{ + {OID: "1e292f8fedd741b75372e19097c76d327140c312"}, + {OID: "c1c67abbaf91f624347bb3ae96eabe3a1b742478"}, + {OID: "7975be0116940bf2ad4321f79d02a55c5f7779aa"}, + {OID: "c84ff944ff4529a70788a5e9003c2b7feae29047"}, + {OID: "60ecb67744cb56576c30214ff52294f8ce2def98"}, + {OID: "55bc176024cfa3baaceb71db584c7e5df900ea65"}, + // The following commit is sorted differently in the previous + // testcase. + {OID: "ce369011c189f62c815f5971d096b26759bab0d1"}, + {OID: "e63f41fe459e62e1228fcef60d7189127aeba95a"}, + {OID: "4a24d82dbca5c11c61556f3b35ca472b7463187e"}, + {OID: "b83d6e391c22777fca1ed3012fce84f633d7fed0"}, + {OID: "498214de67004b1da3d820901307bed2a68a8ef6"}, + }, + }, + { + desc: "revision range with dates", + revisions: []string{ + "refs/heads/master", + }, + options: []RevlistOption{ + WithBefore(time.Date(2016, 6, 30, 18, 30, 0, 0, time.UTC)), + WithAfter(time.Date(2016, 6, 30, 18, 28, 0, 0, time.UTC)), + }, + expectedResults: []RevlistResult{ + {OID: "6907208d755b60ebeacb2e9dfea74c92c3449a1f"}, + {OID: "c347ca2e140aa667b968e51ed0ffe055501fe4f4"}, + }, + }, + { + desc: "revision range with author", + revisions: []string{ + "refs/heads/master", + }, + options: []RevlistOption{ + WithAuthor([]byte("Sytse")), + }, + expectedResults: []RevlistResult{ + {OID: "e56497bb5f03a90a51293fc6d516788730953899"}, + }, + }, + { + desc: "first parent chain", + revisions: []string{ + "master", + "^master~4", + }, + options: []RevlistOption{ + WithFirstParent(), + }, + expectedResults: []RevlistResult{ + {OID: "1e292f8fedd741b75372e19097c76d327140c312"}, + {OID: "7975be0116940bf2ad4321f79d02a55c5f7779aa"}, + {OID: "60ecb67744cb56576c30214ff52294f8ce2def98"}, + {OID: "e63f41fe459e62e1228fcef60d7189127aeba95a"}, + }, + }, + { // This is a tree object with multiple blobs. We cannot directly filter // blobs given that Git will always print whatever's been provided on the // command line. While we can already fix this with Git v2.32.0 via @@ -110,6 +276,9 @@ func TestRevlist(t *testing.T) { revisions: []string{ "79d5f98270ad677c86a7e1ab2baa922958565135", }, + options: []RevlistOption{ + WithObjects(), + }, expectedResults: []RevlistResult{ {OID: "79d5f98270ad677c86a7e1ab2baa922958565135"}, {OID: "8af7f880ce38649fc49f66e3f38857bfbec3f0b7", ObjectName: []byte("feature-1.txt")}, @@ -131,6 +300,7 @@ func TestRevlist(t *testing.T) { "79d5f98270ad677c86a7e1ab2baa922958565135", }, options: []RevlistOption{ + WithObjects(), WithBlobLimit(10), }, expectedResults: []RevlistResult{ @@ -147,6 +317,7 @@ func TestRevlist(t *testing.T) { "79d5f98270ad677c86a7e1ab2baa922958565135", }, options: []RevlistOption{ + WithObjects(), WithObjectTypeFilter(ObjectTypeBlob), }, expectedResults: []RevlistResult{ @@ -168,6 +339,7 @@ func TestRevlist(t *testing.T) { "--all", }, options: []RevlistOption{ + WithObjects(), WithObjectTypeFilter(ObjectTypeTag), }, expectedResults: []RevlistResult{ @@ -183,6 +355,7 @@ func TestRevlist(t *testing.T) { "79d5f98270ad677c86a7e1ab2baa922958565135", }, options: []RevlistOption{ + WithObjects(), WithObjectTypeFilter(ObjectTypeTree), }, expectedResults: []RevlistResult{ @@ -197,6 +370,7 @@ func TestRevlist(t *testing.T) { "refs/heads/master", }, options: []RevlistOption{ + WithObjects(), WithObjectTypeFilter(ObjectTypeCommit), }, expectedResults: []RevlistResult{ @@ -211,6 +385,7 @@ func TestRevlist(t *testing.T) { "79d5f98270ad677c86a7e1ab2baa922958565135", }, options: []RevlistOption{ + WithObjects(), WithBlobLimit(10), WithObjectTypeFilter(ObjectTypeBlob), }, diff --git a/internal/git/gittest/testdata.go b/internal/git/gittest/testdata.go new file mode 100644 index 000000000..7744dc866 --- /dev/null +++ b/internal/git/gittest/testdata.go @@ -0,0 +1,310 @@ +package gittest + +import ( + "github.com/golang/protobuf/ptypes/timestamp" + "gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb" +) + +// CommitsByID is a map of GitCommit structures by their respective IDs. +var CommitsByID = map[string]*gitalypb.GitCommit{ + "0031876facac3f2b2702a0e53a26e89939a42209": &gitalypb.GitCommit{ + Id: "0031876facac3f2b2702a0e53a26e89939a42209", + Subject: []byte("Merge branch 'few-commits-4' into few-commits-2"), + Body: []byte("Merge branch 'few-commits-4' into few-commits-2\n"), + Author: ahmadSherif(1500320762), + Committer: ahmadSherif(1500320762), + ParentIds: []string{ + "bf6e164cac2dc32b1f391ca4290badcbe4ffc5fb", + "48ca272b947f49eee601639d743784a176574a09", + }, + BodySize: 48, + TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", + }, + "48ca272b947f49eee601639d743784a176574a09": &gitalypb.GitCommit{ + Id: "48ca272b947f49eee601639d743784a176574a09", + Subject: []byte("Commit #9 alternate"), + Body: []byte("Commit #9 alternate\n"), + Author: ahmadSherif(1500320271), + Committer: ahmadSherif(1500320271), + ParentIds: []string{"335bc94d5b7369b10251e612158da2e4a4aaa2a5"}, + BodySize: 20, + TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", + }, + "335bc94d5b7369b10251e612158da2e4a4aaa2a5": &gitalypb.GitCommit{ + Id: "335bc94d5b7369b10251e612158da2e4a4aaa2a5", + Subject: []byte("Commit #8 alternate"), + Body: []byte("Commit #8 alternate\n"), + Author: ahmadSherif(1500320269), + Committer: ahmadSherif(1500320269), + ParentIds: []string{"1039376155a0d507eba0ea95c29f8f5b983ea34b"}, + BodySize: 20, + TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", + }, + "bf6e164cac2dc32b1f391ca4290badcbe4ffc5fb": &gitalypb.GitCommit{ + Id: "bf6e164cac2dc32b1f391ca4290badcbe4ffc5fb", + Subject: []byte("Commit #10"), + Body: []byte("Commit #10\n"), + Author: ahmadSherif(1500320272), + Committer: ahmadSherif(1500320272), + ParentIds: []string{"9d526f87b82e2b2fd231ca44c95508e5e85624ca"}, + BodySize: 11, + TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", + }, + "9d526f87b82e2b2fd231ca44c95508e5e85624ca": &gitalypb.GitCommit{ + Id: "9d526f87b82e2b2fd231ca44c95508e5e85624ca", + Subject: []byte("Commit #9"), + Body: []byte("Commit #9\n"), + Author: ahmadSherif(1500320270), + Committer: ahmadSherif(1500320270), + ParentIds: []string{"1039376155a0d507eba0ea95c29f8f5b983ea34b"}, + BodySize: 10, + TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", + }, + "1039376155a0d507eba0ea95c29f8f5b983ea34b": &gitalypb.GitCommit{ + Id: "1039376155a0d507eba0ea95c29f8f5b983ea34b", + Subject: []byte("Commit #8"), + Body: []byte("Commit #8\n"), + Author: ahmadSherif(1500320268), + Committer: ahmadSherif(1500320268), + ParentIds: []string{"54188278422b1fa877c2e71c4e37fc6640a58ad1"}, + BodySize: 10, + TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", + }, + "54188278422b1fa877c2e71c4e37fc6640a58ad1": &gitalypb.GitCommit{ + Id: "54188278422b1fa877c2e71c4e37fc6640a58ad1", + Subject: []byte("Commit #7"), + Body: []byte("Commit #7\n"), + Author: ahmadSherif(1500320266), + Committer: ahmadSherif(1500320266), + ParentIds: []string{"8b9270332688d58e25206601900ee5618fab2390"}, + BodySize: 10, + TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", + }, + "8b9270332688d58e25206601900ee5618fab2390": &gitalypb.GitCommit{ + Id: "8b9270332688d58e25206601900ee5618fab2390", + Subject: []byte("Commit #6"), + Body: []byte("Commit #6\n"), + Author: ahmadSherif(1500320264), + Committer: ahmadSherif(1500320264), + ParentIds: []string{"f9220df47bce1530e90c189064d301bfc8ceb5ab"}, + BodySize: 10, + TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", + }, + "f9220df47bce1530e90c189064d301bfc8ceb5ab": &gitalypb.GitCommit{ + Id: "f9220df47bce1530e90c189064d301bfc8ceb5ab", + Subject: []byte("Commit #5"), + Body: []byte("Commit #5\n"), + Author: ahmadSherif(1500320262), + Committer: ahmadSherif(1500320262), + ParentIds: []string{"40d408f89c1fd26b7d02e891568f880afe06a9f8"}, + BodySize: 10, + TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", + }, + "40d408f89c1fd26b7d02e891568f880afe06a9f8": &gitalypb.GitCommit{ + Id: "40d408f89c1fd26b7d02e891568f880afe06a9f8", + Subject: []byte("Commit #4"), + Body: []byte("Commit #4\n"), + Author: ahmadSherif(1500320260), + Committer: ahmadSherif(1500320260), + ParentIds: []string{"df914c609a1e16d7d68e4a61777ff5d6f6b6fde3"}, + BodySize: 10, + TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", + }, + "df914c609a1e16d7d68e4a61777ff5d6f6b6fde3": &gitalypb.GitCommit{ + Id: "df914c609a1e16d7d68e4a61777ff5d6f6b6fde3", + Subject: []byte("Commit #3"), + Body: []byte("Commit #3\n"), + Author: ahmadSherif(1500320258), + Committer: ahmadSherif(1500320258), + ParentIds: []string{"6762605237fc246ae146ac64ecb467f71d609120"}, + BodySize: 10, + TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", + }, + "6762605237fc246ae146ac64ecb467f71d609120": &gitalypb.GitCommit{ + Id: "6762605237fc246ae146ac64ecb467f71d609120", + Subject: []byte("Commit #2"), + Body: []byte("Commit #2\n"), + Author: ahmadSherif(1500320256), + Committer: ahmadSherif(1500320256), + ParentIds: []string{"79b06233d3dc769921576771a4e8bee4b439595d"}, + BodySize: 10, + TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", + }, + "79b06233d3dc769921576771a4e8bee4b439595d": &gitalypb.GitCommit{ + Id: "79b06233d3dc769921576771a4e8bee4b439595d", + Subject: []byte("Commit #1"), + Body: []byte("Commit #1\n"), + Author: ahmadSherif(1500320254), + Committer: ahmadSherif(1500320254), + ParentIds: []string{"1a0b36b3cdad1d2ee32457c102a8c0b7056fa863"}, + BodySize: 10, + TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", + }, + "1a0b36b3cdad1d2ee32457c102a8c0b7056fa863": &gitalypb.GitCommit{ + Id: "1a0b36b3cdad1d2ee32457c102a8c0b7056fa863", + Subject: []byte("Initial commit"), + Body: []byte("Initial commit\n"), + Author: dmitriyZaporozhets(1393488198), + Committer: dmitriyZaporozhets(1393488198), + ParentIds: nil, + BodySize: 15, + TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", + }, + "304d257dcb821665ab5110318fc58a007bd104ed": &gitalypb.GitCommit{ + Id: "304d257dcb821665ab5110318fc58a007bd104ed", + Subject: []byte("Commit #11"), + Body: []byte("Commit #11\n"), + Author: ahmadSherif(1500322381), + Committer: ahmadSherif(1500322381), + ParentIds: []string{"1a0b36b3cdad1d2ee32457c102a8c0b7056fa863"}, + BodySize: 11, + TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", + }, + "1e292f8fedd741b75372e19097c76d327140c312": &gitalypb.GitCommit{ + Id: "1e292f8fedd741b75372e19097c76d327140c312", + Subject: []byte("Merge branch 'cherry-pikc-ce369011' into 'master'"), + Body: []byte("Merge branch 'cherry-pikc-ce369011' into 'master'\n\nAdd file with a _flattable_ path\n\n See merge request gitlab-org/gitlab-test!35\n"), + Author: drewBlessing(1540830087), + Committer: drewBlessing(1540830087), + ParentIds: []string{ + "79b06233d3dc769921576771a4e8bee4b439595d", + "c1c67abbaf91f624347bb3ae96eabe3a1b742478", + }, + BodySize: 388, + TreeId: "07f8147e8e73aab6c935c296e8cdc5194dee729b", + }, + "60ecb67744cb56576c30214ff52294f8ce2def98": &gitalypb.GitCommit{ + Id: "60ecb67744cb56576c30214ff52294f8ce2def98", + Subject: []byte("Merge branch 'lfs' into 'master'"), + Body: []byte("Merge branch 'lfs' into 'master'\n\nAdd LFS tracking of \"*.lfs\" to .gitattributes\n\nSee merge request gitlab-org/gitlab-test!28"), + Author: stanHu(1515740810), + Committer: stanHu(1515740810), + ParentIds: []string{ + "e63f41fe459e62e1228fcef60d7189127aeba95a", + "55bc176024cfa3baaceb71db584c7e5df900ea65", + }, + BodySize: 124, + TreeId: "7e2f26d033ee47cd0745649d1a28277c56197921", + }, + "e63f41fe459e62e1228fcef60d7189127aeba95a": &gitalypb.GitCommit{ + Id: "e63f41fe459e62e1228fcef60d7189127aeba95a", + Subject: []byte("Merge branch 'gitlab-test-usage-dev-testing-docs' into 'master'"), + Body: []byte("Merge branch 'gitlab-test-usage-dev-testing-docs' into 'master'\r\n\r\nUpdate README.md to include `Usage in testing and development`\r\n\r\nSee merge request !21"), + Author: seanMcGivern(1491906794), + Committer: seanMcGivern(1491906794), + ParentIds: []string{ + "b83d6e391c22777fca1ed3012fce84f633d7fed0", + "4a24d82dbca5c11c61556f3b35ca472b7463187e", + }, + BodySize: 154, + TreeId: "86ec18bfe87ad42a782fdabd8310f9b7ac750f51", + }, + "55bc176024cfa3baaceb71db584c7e5df900ea65": &gitalypb.GitCommit{ + Id: "55bc176024cfa3baaceb71db584c7e5df900ea65", + Subject: []byte("LFS tracks \"*.lfs\" through .gitattributes"), + Body: []byte("LFS tracks \"*.lfs\" through .gitattributes\n"), + Author: jamesEdwardsJones(1515687321), + Committer: jamesEdwardsJones(1515738427), + ParentIds: []string{ + "b83d6e391c22777fca1ed3012fce84f633d7fed0", + }, + BodySize: 42, + TreeId: "1970c07e0e1ce7fcf82edc2e3792564bd8ea3744", + }, + "4a24d82dbca5c11c61556f3b35ca472b7463187e": &gitalypb.GitCommit{ + Id: "4a24d82dbca5c11c61556f3b35ca472b7463187e", + Subject: []byte("Update README.md to include `Usage in testing and development`"), + Body: []byte("Update README.md to include `Usage in testing and development`"), + Author: lukeBennett(1491905339), + Committer: lukeBennett(1491905339), + ParentIds: []string{ + "b83d6e391c22777fca1ed3012fce84f633d7fed0", + }, + BodySize: 62, + TreeId: "86ec18bfe87ad42a782fdabd8310f9b7ac750f51", + }, + "ce369011c189f62c815f5971d096b26759bab0d1": &gitalypb.GitCommit{ + Id: "ce369011c189f62c815f5971d096b26759bab0d1", + Subject: []byte("Add file with a _flattable_ path"), + Body: []byte("Add file with a _flattable_ path\n"), + Author: alejandroRodriguez(1504382739), + Committer: alejandroRodriguez(1504397760), + ParentIds: []string{ + "913c66a37b4a45b9769037c55c2d238bd0942d2e", + }, + BodySize: 33, + TreeId: "729bb692f55d49149609dd1ceaaf1febbdec7d0d", + }, +} + +func alejandroRodriguez(ts int64) *gitalypb.CommitAuthor { + return &gitalypb.CommitAuthor{ + Name: []byte("Alejandro Rodríguez"), + Email: []byte("alejorro70@gmail.com"), + Date: ×tamp.Timestamp{Seconds: ts}, + Timezone: []byte("-0300"), + } +} + +func ahmadSherif(ts int64) *gitalypb.CommitAuthor { + return &gitalypb.CommitAuthor{ + Name: []byte("Ahmad Sherif"), + Email: []byte("ahmad+gitlab-test@gitlab.com"), + Date: ×tamp.Timestamp{Seconds: ts}, + Timezone: []byte("+0200"), + } +} + +func drewBlessing(ts int64) *gitalypb.CommitAuthor { + return &gitalypb.CommitAuthor{ + Name: []byte("Drew Blessing"), + Email: []byte("drew@blessing.io"), + Date: ×tamp.Timestamp{Seconds: ts}, + Timezone: []byte("+0000"), + } +} + +func dmitriyZaporozhets(ts int64) *gitalypb.CommitAuthor { + return &gitalypb.CommitAuthor{ + Name: []byte("Dmitriy Zaporozhets"), + Email: []byte("dmitriy.zaporozhets@gmail.com"), + Date: ×tamp.Timestamp{Seconds: ts}, + Timezone: []byte("-0800"), + } +} + +func jamesEdwardsJones(ts int64) *gitalypb.CommitAuthor { + return &gitalypb.CommitAuthor{ + Name: []byte("James Edwards-Jones"), + Email: []byte("jedwardsjones@gitlab.com"), + Date: ×tamp.Timestamp{Seconds: ts}, + Timezone: []byte("+0000"), + } +} + +func lukeBennett(ts int64) *gitalypb.CommitAuthor { + return &gitalypb.CommitAuthor{ + Name: []byte("Luke \"Jared\" Bennett"), + Email: []byte("lbennett@gitlab.com"), + Date: ×tamp.Timestamp{Seconds: ts}, + Timezone: []byte("+0000"), + } +} + +func seanMcGivern(ts int64) *gitalypb.CommitAuthor { + return &gitalypb.CommitAuthor{ + Name: []byte("Sean McGivern"), + Email: []byte("sean@mcgivern.me.uk"), + Date: ×tamp.Timestamp{Seconds: ts}, + Timezone: []byte("+0000"), + } +} + +func stanHu(ts int64) *gitalypb.CommitAuthor { + return &gitalypb.CommitAuthor{ + Name: []byte("Stan Hu"), + Email: []byte("stanhu@gmail.com"), + Date: ×tamp.Timestamp{Seconds: ts}, + Timezone: []byte("+0000"), + } +} diff --git a/internal/gitaly/service/blob/blobs.go b/internal/gitaly/service/blob/blobs.go index 78c447079..9f18fc7ff 100644 --- a/internal/gitaly/service/blob/blobs.go +++ b/internal/gitaly/service/blob/blobs.go @@ -59,7 +59,10 @@ func (s *server) ListBlobs(req *gitalypb.ListBlobsRequest, stream gitalypb.BlobS return helper.ErrInternalf("cannot determine Git version: %v", err) } - var revlistOptions []gitpipe.RevlistOption + revlistOptions := []gitpipe.RevlistOption{ + gitpipe.WithObjects(), + } + if gitVersion.SupportsObjectTypeFilter() { revlistOptions = append(revlistOptions, gitpipe.WithObjectTypeFilter(gitpipe.ObjectTypeBlob)) } diff --git a/internal/gitaly/service/blob/lfs_pointers.go b/internal/gitaly/service/blob/lfs_pointers.go index 46442f546..bdb829c47 100644 --- a/internal/gitaly/service/blob/lfs_pointers.go +++ b/internal/gitaly/service/blob/lfs_pointers.go @@ -79,7 +79,10 @@ func (s *server) ListLFSPointers(in *gitalypb.ListLFSPointersRequest, stream git return helper.ErrInternalf("cannot determine Git version: %v", err) } - revlistOptions := []gitpipe.RevlistOption{gitpipe.WithBlobLimit(lfsPointerMaxSize)} + revlistOptions := []gitpipe.RevlistOption{ + gitpipe.WithObjects(), + gitpipe.WithBlobLimit(lfsPointerMaxSize), + } if gitVersion.SupportsObjectTypeFilter() { revlistOptions = append(revlistOptions, gitpipe.WithObjectTypeFilter(gitpipe.ObjectTypeBlob)) } diff --git a/internal/gitaly/service/commit/commits_sender.go b/internal/gitaly/service/commit/commits_sender.go new file mode 100644 index 000000000..f6f0812bb --- /dev/null +++ b/internal/gitaly/service/commit/commits_sender.go @@ -0,0 +1,23 @@ +package commit + +import ( + "github.com/golang/protobuf/proto" + "gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb" +) + +type commitsSender struct { + commits []*gitalypb.GitCommit + send func([]*gitalypb.GitCommit) error +} + +func (s *commitsSender) Reset() { + s.commits = s.commits[:0] +} + +func (s *commitsSender) Append(m proto.Message) { + s.commits = append(s.commits, m.(*gitalypb.GitCommit)) +} + +func (s *commitsSender) Send() error { + return s.send(s.commits) +} diff --git a/internal/gitaly/service/commit/find_all_commits.go b/internal/gitaly/service/commit/find_all_commits.go index 0b0c83392..796c7185b 100644 --- a/internal/gitaly/service/commit/find_all_commits.go +++ b/internal/gitaly/service/commit/find_all_commits.go @@ -3,7 +3,6 @@ package commit import ( "fmt" - "github.com/golang/protobuf/proto" "gitlab.com/gitlab-org/gitaly/v14/internal/git" "gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/service/ref" "gitlab.com/gitlab-org/gitaly/v14/internal/helper" @@ -13,20 +12,6 @@ import ( // We declare this function in variables so that we can override them in our tests var _findBranchNamesFunc = ref.FindBranchNames -type findAllCommitsSender struct { - stream gitalypb.CommitService_FindAllCommitsServer - commits []*gitalypb.GitCommit -} - -func (sender *findAllCommitsSender) Reset() { sender.commits = nil } -func (sender *findAllCommitsSender) Append(m proto.Message) { - sender.commits = append(sender.commits, m.(*gitalypb.GitCommit)) -} - -func (sender *findAllCommitsSender) Send() error { - return sender.stream.Send(&gitalypb.FindAllCommitsResponse{Commits: sender.commits}) -} - func (s *server) FindAllCommits(in *gitalypb.FindAllCommitsRequest, stream gitalypb.CommitService_FindAllCommitsServer) error { if err := validateFindAllCommitsRequest(in); err != nil { return err @@ -64,7 +49,13 @@ func validateFindAllCommitsRequest(in *gitalypb.FindAllCommitsRequest) error { } func (s *server) findAllCommits(repo git.RepositoryExecutor, in *gitalypb.FindAllCommitsRequest, stream gitalypb.CommitService_FindAllCommitsServer, revisions []string) error { - sender := &findAllCommitsSender{stream: stream} + sender := &commitsSender{ + send: func(commits []*gitalypb.GitCommit) error { + return stream.Send(&gitalypb.FindAllCommitsResponse{ + Commits: commits, + }) + }, + } var gitLogExtraOptions []git.Option if maxCount := in.GetMaxCount(); maxCount > 0 { diff --git a/internal/gitaly/service/commit/find_all_commits_test.go b/internal/gitaly/service/commit/find_all_commits_test.go index 4a519f2b6..b1c77886b 100644 --- a/internal/gitaly/service/commit/find_all_commits_test.go +++ b/internal/gitaly/service/commit/find_all_commits_test.go @@ -4,9 +4,9 @@ import ( "context" "testing" - "github.com/golang/protobuf/ptypes/timestamp" "github.com/stretchr/testify/require" "gitlab.com/gitlab-org/gitaly/v14/internal/git" + "gitlab.com/gitlab-org/gitaly/v14/internal/git/gittest" "gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/service/ref" "gitlab.com/gitlab-org/gitaly/v14/internal/testhelper" "gitlab.com/gitlab-org/gitaly/v14/internal/testhelper/testassert" @@ -31,170 +31,29 @@ func TestSuccessfulFindAllCommitsRequest(t *testing.T) { // Commits made on another branch in parallel to the normal commits below. // Will be used to test topology ordering. alternateCommits := []*gitalypb.GitCommit{ - { - Id: "0031876facac3f2b2702a0e53a26e89939a42209", - Subject: []byte("Merge branch 'few-commits-4' into few-commits-2"), - Body: []byte("Merge branch 'few-commits-4' into few-commits-2\n"), - Author: dummyCommitAuthor(1500320762), - Committer: dummyCommitAuthor(1500320762), - ParentIds: []string{ - "bf6e164cac2dc32b1f391ca4290badcbe4ffc5fb", - "48ca272b947f49eee601639d743784a176574a09", - }, - BodySize: 48, - TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", - }, - { - Id: "48ca272b947f49eee601639d743784a176574a09", - Subject: []byte("Commit #9 alternate"), - Body: []byte("Commit #9 alternate\n"), - Author: dummyCommitAuthor(1500320271), - Committer: dummyCommitAuthor(1500320271), - ParentIds: []string{"335bc94d5b7369b10251e612158da2e4a4aaa2a5"}, - BodySize: 20, - TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", - }, - { - Id: "335bc94d5b7369b10251e612158da2e4a4aaa2a5", - Subject: []byte("Commit #8 alternate"), - Body: []byte("Commit #8 alternate\n"), - Author: dummyCommitAuthor(1500320269), - Committer: dummyCommitAuthor(1500320269), - ParentIds: []string{"1039376155a0d507eba0ea95c29f8f5b983ea34b"}, - BodySize: 20, - TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", - }, + gittest.CommitsByID["0031876facac3f2b2702a0e53a26e89939a42209"], + gittest.CommitsByID["48ca272b947f49eee601639d743784a176574a09"], + gittest.CommitsByID["335bc94d5b7369b10251e612158da2e4a4aaa2a5"], } // Nothing special about these commits. normalCommits := []*gitalypb.GitCommit{ - { - Id: "bf6e164cac2dc32b1f391ca4290badcbe4ffc5fb", - Subject: []byte("Commit #10"), - Body: []byte("Commit #10\n"), - Author: dummyCommitAuthor(1500320272), - Committer: dummyCommitAuthor(1500320272), - ParentIds: []string{"9d526f87b82e2b2fd231ca44c95508e5e85624ca"}, - BodySize: 11, - TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", - }, - { - Id: "9d526f87b82e2b2fd231ca44c95508e5e85624ca", - Subject: []byte("Commit #9"), - Body: []byte("Commit #9\n"), - Author: dummyCommitAuthor(1500320270), - Committer: dummyCommitAuthor(1500320270), - ParentIds: []string{"1039376155a0d507eba0ea95c29f8f5b983ea34b"}, - BodySize: 10, - TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", - }, - { - Id: "1039376155a0d507eba0ea95c29f8f5b983ea34b", - Subject: []byte("Commit #8"), - Body: []byte("Commit #8\n"), - Author: dummyCommitAuthor(1500320268), - Committer: dummyCommitAuthor(1500320268), - ParentIds: []string{"54188278422b1fa877c2e71c4e37fc6640a58ad1"}, - BodySize: 10, - TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", - }, { - Id: "54188278422b1fa877c2e71c4e37fc6640a58ad1", - Subject: []byte("Commit #7"), - Body: []byte("Commit #7\n"), - Author: dummyCommitAuthor(1500320266), - Committer: dummyCommitAuthor(1500320266), - ParentIds: []string{"8b9270332688d58e25206601900ee5618fab2390"}, - BodySize: 10, - TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", - }, { - Id: "8b9270332688d58e25206601900ee5618fab2390", - Subject: []byte("Commit #6"), - Body: []byte("Commit #6\n"), - Author: dummyCommitAuthor(1500320264), - Committer: dummyCommitAuthor(1500320264), - ParentIds: []string{"f9220df47bce1530e90c189064d301bfc8ceb5ab"}, - BodySize: 10, - TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", - }, { - Id: "f9220df47bce1530e90c189064d301bfc8ceb5ab", - Subject: []byte("Commit #5"), - Body: []byte("Commit #5\n"), - Author: dummyCommitAuthor(1500320262), - Committer: dummyCommitAuthor(1500320262), - ParentIds: []string{"40d408f89c1fd26b7d02e891568f880afe06a9f8"}, - BodySize: 10, - TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", - }, { - Id: "40d408f89c1fd26b7d02e891568f880afe06a9f8", - Subject: []byte("Commit #4"), - Body: []byte("Commit #4\n"), - Author: dummyCommitAuthor(1500320260), - Committer: dummyCommitAuthor(1500320260), - ParentIds: []string{"df914c609a1e16d7d68e4a61777ff5d6f6b6fde3"}, - BodySize: 10, - TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", - }, { - Id: "df914c609a1e16d7d68e4a61777ff5d6f6b6fde3", - Subject: []byte("Commit #3"), - Body: []byte("Commit #3\n"), - Author: dummyCommitAuthor(1500320258), - Committer: dummyCommitAuthor(1500320258), - ParentIds: []string{"6762605237fc246ae146ac64ecb467f71d609120"}, - BodySize: 10, - TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", - }, { - Id: "6762605237fc246ae146ac64ecb467f71d609120", - Subject: []byte("Commit #2"), - Body: []byte("Commit #2\n"), - Author: dummyCommitAuthor(1500320256), - Committer: dummyCommitAuthor(1500320256), - ParentIds: []string{"79b06233d3dc769921576771a4e8bee4b439595d"}, - BodySize: 10, - TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", - }, { - Id: "79b06233d3dc769921576771a4e8bee4b439595d", - Subject: []byte("Commit #1"), - Body: []byte("Commit #1\n"), - Author: dummyCommitAuthor(1500320254), - Committer: dummyCommitAuthor(1500320254), - ParentIds: []string{"1a0b36b3cdad1d2ee32457c102a8c0b7056fa863"}, - BodySize: 10, - TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", - }, - { - Id: "1a0b36b3cdad1d2ee32457c102a8c0b7056fa863", - Subject: []byte("Initial commit"), - Body: []byte("Initial commit\n"), - Author: &gitalypb.CommitAuthor{ - Name: []byte("Dmitriy Zaporozhets"), - Email: []byte("dmitriy.zaporozhets@gmail.com"), - Date: ×tamp.Timestamp{Seconds: 1393488198}, - Timezone: []byte("-0800"), - }, - Committer: &gitalypb.CommitAuthor{ - Name: []byte("Dmitriy Zaporozhets"), - Email: []byte("dmitriy.zaporozhets@gmail.com"), - Date: ×tamp.Timestamp{Seconds: 1393488198}, - Timezone: []byte("-0800"), - }, - ParentIds: nil, - BodySize: 15, - TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", - }, + gittest.CommitsByID["bf6e164cac2dc32b1f391ca4290badcbe4ffc5fb"], + gittest.CommitsByID["9d526f87b82e2b2fd231ca44c95508e5e85624ca"], + gittest.CommitsByID["1039376155a0d507eba0ea95c29f8f5b983ea34b"], + gittest.CommitsByID["54188278422b1fa877c2e71c4e37fc6640a58ad1"], + gittest.CommitsByID["8b9270332688d58e25206601900ee5618fab2390"], + gittest.CommitsByID["f9220df47bce1530e90c189064d301bfc8ceb5ab"], + gittest.CommitsByID["40d408f89c1fd26b7d02e891568f880afe06a9f8"], + gittest.CommitsByID["df914c609a1e16d7d68e4a61777ff5d6f6b6fde3"], + gittest.CommitsByID["6762605237fc246ae146ac64ecb467f71d609120"], + gittest.CommitsByID["79b06233d3dc769921576771a4e8bee4b439595d"], + gittest.CommitsByID["1a0b36b3cdad1d2ee32457c102a8c0b7056fa863"], } // A commit that exists on "two-commits" branch. singleCommit := []*gitalypb.GitCommit{ - { - Id: "304d257dcb821665ab5110318fc58a007bd104ed", - Subject: []byte("Commit #11"), - Body: []byte("Commit #11\n"), - Author: dummyCommitAuthor(1500322381), - Committer: dummyCommitAuthor(1500322381), - ParentIds: []string{"1a0b36b3cdad1d2ee32457c102a8c0b7056fa863"}, - BodySize: 11, - TreeId: "91639b9835ff541f312fd2735f639a50bf35d472", - }, + gittest.CommitsByID["304d257dcb821665ab5110318fc58a007bd104ed"], } timeOrderedCommits := []*gitalypb.GitCommit{ diff --git a/internal/gitaly/service/commit/find_commits.go b/internal/gitaly/service/commit/find_commits.go index 8a975ed0c..6367aa35d 100644 --- a/internal/gitaly/service/commit/find_commits.go +++ b/internal/gitaly/service/commit/find_commits.go @@ -8,7 +8,6 @@ import ( "io" "strings" - "github.com/golang/protobuf/proto" "gitlab.com/gitlab-org/gitaly/v14/internal/command" "gitlab.com/gitlab-org/gitaly/v14/internal/git" "gitlab.com/gitlab-org/gitaly/v14/internal/git/catfile" @@ -152,24 +151,16 @@ func (g *GetCommits) Commit(ctx context.Context, trailers bool) (*gitalypb.GitCo return commit, nil } -type findCommitsSender struct { - stream gitalypb.CommitService_FindCommitsServer - commits []*gitalypb.GitCommit -} - -func (s *findCommitsSender) Reset() { s.commits = nil } -func (s *findCommitsSender) Append(m proto.Message) { - s.commits = append(s.commits, m.(*gitalypb.GitCommit)) -} - -func (s *findCommitsSender) Send() error { - return s.stream.Send(&gitalypb.FindCommitsResponse{Commits: s.commits}) -} - func streamCommits(getCommits *GetCommits, stream gitalypb.CommitService_FindCommitsServer, trailers bool) error { ctx := stream.Context() - chunker := chunk.New(&findCommitsSender{stream: stream}) + chunker := chunk.New(&commitsSender{ + send: func(commits []*gitalypb.GitCommit) error { + return stream.Send(&gitalypb.FindCommitsResponse{ + Commits: commits, + }) + }, + }) for getCommits.Scan() { commit, err := getCommits.Commit(ctx, trailers) diff --git a/internal/gitaly/service/commit/list_all_commits.go b/internal/gitaly/service/commit/list_all_commits.go new file mode 100644 index 000000000..f99e6424d --- /dev/null +++ b/internal/gitaly/service/commit/list_all_commits.go @@ -0,0 +1,100 @@ +package commit + +import ( + "errors" + "fmt" + + "gitlab.com/gitlab-org/gitaly/v14/internal/git" + "gitlab.com/gitlab-org/gitaly/v14/internal/git/catfile" + "gitlab.com/gitlab-org/gitaly/v14/internal/git/gitpipe" + "gitlab.com/gitlab-org/gitaly/v14/internal/helper" + "gitlab.com/gitlab-org/gitaly/v14/internal/helper/chunk" + "gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb" +) + +func verifyListAllCommitsRequest(request *gitalypb.ListAllCommitsRequest) error { + if request.GetRepository() == nil { + return errors.New("empty repository") + } + return nil +} + +func (s *server) ListAllCommits( + request *gitalypb.ListAllCommitsRequest, + stream gitalypb.CommitService_ListAllCommitsServer, +) error { + if err := verifyListAllCommitsRequest(request); err != nil { + return helper.ErrInvalidArgument(err) + } + + ctx := stream.Context() + repo := s.localrepo(request.GetRepository()) + + catfileProcess, err := s.catfileCache.BatchProcess(ctx, repo) + if err != nil { + return helper.ErrInternal(fmt.Errorf("creating catfile process: %w", err)) + } + + catfileInfoIter := gitpipe.CatfileInfoAllObjects(ctx, repo) + + // If we've got a pagination token, then we will only start to print commits as soon as + // we've seen the token. + token := request.GetPaginationParams().GetPageToken() + waitingForToken := token != "" + + catfileInfoIter = gitpipe.CatfileInfoFilter(ctx, catfileInfoIter, func(r gitpipe.CatfileInfoResult) bool { + if waitingForToken { + waitingForToken = r.ObjectInfo.Oid != git.ObjectID(token) + // We also skip the token itself, thus we always return `false` + // here. + return false + } + + if r.ObjectInfo.Type != "commit" { + return false + } + + return true + }) + + catfileObjectIter := gitpipe.CatfileObject(ctx, catfileProcess, catfileInfoIter) + + chunker := chunk.New(&commitsSender{ + send: func(commits []*gitalypb.GitCommit) error { + return stream.Send(&gitalypb.ListAllCommitsResponse{ + Commits: commits, + }) + }, + }) + + limit := request.GetPaginationParams().GetLimit() + + for i := int32(0); catfileObjectIter.Next(); i++ { + // If we hit the pagination limit, then we stop sending commits even if there are + // more commits in the pipeline. + if limit > 0 && limit <= i { + break + } + + object := catfileObjectIter.Result() + + commit, err := catfile.ParseCommit(object.ObjectReader, object.ObjectInfo) + if err != nil { + return helper.ErrInternal(fmt.Errorf("parsing commit: %w", err)) + } + + if err := chunker.Send(commit); err != nil { + return helper.ErrInternal(fmt.Errorf("sending commit: %w", err)) + } + } + + if err := catfileObjectIter.Err(); err != nil { + return helper.ErrInternal(fmt.Errorf("iterating objects: %w", err)) + } + + if err := chunker.Flush(); err != nil { + return helper.ErrInternal(fmt.Errorf("flushing commits: %w", err)) + } + + return nil +} diff --git a/internal/gitaly/service/commit/list_all_commits_test.go b/internal/gitaly/service/commit/list_all_commits_test.go new file mode 100644 index 000000000..10abb0cad --- /dev/null +++ b/internal/gitaly/service/commit/list_all_commits_test.go @@ -0,0 +1,165 @@ +package commit + +import ( + "errors" + "fmt" + "io" + "os" + "os/exec" + "path/filepath" + "testing" + + "github.com/golang/protobuf/ptypes/timestamp" + "github.com/stretchr/testify/require" + "gitlab.com/gitlab-org/gitaly/v14/internal/git/gittest" + "gitlab.com/gitlab-org/gitaly/v14/internal/helper/text" + "gitlab.com/gitlab-org/gitaly/v14/internal/testhelper" + "gitlab.com/gitlab-org/gitaly/v14/internal/testhelper/testassert" + "gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb" +) + +func TestListAllCommits(t *testing.T) { + receiveCommits := func(t *testing.T, stream gitalypb.CommitService_ListAllCommitsClient) []*gitalypb.GitCommit { + t.Helper() + + var commits []*gitalypb.GitCommit + for { + response, err := stream.Recv() + if errors.Is(err, io.EOF) { + break + } + require.NoError(t, err) + + commits = append(commits, response.Commits...) + } + + return commits + } + + ctx, cancel := testhelper.Context() + defer cancel() + + t.Run("empty repo", func(t *testing.T) { + cfg, client := setupCommitService(t) + + repo, _, cleanup := gittest.InitBareRepoAt(t, cfg, cfg.Storages[0]) + defer cleanup() + + stream, err := client.ListAllCommits(ctx, &gitalypb.ListAllCommitsRequest{ + Repository: repo, + }) + require.NoError(t, err) + + require.Empty(t, receiveCommits(t, stream)) + }) + + t.Run("normal repo", func(t *testing.T) { + _, repo, _, client := setupCommitServiceWithRepo(t, true) + + stream, err := client.ListAllCommits(ctx, &gitalypb.ListAllCommitsRequest{ + Repository: repo, + }) + require.NoError(t, err) + + commits := receiveCommits(t, stream) + require.Greater(t, len(commits), 350) + + // Build a map of received commits by their OID so that we can easily compare a + // subset via `testassert.ProtoEqual()`. Ideally, we'd just use `require.Subset()`, + // but that doesn't work with protobuf messages. + commitsByID := make(map[string]*gitalypb.GitCommit) + for _, commit := range commits { + commitsByID[commit.Id] = commit + } + + // We've got quite a bunch of commits, so let's only compare a small subset to be + // sure that commits are correctly read. + for _, oid := range []string{ + "0031876facac3f2b2702a0e53a26e89939a42209", + "48ca272b947f49eee601639d743784a176574a09", + "335bc94d5b7369b10251e612158da2e4a4aaa2a5", + "bf6e164cac2dc32b1f391ca4290badcbe4ffc5fb", + } { + testassert.ProtoEqual(t, gittest.CommitsByID[oid], commitsByID[oid]) + } + }) + + t.Run("pagination", func(t *testing.T) { + _, repo, _, client := setupCommitServiceWithRepo(t, true) + + stream, err := client.ListAllCommits(ctx, &gitalypb.ListAllCommitsRequest{ + Repository: repo, + PaginationParams: &gitalypb.PaginationParameter{ + PageToken: "1039376155a0d507eba0ea95c29f8f5b983ea34b", + Limit: 1, + }, + }) + require.NoError(t, err) + + testassert.ProtoEqual(t, []*gitalypb.GitCommit{ + gittest.CommitsByID["54188278422b1fa877c2e71c4e37fc6640a58ad1"], + }, receiveCommits(t, stream)) + }) + + t.Run("quarantine directory", func(t *testing.T) { + cfg, repo, repoPath, client := setupCommitServiceWithRepo(t, true) + + quarantineDir := filepath.Join("objects", "incoming-123456") + require.NoError(t, os.Mkdir(filepath.Join(repoPath, quarantineDir), 0777)) + + repo.GitObjectDirectory = quarantineDir + repo.GitAlternateObjectDirectories = nil + + // There are no quarantined objects yet, so none should be returned + // here. + stream, err := client.ListAllCommits(ctx, &gitalypb.ListAllCommitsRequest{ + Repository: repo, + }) + require.NoError(t, err) + require.Empty(t, receiveCommits(t, stream)) + + treeID := text.ChompBytes(gittest.Exec(t, cfg, "-C", repoPath, "rev-parse", "HEAD^{tree}")) + + // We cannot easily spawn a command with an object directory, so we just do so + // manually here and write the commit into the quarantine object directory. + commitTree := exec.Command(cfg.Git.BinPath, "-C", repoPath, + "-c", "user.name=John Doe", + "-c", "user.email=john.doe@example.com", + "commit-tree", treeID, "-m", "An empty commit") + commitTree.Env = []string{ + "GIT_AUTHOR_DATE=1600000000 +0200", + "GIT_COMMITTER_DATE=1600000001 +0200", + fmt.Sprintf("GIT_OBJECT_DIRECTORY=%s", quarantineDir), + fmt.Sprintf("GIT_ALTERNATE_OBJECT_DIRECTORIES=%s", filepath.Join(repoPath, "objects")), + } + + commitID, err := commitTree.Output() + require.NoError(t, err) + + // We now expect only the quarantined commit to be returned. + stream, err = client.ListAllCommits(ctx, &gitalypb.ListAllCommitsRequest{ + Repository: repo, + }) + require.NoError(t, err) + + require.Equal(t, []*gitalypb.GitCommit{{ + Id: text.ChompBytes(commitID), + Subject: []byte("An empty commit"), + Body: []byte("An empty commit\n"), + BodySize: 16, + TreeId: treeID, + Author: &gitalypb.CommitAuthor{ + Name: []byte("John Doe"), + Email: []byte("john.doe@example.com"), + Date: ×tamp.Timestamp{Seconds: 1600000000}, + Timezone: []byte("+0200"), + }, + Committer: &gitalypb.CommitAuthor{ + Name: []byte("John Doe"), + Email: []byte("john.doe@example.com"), + Date: ×tamp.Timestamp{Seconds: 1600000001}, + Timezone: []byte("+0200"), + }, + }}, receiveCommits(t, stream)) + }) +} diff --git a/internal/gitaly/service/commit/list_commits.go b/internal/gitaly/service/commit/list_commits.go new file mode 100644 index 000000000..978b7e96a --- /dev/null +++ b/internal/gitaly/service/commit/list_commits.go @@ -0,0 +1,141 @@ +package commit + +import ( + "errors" + "fmt" + "strings" + + "gitlab.com/gitlab-org/gitaly/v14/internal/git" + "gitlab.com/gitlab-org/gitaly/v14/internal/git/catfile" + "gitlab.com/gitlab-org/gitaly/v14/internal/git/gitpipe" + "gitlab.com/gitlab-org/gitaly/v14/internal/helper" + "gitlab.com/gitlab-org/gitaly/v14/internal/helper/chunk" + "gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb" +) + +func verifyListCommitsRequest(request *gitalypb.ListCommitsRequest) error { + if request.GetRepository() == nil { + return errors.New("empty repository") + } + if len(request.GetRevisions()) == 0 { + return errors.New("missing revisions") + } + for _, revision := range request.Revisions { + if strings.HasPrefix(revision, "-") && revision != "--all" && revision != "--not" { + return fmt.Errorf("invalid revision: %q", revision) + } + } + return nil +} + +func (s *server) ListCommits( + request *gitalypb.ListCommitsRequest, + stream gitalypb.CommitService_ListCommitsServer, +) error { + if err := verifyListCommitsRequest(request); err != nil { + return helper.ErrInvalidArgument(err) + } + + ctx := stream.Context() + repo := s.localrepo(request.GetRepository()) + + catfileProcess, err := s.catfileCache.BatchProcess(ctx, repo) + if err != nil { + return helper.ErrInternal(fmt.Errorf("creating catfile process: %w", err)) + } + + revlistOptions := []gitpipe.RevlistOption{} + + switch request.GetOrder() { + case gitalypb.ListCommitsRequest_NONE: + // Nothing to do, we use default sorting. + case gitalypb.ListCommitsRequest_TOPO: + revlistOptions = append(revlistOptions, gitpipe.WithOrder(gitpipe.OrderTopo)) + case gitalypb.ListCommitsRequest_DATE: + revlistOptions = append(revlistOptions, gitpipe.WithOrder(gitpipe.OrderDate)) + } + + if request.GetMaxParents() > 0 { + revlistOptions = append(revlistOptions, gitpipe.WithMaxParents(uint(request.GetMaxParents()))) + } + + if request.GetDisableWalk() { + revlistOptions = append(revlistOptions, gitpipe.WithDisabledWalk()) + } + + if request.GetFirstParent() { + revlistOptions = append(revlistOptions, gitpipe.WithFirstParent()) + } + + if request.GetBefore() != nil { + revlistOptions = append(revlistOptions, gitpipe.WithBefore(request.GetBefore().AsTime())) + } + + if request.GetAfter() != nil { + revlistOptions = append(revlistOptions, gitpipe.WithAfter(request.GetAfter().AsTime())) + } + + if len(request.GetAuthor()) != 0 { + revlistOptions = append(revlistOptions, gitpipe.WithAuthor(request.GetAuthor())) + } + + revlistIter := gitpipe.Revlist(ctx, repo, request.GetRevisions(), revlistOptions...) + + // If we've got a pagination token, then we will only start to print commits as soon as + // we've seen the token. + if token := request.GetPaginationParams().GetPageToken(); token != "" { + tokenSeen := false + revlistIter = gitpipe.RevlistFilter(ctx, revlistIter, func(r gitpipe.RevlistResult) bool { + if !tokenSeen { + tokenSeen = r.OID == git.ObjectID(token) + // We also skip the token itself, thus we always return `false` + // here. + return false + } + + return true + }) + } + + catfileInfoIter := gitpipe.CatfileInfo(ctx, catfileProcess, revlistIter) + catfileObjectIter := gitpipe.CatfileObject(ctx, catfileProcess, catfileInfoIter) + + chunker := chunk.New(&commitsSender{ + send: func(commits []*gitalypb.GitCommit) error { + return stream.Send(&gitalypb.ListCommitsResponse{ + Commits: commits, + }) + }, + }) + + limit := request.GetPaginationParams().GetLimit() + + for i := int32(0); catfileObjectIter.Next(); i++ { + // If we hit the pagination limit, then we stop sending commits even if there are + // more commits in the pipeline. + if limit > 0 && limit <= i { + break + } + + object := catfileObjectIter.Result() + + commit, err := catfile.ParseCommit(object.ObjectReader, object.ObjectInfo) + if err != nil { + return helper.ErrInternal(fmt.Errorf("parsing commit: %w", err)) + } + + if err := chunker.Send(commit); err != nil { + return helper.ErrInternal(fmt.Errorf("sending commit: %w", err)) + } + } + + if err := catfileObjectIter.Err(); err != nil { + return helper.ErrInternal(fmt.Errorf("iterating objects: %w", err)) + } + + if err := chunker.Flush(); err != nil { + return helper.ErrInternal(fmt.Errorf("flushing commits: %w", err)) + } + + return nil +} diff --git a/internal/gitaly/service/commit/list_commits_test.go b/internal/gitaly/service/commit/list_commits_test.go new file mode 100644 index 000000000..963582078 --- /dev/null +++ b/internal/gitaly/service/commit/list_commits_test.go @@ -0,0 +1,268 @@ +package commit + +import ( + "errors" + "io" + "testing" + + "github.com/golang/protobuf/ptypes/timestamp" + "github.com/stretchr/testify/require" + "gitlab.com/gitlab-org/gitaly/v14/internal/git/gittest" + "gitlab.com/gitlab-org/gitaly/v14/internal/testhelper" + "gitlab.com/gitlab-org/gitaly/v14/internal/testhelper/testassert" + "gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb" +) + +func TestListCommits(t *testing.T) { + _, repo, _, client := setupCommitServiceWithRepo(t, true) + + for _, tc := range []struct { + desc string + request *gitalypb.ListCommitsRequest + expectedCommits []*gitalypb.GitCommit + expectedErr error + }{ + { + desc: "single revision", + request: &gitalypb.ListCommitsRequest{ + Repository: repo, + Revisions: []string{ + "0031876facac3f2b2702a0e53a26e89939a42209", + }, + }, + expectedCommits: []*gitalypb.GitCommit{ + gittest.CommitsByID["0031876facac3f2b2702a0e53a26e89939a42209"], + gittest.CommitsByID["bf6e164cac2dc32b1f391ca4290badcbe4ffc5fb"], + gittest.CommitsByID["48ca272b947f49eee601639d743784a176574a09"], + gittest.CommitsByID["9d526f87b82e2b2fd231ca44c95508e5e85624ca"], + gittest.CommitsByID["335bc94d5b7369b10251e612158da2e4a4aaa2a5"], + gittest.CommitsByID["1039376155a0d507eba0ea95c29f8f5b983ea34b"], + gittest.CommitsByID["54188278422b1fa877c2e71c4e37fc6640a58ad1"], + gittest.CommitsByID["8b9270332688d58e25206601900ee5618fab2390"], + gittest.CommitsByID["f9220df47bce1530e90c189064d301bfc8ceb5ab"], + gittest.CommitsByID["40d408f89c1fd26b7d02e891568f880afe06a9f8"], + gittest.CommitsByID["df914c609a1e16d7d68e4a61777ff5d6f6b6fde3"], + gittest.CommitsByID["6762605237fc246ae146ac64ecb467f71d609120"], + gittest.CommitsByID["79b06233d3dc769921576771a4e8bee4b439595d"], + gittest.CommitsByID["1a0b36b3cdad1d2ee32457c102a8c0b7056fa863"], + }, + }, + { + desc: "single revision with limit", + request: &gitalypb.ListCommitsRequest{ + Repository: repo, + Revisions: []string{ + "0031876facac3f2b2702a0e53a26e89939a42209", + }, + PaginationParams: &gitalypb.PaginationParameter{ + Limit: 2, + }, + }, + expectedCommits: []*gitalypb.GitCommit{ + gittest.CommitsByID["0031876facac3f2b2702a0e53a26e89939a42209"], + gittest.CommitsByID["bf6e164cac2dc32b1f391ca4290badcbe4ffc5fb"], + }, + }, + { + desc: "single revision with page token", + request: &gitalypb.ListCommitsRequest{ + Repository: repo, + Revisions: []string{ + "0031876facac3f2b2702a0e53a26e89939a42209", + }, + PaginationParams: &gitalypb.PaginationParameter{ + PageToken: "79b06233d3dc769921576771a4e8bee4b439595d", + }, + }, + expectedCommits: []*gitalypb.GitCommit{ + gittest.CommitsByID["1a0b36b3cdad1d2ee32457c102a8c0b7056fa863"], + }, + }, + { + desc: "revision range", + request: &gitalypb.ListCommitsRequest{ + Repository: repo, + Revisions: []string{ + "^0031876facac3f2b2702a0e53a26e89939a42209~", + "0031876facac3f2b2702a0e53a26e89939a42209", + }, + }, + expectedCommits: []*gitalypb.GitCommit{ + gittest.CommitsByID["0031876facac3f2b2702a0e53a26e89939a42209"], + gittest.CommitsByID["48ca272b947f49eee601639d743784a176574a09"], + gittest.CommitsByID["335bc94d5b7369b10251e612158da2e4a4aaa2a5"], + }, + }, + { + desc: "revisions with sort topo order", + request: &gitalypb.ListCommitsRequest{ + Repository: repo, + Revisions: []string{ + "master~2", + "^master~4", + "flat-path", + "^flat-path~", + }, + Order: gitalypb.ListCommitsRequest_TOPO, + }, + expectedCommits: []*gitalypb.GitCommit{ + gittest.CommitsByID["60ecb67744cb56576c30214ff52294f8ce2def98"], + gittest.CommitsByID["55bc176024cfa3baaceb71db584c7e5df900ea65"], + gittest.CommitsByID["e63f41fe459e62e1228fcef60d7189127aeba95a"], + gittest.CommitsByID["4a24d82dbca5c11c61556f3b35ca472b7463187e"], + // This commit is sorted differently compared to the following test. + gittest.CommitsByID["ce369011c189f62c815f5971d096b26759bab0d1"], + }, + }, + { + desc: "revisions with sort date order", + request: &gitalypb.ListCommitsRequest{ + Repository: repo, + Revisions: []string{ + "master~2", + "^master~4", + "flat-path", + "^flat-path~", + }, + Order: gitalypb.ListCommitsRequest_DATE, + }, + expectedCommits: []*gitalypb.GitCommit{ + gittest.CommitsByID["60ecb67744cb56576c30214ff52294f8ce2def98"], + gittest.CommitsByID["55bc176024cfa3baaceb71db584c7e5df900ea65"], + // This commit is sorted differently compared to the preceding test. + gittest.CommitsByID["ce369011c189f62c815f5971d096b26759bab0d1"], + gittest.CommitsByID["e63f41fe459e62e1228fcef60d7189127aeba95a"], + gittest.CommitsByID["4a24d82dbca5c11c61556f3b35ca472b7463187e"], + }, + }, + { + desc: "revision with pseudo-revisions", + request: &gitalypb.ListCommitsRequest{ + Repository: repo, + Revisions: []string{ + "0031876facac3f2b2702a0e53a26e89939a42209", + "--not", + "--all", + }, + }, + expectedCommits: nil, + }, + { + desc: "only non-merge commits", + request: &gitalypb.ListCommitsRequest{ + Repository: repo, + Revisions: []string{ + "0031876facac3f2b2702a0e53a26e89939a42209", + }, + MaxParents: 1, + }, + expectedCommits: []*gitalypb.GitCommit{ + gittest.CommitsByID["bf6e164cac2dc32b1f391ca4290badcbe4ffc5fb"], + gittest.CommitsByID["48ca272b947f49eee601639d743784a176574a09"], + gittest.CommitsByID["9d526f87b82e2b2fd231ca44c95508e5e85624ca"], + gittest.CommitsByID["335bc94d5b7369b10251e612158da2e4a4aaa2a5"], + gittest.CommitsByID["1039376155a0d507eba0ea95c29f8f5b983ea34b"], + gittest.CommitsByID["54188278422b1fa877c2e71c4e37fc6640a58ad1"], + gittest.CommitsByID["8b9270332688d58e25206601900ee5618fab2390"], + gittest.CommitsByID["f9220df47bce1530e90c189064d301bfc8ceb5ab"], + gittest.CommitsByID["40d408f89c1fd26b7d02e891568f880afe06a9f8"], + gittest.CommitsByID["df914c609a1e16d7d68e4a61777ff5d6f6b6fde3"], + gittest.CommitsByID["6762605237fc246ae146ac64ecb467f71d609120"], + gittest.CommitsByID["79b06233d3dc769921576771a4e8bee4b439595d"], + gittest.CommitsByID["1a0b36b3cdad1d2ee32457c102a8c0b7056fa863"], + }, + }, + { + desc: "disabled walk", + request: &gitalypb.ListCommitsRequest{ + Repository: repo, + Revisions: []string{ + "0031876facac3f2b2702a0e53a26e89939a42209", + }, + DisableWalk: true, + }, + expectedCommits: []*gitalypb.GitCommit{ + gittest.CommitsByID["0031876facac3f2b2702a0e53a26e89939a42209"], + }, + }, + { + desc: "first-parent", + request: &gitalypb.ListCommitsRequest{ + Repository: repo, + Revisions: []string{ + "0031876facac3f2b2702a0e53a26e89939a42209", + }, + FirstParent: true, + }, + expectedCommits: []*gitalypb.GitCommit{ + gittest.CommitsByID["0031876facac3f2b2702a0e53a26e89939a42209"], + gittest.CommitsByID["bf6e164cac2dc32b1f391ca4290badcbe4ffc5fb"], + gittest.CommitsByID["9d526f87b82e2b2fd231ca44c95508e5e85624ca"], + gittest.CommitsByID["1039376155a0d507eba0ea95c29f8f5b983ea34b"], + gittest.CommitsByID["54188278422b1fa877c2e71c4e37fc6640a58ad1"], + gittest.CommitsByID["8b9270332688d58e25206601900ee5618fab2390"], + gittest.CommitsByID["f9220df47bce1530e90c189064d301bfc8ceb5ab"], + gittest.CommitsByID["40d408f89c1fd26b7d02e891568f880afe06a9f8"], + gittest.CommitsByID["df914c609a1e16d7d68e4a61777ff5d6f6b6fde3"], + gittest.CommitsByID["6762605237fc246ae146ac64ecb467f71d609120"], + gittest.CommitsByID["79b06233d3dc769921576771a4e8bee4b439595d"], + gittest.CommitsByID["1a0b36b3cdad1d2ee32457c102a8c0b7056fa863"], + }, + }, + { + desc: "author", + request: &gitalypb.ListCommitsRequest{ + Repository: repo, + Revisions: []string{ + "0031876facac3f2b2702a0e53a26e89939a42209", + }, + Author: []byte("Dmitriy"), + }, + expectedCommits: []*gitalypb.GitCommit{ + gittest.CommitsByID["1a0b36b3cdad1d2ee32457c102a8c0b7056fa863"], + }, + }, + { + desc: "time range", + request: &gitalypb.ListCommitsRequest{ + Repository: repo, + Revisions: []string{ + "0031876facac3f2b2702a0e53a26e89939a42209", + }, + After: ×tamp.Timestamp{ + Seconds: 1393488197, + }, + Before: ×tamp.Timestamp{ + Seconds: 1393488199, + }, + }, + expectedCommits: []*gitalypb.GitCommit{ + gittest.CommitsByID["1a0b36b3cdad1d2ee32457c102a8c0b7056fa863"], + }, + }, + } { + t.Run(tc.desc, func(t *testing.T) { + ctx, cancel := testhelper.Context() + defer cancel() + + stream, err := client.ListCommits(ctx, tc.request) + require.NoError(t, err) + + var commits []*gitalypb.GitCommit + for { + response, err := stream.Recv() + if err != nil { + if errors.Is(err, io.EOF) { + break + } + + require.Equal(t, tc.expectedErr, err) + } + + commits = append(commits, response.Commits...) + } + + testassert.ProtoEqual(t, tc.expectedCommits, commits) + }) + } +} diff --git a/proto/commit.proto b/proto/commit.proto index 050d0a66a..d66a996d7 100644 --- a/proto/commit.proto +++ b/proto/commit.proto @@ -9,6 +9,25 @@ import "shared.proto"; import "google/protobuf/timestamp.proto"; service CommitService { + + // ListCommits lists all commits reachable via a set of references by doing a + // graph walk. This deprecates ListNewCommits, FindAllCommits, FindCommits + // (except Follow is not yet supported) and CommitsBetweenRequest. Any + // unknown revisions will cause the RPC to fail. + rpc ListCommits(ListCommitsRequest) returns (stream ListCommitsResponse) { + option (op_type) = { + op: ACCESSOR + }; + } + + // ListAllCommits lists all commits present in the repository, including + // those not reachable by any reference. + rpc ListAllCommits(ListAllCommitsRequest) returns (stream ListAllCommitsResponse) { + option (op_type) = { + op: ACCESSOR + }; + } + rpc CommitIsAncestor(CommitIsAncestorRequest) returns (CommitIsAncestorResponse) { option (op_type) = { op: ACCESSOR @@ -100,6 +119,7 @@ service CommitService { op: ACCESSOR }; } + rpc FilterShasWithSignatures(stream FilterShasWithSignaturesRequest) returns (stream FilterShasWithSignaturesResponse) { option (op_type) = { op: ACCESSOR @@ -118,6 +138,88 @@ service CommitService { } } +// ListCommitsRequest is a request for the ListCommits RPC. +message ListCommitsRequest { + // Order is the order in which commits shoud be traversed. + enum Order { + // NONE defaults to reverse chronological order. + NONE = 0; + // TOPO order will cause no parents to be shown before all of its children + // are shown. Furthermore, multiple lines of history will not be + // intermixed. + TOPO = 1; + // DATE order will cause no parents to be shown before all of its children + // are shown. Otherwise, commits are shown in commit timestamp order. This + // can cause history to be shown intermixed. + DATE = 2; + }; + + // Repository is the repository in which commits should be searched for. + Repository repository = 1 [(target_repository)=true]; + + // Revisions is the set of revisions which should be walked to enumerate + // commits. Accepts all notation as documented in gitrevisions(7) as well as + // the pseudo-revisions `--not` and `--all` as documented in git-rev-list(1). + // Must not be empty. + repeated string revisions = 2; + + // PaginationParams allows implementation of pagination. The page token is + // the last commit OID that was sent. It's expected to be the full object ID + // to guard against ambigious OIDs. + PaginationParameter pagination_params = 3; + + // Order is the order in which commits should be traversed. Please refer to + // the enum's documentation for further information. + Order order = 4; + + // MaxParents will skip all commits which have more than the specified number + // of parents. If set to `0`, no filtering by parents will happen. If set to + // `1`, all merge commits will be omitted. + uint32 max_parents = 5; + + // DisableWalk will disable walking the graph. As a result, only commits + // which are immediately referenced by Revisions will be returned. + bool disable_walk = 6; + + // FirstParent will cause the graph walk to only go down the first-parent + // chain of commits. Merge commits will thus only cause the mainline to be + // enumerated. + bool first_parent = 7; + + // After will only list commits which are more recent than the specified date. + google.protobuf.Timestamp after = 8; + + // After will only list commits which are older than the specified date. + google.protobuf.Timestamp before = 9; + + // Author will only list commits whose author matches the given pattern, + // which is a regular expression. + bytes author = 10; +} + +// ListCommitsResponse is a response for the ListCommits RPC. +message ListCommitsResponse { + // Commits is the list of commits found. + repeated GitCommit commits = 1; +} + +// ListAllCommitsRequest is a request for the ListAllCommits RPC. +message ListAllCommitsRequest { + // Repository is the repository in which commits should be searched for. + Repository repository = 1 [(target_repository)=true]; + + // PaginationParams allows implementation of pagination. The page token is + // the last commit OID that was sent. It's expected to be the full object ID + // to guard against ambigious OIDs. + PaginationParameter pagination_params = 2; +} + +// ListAllCommitsResponse is a response for the ListAllCommits RPC. +message ListAllCommitsResponse { + // Commits is the list of commits found. + repeated GitCommit commits = 1; +} + message CommitStatsRequest { Repository repository = 1 [(target_repository)=true]; bytes revision = 2; diff --git a/proto/go/gitalypb/commit.pb.go b/proto/go/gitalypb/commit.pb.go index 09328e157..b9a65c6be 100644 --- a/proto/go/gitalypb/commit.pb.go +++ b/proto/go/gitalypb/commit.pb.go @@ -21,6 +21,63 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// Order is the order in which commits shoud be traversed. +type ListCommitsRequest_Order int32 + +const ( + // NONE defaults to reverse chronological order. + ListCommitsRequest_NONE ListCommitsRequest_Order = 0 + // TOPO order will cause no parents to be shown before all of its children + // are shown. Furthermore, multiple lines of history will not be + // intermixed. + ListCommitsRequest_TOPO ListCommitsRequest_Order = 1 + // DATE order will cause no parents to be shown before all of its children + // are shown. Otherwise, commits are shown in commit timestamp order. This + // can cause history to be shown intermixed. + ListCommitsRequest_DATE ListCommitsRequest_Order = 2 +) + +// Enum value maps for ListCommitsRequest_Order. +var ( + ListCommitsRequest_Order_name = map[int32]string{ + 0: "NONE", + 1: "TOPO", + 2: "DATE", + } + ListCommitsRequest_Order_value = map[string]int32{ + "NONE": 0, + "TOPO": 1, + "DATE": 2, + } +) + +func (x ListCommitsRequest_Order) Enum() *ListCommitsRequest_Order { + p := new(ListCommitsRequest_Order) + *p = x + return p +} + +func (x ListCommitsRequest_Order) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ListCommitsRequest_Order) Descriptor() protoreflect.EnumDescriptor { + return file_commit_proto_enumTypes[0].Descriptor() +} + +func (ListCommitsRequest_Order) Type() protoreflect.EnumType { + return &file_commit_proto_enumTypes[0] +} + +func (x ListCommitsRequest_Order) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ListCommitsRequest_Order.Descriptor instead. +func (ListCommitsRequest_Order) EnumDescriptor() ([]byte, []int) { + return file_commit_proto_rawDescGZIP(), []int{0, 0} +} + // TODO: Replace this enum with ObjectType in shared.proto type TreeEntryResponse_ObjectType int32 @@ -58,11 +115,11 @@ func (x TreeEntryResponse_ObjectType) String() string { } func (TreeEntryResponse_ObjectType) Descriptor() protoreflect.EnumDescriptor { - return file_commit_proto_enumTypes[0].Descriptor() + return file_commit_proto_enumTypes[1].Descriptor() } func (TreeEntryResponse_ObjectType) Type() protoreflect.EnumType { - return &file_commit_proto_enumTypes[0] + return &file_commit_proto_enumTypes[1] } func (x TreeEntryResponse_ObjectType) Number() protoreflect.EnumNumber { @@ -71,7 +128,7 @@ func (x TreeEntryResponse_ObjectType) Number() protoreflect.EnumNumber { // Deprecated: Use TreeEntryResponse_ObjectType.Descriptor instead. func (TreeEntryResponse_ObjectType) EnumDescriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{5, 0} + return file_commit_proto_rawDescGZIP(), []int{9, 0} } // TODO: Replace this enum with ObjectType in shared.proto @@ -108,11 +165,11 @@ func (x TreeEntry_EntryType) String() string { } func (TreeEntry_EntryType) Descriptor() protoreflect.EnumDescriptor { - return file_commit_proto_enumTypes[1].Descriptor() + return file_commit_proto_enumTypes[2].Descriptor() } func (TreeEntry_EntryType) Type() protoreflect.EnumType { - return &file_commit_proto_enumTypes[1] + return &file_commit_proto_enumTypes[2] } func (x TreeEntry_EntryType) Number() protoreflect.EnumNumber { @@ -121,7 +178,7 @@ func (x TreeEntry_EntryType) Number() protoreflect.EnumNumber { // Deprecated: Use TreeEntry_EntryType.Descriptor instead. func (TreeEntry_EntryType) EnumDescriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{12, 0} + return file_commit_proto_rawDescGZIP(), []int{16, 0} } type FindAllCommitsRequest_Order int32 @@ -157,11 +214,11 @@ func (x FindAllCommitsRequest_Order) String() string { } func (FindAllCommitsRequest_Order) Descriptor() protoreflect.EnumDescriptor { - return file_commit_proto_enumTypes[2].Descriptor() + return file_commit_proto_enumTypes[3].Descriptor() } func (FindAllCommitsRequest_Order) Type() protoreflect.EnumType { - return &file_commit_proto_enumTypes[2] + return &file_commit_proto_enumTypes[3] } func (x FindAllCommitsRequest_Order) Number() protoreflect.EnumNumber { @@ -170,7 +227,7 @@ func (x FindAllCommitsRequest_Order) Number() protoreflect.EnumNumber { // Deprecated: Use FindAllCommitsRequest_Order.Descriptor instead. func (FindAllCommitsRequest_Order) EnumDescriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{23, 0} + return file_commit_proto_rawDescGZIP(), []int{27, 0} } type FindCommitsRequest_Order int32 @@ -203,11 +260,11 @@ func (x FindCommitsRequest_Order) String() string { } func (FindCommitsRequest_Order) Descriptor() protoreflect.EnumDescriptor { - return file_commit_proto_enumTypes[3].Descriptor() + return file_commit_proto_enumTypes[4].Descriptor() } func (FindCommitsRequest_Order) Type() protoreflect.EnumType { - return &file_commit_proto_enumTypes[3] + return &file_commit_proto_enumTypes[4] } func (x FindCommitsRequest_Order) Number() protoreflect.EnumNumber { @@ -216,7 +273,307 @@ func (x FindCommitsRequest_Order) Number() protoreflect.EnumNumber { // Deprecated: Use FindCommitsRequest_Order.Descriptor instead. func (FindCommitsRequest_Order) EnumDescriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{25, 0} + return file_commit_proto_rawDescGZIP(), []int{29, 0} +} + +// ListCommitsRequest is a request for the ListCommits RPC. +type ListCommitsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Repository is the repository in which commits should be searched for. + Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"` + // Revisions is the set of revisions which should be walked to enumerate + // commits. Accepts all notation as documented in gitrevisions(7) as well as + // the pseudo-revisions `--not` and `--all` as documented in git-rev-list(1). + // Must not be empty. + Revisions []string `protobuf:"bytes,2,rep,name=revisions,proto3" json:"revisions,omitempty"` + // PaginationParams allows implementation of pagination. The page token is + // the last commit OID that was sent. It's expected to be the full object ID + // to guard against ambigious OIDs. + PaginationParams *PaginationParameter `protobuf:"bytes,3,opt,name=pagination_params,json=paginationParams,proto3" json:"pagination_params,omitempty"` + // Order is the order in which commits should be traversed. Please refer to + // the enum's documentation for further information. + Order ListCommitsRequest_Order `protobuf:"varint,4,opt,name=order,proto3,enum=gitaly.ListCommitsRequest_Order" json:"order,omitempty"` + // MaxParents will skip all commits which have more than the specified number + // of parents. If set to `0`, no filtering by parents will happen. If set to + // `1`, all merge commits will be omitted. + MaxParents uint32 `protobuf:"varint,5,opt,name=max_parents,json=maxParents,proto3" json:"max_parents,omitempty"` + // DisableWalk will disable walking the graph. As a result, only commits + // which are immediately referenced by Revisions will be returned. + DisableWalk bool `protobuf:"varint,6,opt,name=disable_walk,json=disableWalk,proto3" json:"disable_walk,omitempty"` + // FirstParent will cause the graph walk to only go down the first-parent + // chain of commits. Merge commits will thus only cause the mainline to be + // enumerated. + FirstParent bool `protobuf:"varint,7,opt,name=first_parent,json=firstParent,proto3" json:"first_parent,omitempty"` + // After will only list commits which are more recent than the specified date. + After *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=after,proto3" json:"after,omitempty"` + // After will only list commits which are older than the specified date. + Before *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=before,proto3" json:"before,omitempty"` + // Author will only list commits whose author matches the given pattern, + // which is a regular expression. + Author []byte `protobuf:"bytes,10,opt,name=author,proto3" json:"author,omitempty"` +} + +func (x *ListCommitsRequest) Reset() { + *x = ListCommitsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_commit_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListCommitsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListCommitsRequest) ProtoMessage() {} + +func (x *ListCommitsRequest) ProtoReflect() protoreflect.Message { + mi := &file_commit_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListCommitsRequest.ProtoReflect.Descriptor instead. +func (*ListCommitsRequest) Descriptor() ([]byte, []int) { + return file_commit_proto_rawDescGZIP(), []int{0} +} + +func (x *ListCommitsRequest) GetRepository() *Repository { + if x != nil { + return x.Repository + } + return nil +} + +func (x *ListCommitsRequest) GetRevisions() []string { + if x != nil { + return x.Revisions + } + return nil +} + +func (x *ListCommitsRequest) GetPaginationParams() *PaginationParameter { + if x != nil { + return x.PaginationParams + } + return nil +} + +func (x *ListCommitsRequest) GetOrder() ListCommitsRequest_Order { + if x != nil { + return x.Order + } + return ListCommitsRequest_NONE +} + +func (x *ListCommitsRequest) GetMaxParents() uint32 { + if x != nil { + return x.MaxParents + } + return 0 +} + +func (x *ListCommitsRequest) GetDisableWalk() bool { + if x != nil { + return x.DisableWalk + } + return false +} + +func (x *ListCommitsRequest) GetFirstParent() bool { + if x != nil { + return x.FirstParent + } + return false +} + +func (x *ListCommitsRequest) GetAfter() *timestamppb.Timestamp { + if x != nil { + return x.After + } + return nil +} + +func (x *ListCommitsRequest) GetBefore() *timestamppb.Timestamp { + if x != nil { + return x.Before + } + return nil +} + +func (x *ListCommitsRequest) GetAuthor() []byte { + if x != nil { + return x.Author + } + return nil +} + +// ListCommitsResponse is a response for the ListCommits RPC. +type ListCommitsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Commits is the list of commits found. + Commits []*GitCommit `protobuf:"bytes,1,rep,name=commits,proto3" json:"commits,omitempty"` +} + +func (x *ListCommitsResponse) Reset() { + *x = ListCommitsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_commit_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListCommitsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListCommitsResponse) ProtoMessage() {} + +func (x *ListCommitsResponse) ProtoReflect() protoreflect.Message { + mi := &file_commit_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListCommitsResponse.ProtoReflect.Descriptor instead. +func (*ListCommitsResponse) Descriptor() ([]byte, []int) { + return file_commit_proto_rawDescGZIP(), []int{1} +} + +func (x *ListCommitsResponse) GetCommits() []*GitCommit { + if x != nil { + return x.Commits + } + return nil +} + +// ListAllCommitsRequest is a request for the ListAllCommits RPC. +type ListAllCommitsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Repository is the repository in which commits should be searched for. + Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"` + // PaginationParams allows implementation of pagination. The page token is + // the last commit OID that was sent. It's expected to be the full object ID + // to guard against ambigious OIDs. + PaginationParams *PaginationParameter `protobuf:"bytes,2,opt,name=pagination_params,json=paginationParams,proto3" json:"pagination_params,omitempty"` +} + +func (x *ListAllCommitsRequest) Reset() { + *x = ListAllCommitsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_commit_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListAllCommitsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListAllCommitsRequest) ProtoMessage() {} + +func (x *ListAllCommitsRequest) ProtoReflect() protoreflect.Message { + mi := &file_commit_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListAllCommitsRequest.ProtoReflect.Descriptor instead. +func (*ListAllCommitsRequest) Descriptor() ([]byte, []int) { + return file_commit_proto_rawDescGZIP(), []int{2} +} + +func (x *ListAllCommitsRequest) GetRepository() *Repository { + if x != nil { + return x.Repository + } + return nil +} + +func (x *ListAllCommitsRequest) GetPaginationParams() *PaginationParameter { + if x != nil { + return x.PaginationParams + } + return nil +} + +// ListAllCommitsResponse is a response for the ListAllCommits RPC. +type ListAllCommitsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Commits is the list of commits found. + Commits []*GitCommit `protobuf:"bytes,1,rep,name=commits,proto3" json:"commits,omitempty"` +} + +func (x *ListAllCommitsResponse) Reset() { + *x = ListAllCommitsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_commit_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListAllCommitsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListAllCommitsResponse) ProtoMessage() {} + +func (x *ListAllCommitsResponse) ProtoReflect() protoreflect.Message { + mi := &file_commit_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListAllCommitsResponse.ProtoReflect.Descriptor instead. +func (*ListAllCommitsResponse) Descriptor() ([]byte, []int) { + return file_commit_proto_rawDescGZIP(), []int{3} +} + +func (x *ListAllCommitsResponse) GetCommits() []*GitCommit { + if x != nil { + return x.Commits + } + return nil } type CommitStatsRequest struct { @@ -231,7 +588,7 @@ type CommitStatsRequest struct { func (x *CommitStatsRequest) Reset() { *x = CommitStatsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[0] + mi := &file_commit_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -244,7 +601,7 @@ func (x *CommitStatsRequest) String() string { func (*CommitStatsRequest) ProtoMessage() {} func (x *CommitStatsRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[0] + mi := &file_commit_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -257,7 +614,7 @@ func (x *CommitStatsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CommitStatsRequest.ProtoReflect.Descriptor instead. func (*CommitStatsRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{0} + return file_commit_proto_rawDescGZIP(), []int{4} } func (x *CommitStatsRequest) GetRepository() *Repository { @@ -288,7 +645,7 @@ type CommitStatsResponse struct { func (x *CommitStatsResponse) Reset() { *x = CommitStatsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[1] + mi := &file_commit_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -301,7 +658,7 @@ func (x *CommitStatsResponse) String() string { func (*CommitStatsResponse) ProtoMessage() {} func (x *CommitStatsResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[1] + mi := &file_commit_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -314,7 +671,7 @@ func (x *CommitStatsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CommitStatsResponse.ProtoReflect.Descriptor instead. func (*CommitStatsResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{1} + return file_commit_proto_rawDescGZIP(), []int{5} } func (x *CommitStatsResponse) GetOid() string { @@ -351,7 +708,7 @@ type CommitIsAncestorRequest struct { func (x *CommitIsAncestorRequest) Reset() { *x = CommitIsAncestorRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[2] + mi := &file_commit_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -364,7 +721,7 @@ func (x *CommitIsAncestorRequest) String() string { func (*CommitIsAncestorRequest) ProtoMessage() {} func (x *CommitIsAncestorRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[2] + mi := &file_commit_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -377,7 +734,7 @@ func (x *CommitIsAncestorRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CommitIsAncestorRequest.ProtoReflect.Descriptor instead. func (*CommitIsAncestorRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{2} + return file_commit_proto_rawDescGZIP(), []int{6} } func (x *CommitIsAncestorRequest) GetRepository() *Repository { @@ -412,7 +769,7 @@ type CommitIsAncestorResponse struct { func (x *CommitIsAncestorResponse) Reset() { *x = CommitIsAncestorResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[3] + mi := &file_commit_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -425,7 +782,7 @@ func (x *CommitIsAncestorResponse) String() string { func (*CommitIsAncestorResponse) ProtoMessage() {} func (x *CommitIsAncestorResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[3] + mi := &file_commit_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -438,7 +795,7 @@ func (x *CommitIsAncestorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CommitIsAncestorResponse.ProtoReflect.Descriptor instead. func (*CommitIsAncestorResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{3} + return file_commit_proto_rawDescGZIP(), []int{7} } func (x *CommitIsAncestorResponse) GetValue() bool { @@ -469,7 +826,7 @@ type TreeEntryRequest struct { func (x *TreeEntryRequest) Reset() { *x = TreeEntryRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[4] + mi := &file_commit_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -482,7 +839,7 @@ func (x *TreeEntryRequest) String() string { func (*TreeEntryRequest) ProtoMessage() {} func (x *TreeEntryRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[4] + mi := &file_commit_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -495,7 +852,7 @@ func (x *TreeEntryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TreeEntryRequest.ProtoReflect.Descriptor instead. func (*TreeEntryRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{4} + return file_commit_proto_rawDescGZIP(), []int{8} } func (x *TreeEntryRequest) GetRepository() *Repository { @@ -551,7 +908,7 @@ type TreeEntryResponse struct { func (x *TreeEntryResponse) Reset() { *x = TreeEntryResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[5] + mi := &file_commit_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -564,7 +921,7 @@ func (x *TreeEntryResponse) String() string { func (*TreeEntryResponse) ProtoMessage() {} func (x *TreeEntryResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[5] + mi := &file_commit_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -577,7 +934,7 @@ func (x *TreeEntryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TreeEntryResponse.ProtoReflect.Descriptor instead. func (*TreeEntryResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{5} + return file_commit_proto_rawDescGZIP(), []int{9} } func (x *TreeEntryResponse) GetType() TreeEntryResponse_ObjectType { @@ -633,7 +990,7 @@ type CommitsBetweenRequest struct { func (x *CommitsBetweenRequest) Reset() { *x = CommitsBetweenRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[6] + mi := &file_commit_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -646,7 +1003,7 @@ func (x *CommitsBetweenRequest) String() string { func (*CommitsBetweenRequest) ProtoMessage() {} func (x *CommitsBetweenRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[6] + mi := &file_commit_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -659,7 +1016,7 @@ func (x *CommitsBetweenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CommitsBetweenRequest.ProtoReflect.Descriptor instead. func (*CommitsBetweenRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{6} + return file_commit_proto_rawDescGZIP(), []int{10} } func (x *CommitsBetweenRequest) GetRepository() *Repository { @@ -701,7 +1058,7 @@ type CommitsBetweenResponse struct { func (x *CommitsBetweenResponse) Reset() { *x = CommitsBetweenResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[7] + mi := &file_commit_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -714,7 +1071,7 @@ func (x *CommitsBetweenResponse) String() string { func (*CommitsBetweenResponse) ProtoMessage() {} func (x *CommitsBetweenResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[7] + mi := &file_commit_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -727,7 +1084,7 @@ func (x *CommitsBetweenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CommitsBetweenResponse.ProtoReflect.Descriptor instead. func (*CommitsBetweenResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{7} + return file_commit_proto_rawDescGZIP(), []int{11} } func (x *CommitsBetweenResponse) GetCommits() []*GitCommit { @@ -757,7 +1114,7 @@ type CountCommitsRequest struct { func (x *CountCommitsRequest) Reset() { *x = CountCommitsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[8] + mi := &file_commit_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -770,7 +1127,7 @@ func (x *CountCommitsRequest) String() string { func (*CountCommitsRequest) ProtoMessage() {} func (x *CountCommitsRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[8] + mi := &file_commit_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -783,7 +1140,7 @@ func (x *CountCommitsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CountCommitsRequest.ProtoReflect.Descriptor instead. func (*CountCommitsRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{8} + return file_commit_proto_rawDescGZIP(), []int{12} } func (x *CountCommitsRequest) GetRepository() *Repository { @@ -860,7 +1217,7 @@ type CountCommitsResponse struct { func (x *CountCommitsResponse) Reset() { *x = CountCommitsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[9] + mi := &file_commit_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -873,7 +1230,7 @@ func (x *CountCommitsResponse) String() string { func (*CountCommitsResponse) ProtoMessage() {} func (x *CountCommitsResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[9] + mi := &file_commit_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -886,7 +1243,7 @@ func (x *CountCommitsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CountCommitsResponse.ProtoReflect.Descriptor instead. func (*CountCommitsResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{9} + return file_commit_proto_rawDescGZIP(), []int{13} } func (x *CountCommitsResponse) GetCount() int32 { @@ -910,7 +1267,7 @@ type CountDivergingCommitsRequest struct { func (x *CountDivergingCommitsRequest) Reset() { *x = CountDivergingCommitsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[10] + mi := &file_commit_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -923,7 +1280,7 @@ func (x *CountDivergingCommitsRequest) String() string { func (*CountDivergingCommitsRequest) ProtoMessage() {} func (x *CountDivergingCommitsRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[10] + mi := &file_commit_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -936,7 +1293,7 @@ func (x *CountDivergingCommitsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CountDivergingCommitsRequest.ProtoReflect.Descriptor instead. func (*CountDivergingCommitsRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{10} + return file_commit_proto_rawDescGZIP(), []int{14} } func (x *CountDivergingCommitsRequest) GetRepository() *Repository { @@ -979,7 +1336,7 @@ type CountDivergingCommitsResponse struct { func (x *CountDivergingCommitsResponse) Reset() { *x = CountDivergingCommitsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[11] + mi := &file_commit_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -992,7 +1349,7 @@ func (x *CountDivergingCommitsResponse) String() string { func (*CountDivergingCommitsResponse) ProtoMessage() {} func (x *CountDivergingCommitsResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[11] + mi := &file_commit_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1005,7 +1362,7 @@ func (x *CountDivergingCommitsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CountDivergingCommitsResponse.ProtoReflect.Descriptor instead. func (*CountDivergingCommitsResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{11} + return file_commit_proto_rawDescGZIP(), []int{15} } func (x *CountDivergingCommitsResponse) GetLeftCount() int32 { @@ -1045,7 +1402,7 @@ type TreeEntry struct { func (x *TreeEntry) Reset() { *x = TreeEntry{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[12] + mi := &file_commit_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1058,7 +1415,7 @@ func (x *TreeEntry) String() string { func (*TreeEntry) ProtoMessage() {} func (x *TreeEntry) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[12] + mi := &file_commit_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1071,7 +1428,7 @@ func (x *TreeEntry) ProtoReflect() protoreflect.Message { // Deprecated: Use TreeEntry.ProtoReflect.Descriptor instead. func (*TreeEntry) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{12} + return file_commit_proto_rawDescGZIP(), []int{16} } func (x *TreeEntry) GetOid() string { @@ -1137,7 +1494,7 @@ type GetTreeEntriesRequest struct { func (x *GetTreeEntriesRequest) Reset() { *x = GetTreeEntriesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[13] + mi := &file_commit_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1150,7 +1507,7 @@ func (x *GetTreeEntriesRequest) String() string { func (*GetTreeEntriesRequest) ProtoMessage() {} func (x *GetTreeEntriesRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[13] + mi := &file_commit_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1163,7 +1520,7 @@ func (x *GetTreeEntriesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTreeEntriesRequest.ProtoReflect.Descriptor instead. func (*GetTreeEntriesRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{13} + return file_commit_proto_rawDescGZIP(), []int{17} } func (x *GetTreeEntriesRequest) GetRepository() *Repository { @@ -1205,7 +1562,7 @@ type GetTreeEntriesResponse struct { func (x *GetTreeEntriesResponse) Reset() { *x = GetTreeEntriesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[14] + mi := &file_commit_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1218,7 +1575,7 @@ func (x *GetTreeEntriesResponse) String() string { func (*GetTreeEntriesResponse) ProtoMessage() {} func (x *GetTreeEntriesResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[14] + mi := &file_commit_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1231,7 +1588,7 @@ func (x *GetTreeEntriesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTreeEntriesResponse.ProtoReflect.Descriptor instead. func (*GetTreeEntriesResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{14} + return file_commit_proto_rawDescGZIP(), []int{18} } func (x *GetTreeEntriesResponse) GetEntries() []*TreeEntry { @@ -1253,7 +1610,7 @@ type ListFilesRequest struct { func (x *ListFilesRequest) Reset() { *x = ListFilesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[15] + mi := &file_commit_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1266,7 +1623,7 @@ func (x *ListFilesRequest) String() string { func (*ListFilesRequest) ProtoMessage() {} func (x *ListFilesRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[15] + mi := &file_commit_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1279,7 +1636,7 @@ func (x *ListFilesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFilesRequest.ProtoReflect.Descriptor instead. func (*ListFilesRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{15} + return file_commit_proto_rawDescGZIP(), []int{19} } func (x *ListFilesRequest) GetRepository() *Repository { @@ -1309,7 +1666,7 @@ type ListFilesResponse struct { func (x *ListFilesResponse) Reset() { *x = ListFilesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[16] + mi := &file_commit_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1322,7 +1679,7 @@ func (x *ListFilesResponse) String() string { func (*ListFilesResponse) ProtoMessage() {} func (x *ListFilesResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[16] + mi := &file_commit_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1335,7 +1692,7 @@ func (x *ListFilesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFilesResponse.ProtoReflect.Descriptor instead. func (*ListFilesResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{16} + return file_commit_proto_rawDescGZIP(), []int{20} } func (x *ListFilesResponse) GetPaths() [][]byte { @@ -1358,7 +1715,7 @@ type FindCommitRequest struct { func (x *FindCommitRequest) Reset() { *x = FindCommitRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[17] + mi := &file_commit_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1371,7 +1728,7 @@ func (x *FindCommitRequest) String() string { func (*FindCommitRequest) ProtoMessage() {} func (x *FindCommitRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[17] + mi := &file_commit_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1384,7 +1741,7 @@ func (x *FindCommitRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FindCommitRequest.ProtoReflect.Descriptor instead. func (*FindCommitRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{17} + return file_commit_proto_rawDescGZIP(), []int{21} } func (x *FindCommitRequest) GetRepository() *Repository { @@ -1420,7 +1777,7 @@ type FindCommitResponse struct { func (x *FindCommitResponse) Reset() { *x = FindCommitResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[18] + mi := &file_commit_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1433,7 +1790,7 @@ func (x *FindCommitResponse) String() string { func (*FindCommitResponse) ProtoMessage() {} func (x *FindCommitResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[18] + mi := &file_commit_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1446,7 +1803,7 @@ func (x *FindCommitResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FindCommitResponse.ProtoReflect.Descriptor instead. func (*FindCommitResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{18} + return file_commit_proto_rawDescGZIP(), []int{22} } func (x *FindCommitResponse) GetCommit() *GitCommit { @@ -1468,7 +1825,7 @@ type ListCommitsByOidRequest struct { func (x *ListCommitsByOidRequest) Reset() { *x = ListCommitsByOidRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[19] + mi := &file_commit_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1481,7 +1838,7 @@ func (x *ListCommitsByOidRequest) String() string { func (*ListCommitsByOidRequest) ProtoMessage() {} func (x *ListCommitsByOidRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[19] + mi := &file_commit_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1494,7 +1851,7 @@ func (x *ListCommitsByOidRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListCommitsByOidRequest.ProtoReflect.Descriptor instead. func (*ListCommitsByOidRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{19} + return file_commit_proto_rawDescGZIP(), []int{23} } func (x *ListCommitsByOidRequest) GetRepository() *Repository { @@ -1522,7 +1879,7 @@ type ListCommitsByOidResponse struct { func (x *ListCommitsByOidResponse) Reset() { *x = ListCommitsByOidResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[20] + mi := &file_commit_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1535,7 +1892,7 @@ func (x *ListCommitsByOidResponse) String() string { func (*ListCommitsByOidResponse) ProtoMessage() {} func (x *ListCommitsByOidResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[20] + mi := &file_commit_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1548,7 +1905,7 @@ func (x *ListCommitsByOidResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListCommitsByOidResponse.ProtoReflect.Descriptor instead. func (*ListCommitsByOidResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{20} + return file_commit_proto_rawDescGZIP(), []int{24} } func (x *ListCommitsByOidResponse) GetCommits() []*GitCommit { @@ -1570,7 +1927,7 @@ type ListCommitsByRefNameRequest struct { func (x *ListCommitsByRefNameRequest) Reset() { *x = ListCommitsByRefNameRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[21] + mi := &file_commit_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1583,7 +1940,7 @@ func (x *ListCommitsByRefNameRequest) String() string { func (*ListCommitsByRefNameRequest) ProtoMessage() {} func (x *ListCommitsByRefNameRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[21] + mi := &file_commit_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1596,7 +1953,7 @@ func (x *ListCommitsByRefNameRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListCommitsByRefNameRequest.ProtoReflect.Descriptor instead. func (*ListCommitsByRefNameRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{21} + return file_commit_proto_rawDescGZIP(), []int{25} } func (x *ListCommitsByRefNameRequest) GetRepository() *Repository { @@ -1624,7 +1981,7 @@ type ListCommitsByRefNameResponse struct { func (x *ListCommitsByRefNameResponse) Reset() { *x = ListCommitsByRefNameResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[22] + mi := &file_commit_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1637,7 +1994,7 @@ func (x *ListCommitsByRefNameResponse) String() string { func (*ListCommitsByRefNameResponse) ProtoMessage() {} func (x *ListCommitsByRefNameResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[22] + mi := &file_commit_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1650,7 +2007,7 @@ func (x *ListCommitsByRefNameResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListCommitsByRefNameResponse.ProtoReflect.Descriptor instead. func (*ListCommitsByRefNameResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{22} + return file_commit_proto_rawDescGZIP(), []int{26} } func (x *ListCommitsByRefNameResponse) GetCommitRefs() []*ListCommitsByRefNameResponse_CommitForRef { @@ -1676,7 +2033,7 @@ type FindAllCommitsRequest struct { func (x *FindAllCommitsRequest) Reset() { *x = FindAllCommitsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[23] + mi := &file_commit_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1689,7 +2046,7 @@ func (x *FindAllCommitsRequest) String() string { func (*FindAllCommitsRequest) ProtoMessage() {} func (x *FindAllCommitsRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[23] + mi := &file_commit_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1702,7 +2059,7 @@ func (x *FindAllCommitsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FindAllCommitsRequest.ProtoReflect.Descriptor instead. func (*FindAllCommitsRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{23} + return file_commit_proto_rawDescGZIP(), []int{27} } func (x *FindAllCommitsRequest) GetRepository() *Repository { @@ -1752,7 +2109,7 @@ type FindAllCommitsResponse struct { func (x *FindAllCommitsResponse) Reset() { *x = FindAllCommitsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[24] + mi := &file_commit_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1765,7 +2122,7 @@ func (x *FindAllCommitsResponse) String() string { func (*FindAllCommitsResponse) ProtoMessage() {} func (x *FindAllCommitsResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[24] + mi := &file_commit_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1778,7 +2135,7 @@ func (x *FindAllCommitsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FindAllCommitsResponse.ProtoReflect.Descriptor instead. func (*FindAllCommitsResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{24} + return file_commit_proto_rawDescGZIP(), []int{28} } func (x *FindAllCommitsResponse) GetCommits() []*GitCommit { @@ -1815,7 +2172,7 @@ type FindCommitsRequest struct { func (x *FindCommitsRequest) Reset() { *x = FindCommitsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[25] + mi := &file_commit_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1828,7 +2185,7 @@ func (x *FindCommitsRequest) String() string { func (*FindCommitsRequest) ProtoMessage() {} func (x *FindCommitsRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[25] + mi := &file_commit_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1841,7 +2198,7 @@ func (x *FindCommitsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FindCommitsRequest.ProtoReflect.Descriptor instead. func (*FindCommitsRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{25} + return file_commit_proto_rawDescGZIP(), []int{29} } func (x *FindCommitsRequest) GetRepository() *Repository { @@ -1968,7 +2325,7 @@ type FindCommitsResponse struct { func (x *FindCommitsResponse) Reset() { *x = FindCommitsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[26] + mi := &file_commit_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1981,7 +2338,7 @@ func (x *FindCommitsResponse) String() string { func (*FindCommitsResponse) ProtoMessage() {} func (x *FindCommitsResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[26] + mi := &file_commit_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1994,7 +2351,7 @@ func (x *FindCommitsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FindCommitsResponse.ProtoReflect.Descriptor instead. func (*FindCommitsResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{26} + return file_commit_proto_rawDescGZIP(), []int{30} } func (x *FindCommitsResponse) GetCommits() []*GitCommit { @@ -2016,7 +2373,7 @@ type CommitLanguagesRequest struct { func (x *CommitLanguagesRequest) Reset() { *x = CommitLanguagesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[27] + mi := &file_commit_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2029,7 +2386,7 @@ func (x *CommitLanguagesRequest) String() string { func (*CommitLanguagesRequest) ProtoMessage() {} func (x *CommitLanguagesRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[27] + mi := &file_commit_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2042,7 +2399,7 @@ func (x *CommitLanguagesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CommitLanguagesRequest.ProtoReflect.Descriptor instead. func (*CommitLanguagesRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{27} + return file_commit_proto_rawDescGZIP(), []int{31} } func (x *CommitLanguagesRequest) GetRepository() *Repository { @@ -2070,7 +2427,7 @@ type CommitLanguagesResponse struct { func (x *CommitLanguagesResponse) Reset() { *x = CommitLanguagesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[28] + mi := &file_commit_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2083,7 +2440,7 @@ func (x *CommitLanguagesResponse) String() string { func (*CommitLanguagesResponse) ProtoMessage() {} func (x *CommitLanguagesResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[28] + mi := &file_commit_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2096,7 +2453,7 @@ func (x *CommitLanguagesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CommitLanguagesResponse.ProtoReflect.Descriptor instead. func (*CommitLanguagesResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{28} + return file_commit_proto_rawDescGZIP(), []int{32} } func (x *CommitLanguagesResponse) GetLanguages() []*CommitLanguagesResponse_Language { @@ -2119,7 +2476,7 @@ type RawBlameRequest struct { func (x *RawBlameRequest) Reset() { *x = RawBlameRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[29] + mi := &file_commit_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2132,7 +2489,7 @@ func (x *RawBlameRequest) String() string { func (*RawBlameRequest) ProtoMessage() {} func (x *RawBlameRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[29] + mi := &file_commit_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2145,7 +2502,7 @@ func (x *RawBlameRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RawBlameRequest.ProtoReflect.Descriptor instead. func (*RawBlameRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{29} + return file_commit_proto_rawDescGZIP(), []int{33} } func (x *RawBlameRequest) GetRepository() *Repository { @@ -2180,7 +2537,7 @@ type RawBlameResponse struct { func (x *RawBlameResponse) Reset() { *x = RawBlameResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[30] + mi := &file_commit_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2193,7 +2550,7 @@ func (x *RawBlameResponse) String() string { func (*RawBlameResponse) ProtoMessage() {} func (x *RawBlameResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[30] + mi := &file_commit_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2206,7 +2563,7 @@ func (x *RawBlameResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RawBlameResponse.ProtoReflect.Descriptor instead. func (*RawBlameResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{30} + return file_commit_proto_rawDescGZIP(), []int{34} } func (x *RawBlameResponse) GetData() []byte { @@ -2231,7 +2588,7 @@ type LastCommitForPathRequest struct { func (x *LastCommitForPathRequest) Reset() { *x = LastCommitForPathRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[31] + mi := &file_commit_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2244,7 +2601,7 @@ func (x *LastCommitForPathRequest) String() string { func (*LastCommitForPathRequest) ProtoMessage() {} func (x *LastCommitForPathRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[31] + mi := &file_commit_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2257,7 +2614,7 @@ func (x *LastCommitForPathRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LastCommitForPathRequest.ProtoReflect.Descriptor instead. func (*LastCommitForPathRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{31} + return file_commit_proto_rawDescGZIP(), []int{35} } func (x *LastCommitForPathRequest) GetRepository() *Repository { @@ -2307,7 +2664,7 @@ type LastCommitForPathResponse struct { func (x *LastCommitForPathResponse) Reset() { *x = LastCommitForPathResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[32] + mi := &file_commit_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2320,7 +2677,7 @@ func (x *LastCommitForPathResponse) String() string { func (*LastCommitForPathResponse) ProtoMessage() {} func (x *LastCommitForPathResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[32] + mi := &file_commit_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2333,7 +2690,7 @@ func (x *LastCommitForPathResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LastCommitForPathResponse.ProtoReflect.Descriptor instead. func (*LastCommitForPathResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{32} + return file_commit_proto_rawDescGZIP(), []int{36} } func (x *LastCommitForPathResponse) GetCommit() *GitCommit { @@ -2361,7 +2718,7 @@ type ListLastCommitsForTreeRequest struct { func (x *ListLastCommitsForTreeRequest) Reset() { *x = ListLastCommitsForTreeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[33] + mi := &file_commit_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2374,7 +2731,7 @@ func (x *ListLastCommitsForTreeRequest) String() string { func (*ListLastCommitsForTreeRequest) ProtoMessage() {} func (x *ListLastCommitsForTreeRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[33] + mi := &file_commit_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2387,7 +2744,7 @@ func (x *ListLastCommitsForTreeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListLastCommitsForTreeRequest.ProtoReflect.Descriptor instead. func (*ListLastCommitsForTreeRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{33} + return file_commit_proto_rawDescGZIP(), []int{37} } func (x *ListLastCommitsForTreeRequest) GetRepository() *Repository { @@ -2451,7 +2808,7 @@ type ListLastCommitsForTreeResponse struct { func (x *ListLastCommitsForTreeResponse) Reset() { *x = ListLastCommitsForTreeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[34] + mi := &file_commit_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2464,7 +2821,7 @@ func (x *ListLastCommitsForTreeResponse) String() string { func (*ListLastCommitsForTreeResponse) ProtoMessage() {} func (x *ListLastCommitsForTreeResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[34] + mi := &file_commit_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2477,7 +2834,7 @@ func (x *ListLastCommitsForTreeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListLastCommitsForTreeResponse.ProtoReflect.Descriptor instead. func (*ListLastCommitsForTreeResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{34} + return file_commit_proto_rawDescGZIP(), []int{38} } func (x *ListLastCommitsForTreeResponse) GetCommits() []*ListLastCommitsForTreeResponse_CommitForTree { @@ -2504,7 +2861,7 @@ type CommitsByMessageRequest struct { func (x *CommitsByMessageRequest) Reset() { *x = CommitsByMessageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[35] + mi := &file_commit_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2517,7 +2874,7 @@ func (x *CommitsByMessageRequest) String() string { func (*CommitsByMessageRequest) ProtoMessage() {} func (x *CommitsByMessageRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[35] + mi := &file_commit_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2530,7 +2887,7 @@ func (x *CommitsByMessageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CommitsByMessageRequest.ProtoReflect.Descriptor instead. func (*CommitsByMessageRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{35} + return file_commit_proto_rawDescGZIP(), []int{39} } func (x *CommitsByMessageRequest) GetRepository() *Repository { @@ -2594,7 +2951,7 @@ type CommitsByMessageResponse struct { func (x *CommitsByMessageResponse) Reset() { *x = CommitsByMessageResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[36] + mi := &file_commit_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2607,7 +2964,7 @@ func (x *CommitsByMessageResponse) String() string { func (*CommitsByMessageResponse) ProtoMessage() {} func (x *CommitsByMessageResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[36] + mi := &file_commit_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2620,7 +2977,7 @@ func (x *CommitsByMessageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CommitsByMessageResponse.ProtoReflect.Descriptor instead. func (*CommitsByMessageResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{36} + return file_commit_proto_rawDescGZIP(), []int{40} } func (x *CommitsByMessageResponse) GetCommits() []*GitCommit { @@ -2642,7 +2999,7 @@ type FilterShasWithSignaturesRequest struct { func (x *FilterShasWithSignaturesRequest) Reset() { *x = FilterShasWithSignaturesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[37] + mi := &file_commit_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2655,7 +3012,7 @@ func (x *FilterShasWithSignaturesRequest) String() string { func (*FilterShasWithSignaturesRequest) ProtoMessage() {} func (x *FilterShasWithSignaturesRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[37] + mi := &file_commit_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2668,7 +3025,7 @@ func (x *FilterShasWithSignaturesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FilterShasWithSignaturesRequest.ProtoReflect.Descriptor instead. func (*FilterShasWithSignaturesRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{37} + return file_commit_proto_rawDescGZIP(), []int{41} } func (x *FilterShasWithSignaturesRequest) GetRepository() *Repository { @@ -2696,7 +3053,7 @@ type FilterShasWithSignaturesResponse struct { func (x *FilterShasWithSignaturesResponse) Reset() { *x = FilterShasWithSignaturesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[38] + mi := &file_commit_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2709,7 +3066,7 @@ func (x *FilterShasWithSignaturesResponse) String() string { func (*FilterShasWithSignaturesResponse) ProtoMessage() {} func (x *FilterShasWithSignaturesResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[38] + mi := &file_commit_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2722,7 +3079,7 @@ func (x *FilterShasWithSignaturesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FilterShasWithSignaturesResponse.ProtoReflect.Descriptor instead. func (*FilterShasWithSignaturesResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{38} + return file_commit_proto_rawDescGZIP(), []int{42} } func (x *FilterShasWithSignaturesResponse) GetShas() [][]byte { @@ -2744,7 +3101,7 @@ type ExtractCommitSignatureRequest struct { func (x *ExtractCommitSignatureRequest) Reset() { *x = ExtractCommitSignatureRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[39] + mi := &file_commit_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2757,7 +3114,7 @@ func (x *ExtractCommitSignatureRequest) String() string { func (*ExtractCommitSignatureRequest) ProtoMessage() {} func (x *ExtractCommitSignatureRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[39] + mi := &file_commit_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2770,7 +3127,7 @@ func (x *ExtractCommitSignatureRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExtractCommitSignatureRequest.ProtoReflect.Descriptor instead. func (*ExtractCommitSignatureRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{39} + return file_commit_proto_rawDescGZIP(), []int{43} } func (x *ExtractCommitSignatureRequest) GetRepository() *Repository { @@ -2801,7 +3158,7 @@ type ExtractCommitSignatureResponse struct { func (x *ExtractCommitSignatureResponse) Reset() { *x = ExtractCommitSignatureResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[40] + mi := &file_commit_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2814,7 +3171,7 @@ func (x *ExtractCommitSignatureResponse) String() string { func (*ExtractCommitSignatureResponse) ProtoMessage() {} func (x *ExtractCommitSignatureResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[40] + mi := &file_commit_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2827,7 +3184,7 @@ func (x *ExtractCommitSignatureResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ExtractCommitSignatureResponse.ProtoReflect.Descriptor instead. func (*ExtractCommitSignatureResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{40} + return file_commit_proto_rawDescGZIP(), []int{44} } func (x *ExtractCommitSignatureResponse) GetSignature() []byte { @@ -2856,7 +3213,7 @@ type GetCommitSignaturesRequest struct { func (x *GetCommitSignaturesRequest) Reset() { *x = GetCommitSignaturesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[41] + mi := &file_commit_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2869,7 +3226,7 @@ func (x *GetCommitSignaturesRequest) String() string { func (*GetCommitSignaturesRequest) ProtoMessage() {} func (x *GetCommitSignaturesRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[41] + mi := &file_commit_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2882,7 +3239,7 @@ func (x *GetCommitSignaturesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCommitSignaturesRequest.ProtoReflect.Descriptor instead. func (*GetCommitSignaturesRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{41} + return file_commit_proto_rawDescGZIP(), []int{45} } func (x *GetCommitSignaturesRequest) GetRepository() *Repository { @@ -2914,7 +3271,7 @@ type GetCommitSignaturesResponse struct { func (x *GetCommitSignaturesResponse) Reset() { *x = GetCommitSignaturesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[42] + mi := &file_commit_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2927,7 +3284,7 @@ func (x *GetCommitSignaturesResponse) String() string { func (*GetCommitSignaturesResponse) ProtoMessage() {} func (x *GetCommitSignaturesResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[42] + mi := &file_commit_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2940,7 +3297,7 @@ func (x *GetCommitSignaturesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCommitSignaturesResponse.ProtoReflect.Descriptor instead. func (*GetCommitSignaturesResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{42} + return file_commit_proto_rawDescGZIP(), []int{46} } func (x *GetCommitSignaturesResponse) GetCommitId() string { @@ -2976,7 +3333,7 @@ type GetCommitMessagesRequest struct { func (x *GetCommitMessagesRequest) Reset() { *x = GetCommitMessagesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[43] + mi := &file_commit_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2989,7 +3346,7 @@ func (x *GetCommitMessagesRequest) String() string { func (*GetCommitMessagesRequest) ProtoMessage() {} func (x *GetCommitMessagesRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[43] + mi := &file_commit_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3002,7 +3359,7 @@ func (x *GetCommitMessagesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCommitMessagesRequest.ProtoReflect.Descriptor instead. func (*GetCommitMessagesRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{43} + return file_commit_proto_rawDescGZIP(), []int{47} } func (x *GetCommitMessagesRequest) GetRepository() *Repository { @@ -3032,7 +3389,7 @@ type GetCommitMessagesResponse struct { func (x *GetCommitMessagesResponse) Reset() { *x = GetCommitMessagesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[44] + mi := &file_commit_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3045,7 +3402,7 @@ func (x *GetCommitMessagesResponse) String() string { func (*GetCommitMessagesResponse) ProtoMessage() {} func (x *GetCommitMessagesResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[44] + mi := &file_commit_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3058,7 +3415,7 @@ func (x *GetCommitMessagesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCommitMessagesResponse.ProtoReflect.Descriptor instead. func (*GetCommitMessagesResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{44} + return file_commit_proto_rawDescGZIP(), []int{48} } func (x *GetCommitMessagesResponse) GetCommitId() string { @@ -3087,7 +3444,7 @@ type ListCommitsByRefNameResponse_CommitForRef struct { func (x *ListCommitsByRefNameResponse_CommitForRef) Reset() { *x = ListCommitsByRefNameResponse_CommitForRef{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[45] + mi := &file_commit_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3100,7 +3457,7 @@ func (x *ListCommitsByRefNameResponse_CommitForRef) String() string { func (*ListCommitsByRefNameResponse_CommitForRef) ProtoMessage() {} func (x *ListCommitsByRefNameResponse_CommitForRef) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[45] + mi := &file_commit_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3113,7 +3470,7 @@ func (x *ListCommitsByRefNameResponse_CommitForRef) ProtoReflect() protoreflect. // Deprecated: Use ListCommitsByRefNameResponse_CommitForRef.ProtoReflect.Descriptor instead. func (*ListCommitsByRefNameResponse_CommitForRef) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{22, 0} + return file_commit_proto_rawDescGZIP(), []int{26, 0} } func (x *ListCommitsByRefNameResponse_CommitForRef) GetCommit() *GitCommit { @@ -3145,7 +3502,7 @@ type CommitLanguagesResponse_Language struct { func (x *CommitLanguagesResponse_Language) Reset() { *x = CommitLanguagesResponse_Language{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[46] + mi := &file_commit_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3158,7 +3515,7 @@ func (x *CommitLanguagesResponse_Language) String() string { func (*CommitLanguagesResponse_Language) ProtoMessage() {} func (x *CommitLanguagesResponse_Language) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[46] + mi := &file_commit_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3171,7 +3528,7 @@ func (x *CommitLanguagesResponse_Language) ProtoReflect() protoreflect.Message { // Deprecated: Use CommitLanguagesResponse_Language.ProtoReflect.Descriptor instead. func (*CommitLanguagesResponse_Language) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{28, 0} + return file_commit_proto_rawDescGZIP(), []int{32, 0} } func (x *CommitLanguagesResponse_Language) GetName() string { @@ -3221,7 +3578,7 @@ type ListLastCommitsForTreeResponse_CommitForTree struct { func (x *ListLastCommitsForTreeResponse_CommitForTree) Reset() { *x = ListLastCommitsForTreeResponse_CommitForTree{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[47] + mi := &file_commit_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3234,7 +3591,7 @@ func (x *ListLastCommitsForTreeResponse_CommitForTree) String() string { func (*ListLastCommitsForTreeResponse_CommitForTree) ProtoMessage() {} func (x *ListLastCommitsForTreeResponse_CommitForTree) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[47] + mi := &file_commit_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3247,7 +3604,7 @@ func (x *ListLastCommitsForTreeResponse_CommitForTree) ProtoReflect() protorefle // Deprecated: Use ListLastCommitsForTreeResponse_CommitForTree.ProtoReflect.Descriptor instead. func (*ListLastCommitsForTreeResponse_CommitForTree) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{34, 0} + return file_commit_proto_rawDescGZIP(), []int{38, 0} } func (x *ListLastCommitsForTreeResponse_CommitForTree) GetCommit() *GitCommit { @@ -3272,547 +3629,608 @@ var file_commit_proto_rawDesc = []byte{ 0x74, 0x6f, 0x1a, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0x6a, 0x0a, 0x12, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, - 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, - 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x63, 0x0a, - 0x13, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x61, 0x64, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x22, 0x8f, 0x01, 0x0a, 0x17, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x73, 0x41, - 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, - 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6e, 0x63, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, - 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x69, - 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x69, - 0x6c, 0x64, 0x49, 0x64, 0x22, 0x30, 0x0a, 0x18, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x73, - 0x41, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xad, 0x01, 0x0a, 0x10, 0x54, 0x72, 0x65, 0x65, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6d, - 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, - 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x22, 0xd2, 0x01, 0x0a, 0x11, 0x54, 0x72, 0x65, 0x65, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x2e, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x22, 0x35, 0x0a, 0x0a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x00, 0x12, 0x08, - 0x0a, 0x04, 0x42, 0x4c, 0x4f, 0x42, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x45, 0x45, - 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x41, 0x47, 0x10, 0x03, 0x22, 0xbf, 0x01, 0x0a, 0x15, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, - 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, - 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x66, - 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x02, 0x74, 0x6f, 0x12, 0x48, 0x0a, 0x11, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x10, 0x70, 0x61, 0x67, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x45, 0x0a, - 0x16, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, - 0x79, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x73, 0x22, 0xf5, 0x02, 0x0a, 0x13, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, + 0x6f, 0x22, 0xfa, 0x03, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, + 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x48, 0x0a, 0x11, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x10, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x36, 0x0a, 0x05, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, + 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72, 0x64, + 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x50, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x77, + 0x61, 0x6c, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x61, 0x62, + 0x6c, 0x65, 0x57, 0x61, 0x6c, 0x6b, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x66, 0x69, + 0x72, 0x73, 0x74, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x05, 0x61, 0x66, 0x74, + 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x06, 0x62, + 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x22, 0x25, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, + 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x4f, + 0x50, 0x4f, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x41, 0x54, 0x45, 0x10, 0x02, 0x22, 0x42, + 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x73, 0x22, 0x9b, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x61, - 0x66, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, - 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x66, - 0x69, 0x72, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0b, 0x66, 0x69, 0x72, 0x73, 0x74, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x3c, - 0x0a, 0x0e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, - 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x67, - 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x2c, 0x0a, 0x14, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xab, 0x01, 0x0a, 0x1c, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x69, 0x76, 0x65, 0x72, 0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, + 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x48, 0x0a, 0x11, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x10, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x22, 0x45, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x22, 0x6a, 0x0a, 0x12, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, + 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x22, 0x63, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, + 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, + 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x64, + 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8f, 0x01, 0x0a, 0x17, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x49, 0x73, 0x41, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, + 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1f, + 0x0a, 0x0b, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x12, + 0x19, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x30, 0x0a, 0x18, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x73, 0x41, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xad, 0x01, 0x0a, + 0x10, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, + 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x22, 0xd2, 0x01, 0x0a, + 0x11, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x6f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, + 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x35, 0x0a, 0x0a, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, + 0x49, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4c, 0x4f, 0x42, 0x10, 0x01, 0x12, 0x08, + 0x0a, 0x04, 0x54, 0x52, 0x45, 0x45, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x41, 0x47, 0x10, + 0x03, 0x22, 0xbf, 0x01, 0x0a, 0x15, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x65, 0x74, + 0x77, 0x65, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x61, - 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, - 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0x5f, 0x0a, 0x1d, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x44, 0x69, 0x76, 0x65, 0x72, 0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x65, 0x66, - 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6c, - 0x65, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x69, 0x67, 0x68, - 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xfa, 0x01, 0x0a, 0x09, 0x54, 0x72, - 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x6f, - 0x74, 0x5f, 0x6f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x6f, 0x6f, - 0x74, 0x4f, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, - 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x6f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4f, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, - 0x66, 0x6c, 0x61, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x08, 0x66, 0x6c, 0x61, 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2b, 0x0a, 0x09, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4c, 0x4f, 0x42, 0x10, 0x00, - 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x45, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, - 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x03, 0x22, 0x9f, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x72, - 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x48, 0x0a, 0x11, 0x70, 0x61, 0x67, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x61, + 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x52, 0x10, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x22, 0x45, 0x0a, 0x16, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x65, + 0x74, 0x77, 0x65, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, + 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x22, 0xf5, 0x02, 0x0a, 0x13, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, + 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, + 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, + 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x05, 0x61, 0x66, 0x74, 0x65, + 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x06, 0x62, 0x65, + 0x66, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, + 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x66, 0x69, 0x72, 0x73, 0x74, 0x50, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x0e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x22, 0x2c, 0x0a, 0x14, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x22, 0xab, 0x01, 0x0a, 0x1c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x69, 0x76, 0x65, 0x72, 0x67, + 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, + 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x66, + 0x72, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, + 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x74, 0x6f, 0x12, + 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x04, + 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0x5f, + 0x0a, 0x1d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x69, 0x76, 0x65, 0x72, 0x67, 0x69, 0x6e, 0x67, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x1d, 0x0a, 0x0a, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x6c, 0x65, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, + 0x0a, 0x0b, 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, + 0xfa, 0x01, 0x0a, 0x09, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x12, + 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x6f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x72, 0x6f, 0x6f, 0x74, 0x4f, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x2f, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x6d, + 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x6f, 0x69, + 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4f, + 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x6c, 0x61, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x66, 0x6c, 0x61, 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, + 0x2b, 0x0a, 0x09, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, + 0x42, 0x4c, 0x4f, 0x42, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x45, 0x45, 0x10, 0x01, + 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x03, 0x22, 0x9f, 0x01, 0x0a, + 0x15, 0x47, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, + 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, + 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, + 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x22, 0x45, + 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x69, 0x74, 0x61, + 0x6c, 0x79, 0x2e, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x68, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, + 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, + 0x29, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0c, 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x11, 0x46, + 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, - 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, - 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x22, 0x45, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, - 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x54, 0x72, 0x65, - 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, - 0x68, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, - 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, - 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x29, 0x0a, 0x11, 0x4c, 0x69, 0x73, - 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x05, 0x70, - 0x61, 0x74, 0x68, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x11, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, - 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x65, 0x72, 0x73, 0x22, 0x3f, 0x0a, 0x12, - 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x69, 0x74, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x22, 0x65, 0x0a, - 0x17, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4f, 0x69, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, - 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x03, 0x6f, 0x69, 0x64, 0x22, 0x47, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x73, 0x42, 0x79, 0x4f, 0x69, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2b, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x22, 0x74, 0x0a, - 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x52, 0x65, - 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, - 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x66, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x22, 0xce, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x73, 0x42, 0x79, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x72, - 0x65, 0x66, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, - 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x66, 0x52, 0x0a, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x66, 0x73, 0x1a, 0x54, 0x0a, 0x0c, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x66, 0x12, 0x29, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x65, + 0x72, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x65, + 0x72, 0x73, 0x22, 0x3f, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x66, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x72, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x4a, 0x04, - 0x08, 0x01, 0x10, 0x02, 0x22, 0x80, 0x02, 0x0a, 0x15, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, + 0x6d, 0x69, 0x74, 0x22, 0x65, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x73, 0x42, 0x79, 0x4f, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x73, 0x6b, 0x69, 0x70, 0x12, 0x39, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, - 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x22, 0x25, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, - 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x4f, 0x50, 0x4f, 0x10, 0x01, 0x12, 0x08, 0x0a, - 0x04, 0x44, 0x41, 0x54, 0x45, 0x10, 0x02, 0x22, 0x45, 0x0a, 0x16, 0x46, 0x69, 0x6e, 0x64, 0x41, - 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x69, 0x74, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x22, 0xec, - 0x04, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, - 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, - 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x74, - 0x68, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x12, - 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6b, 0x69, 0x70, 0x5f, - 0x6d, 0x65, 0x72, 0x67, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x6b, - 0x69, 0x70, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x61, 0x6c, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x61, 0x6c, 0x6b, 0x12, 0x30, 0x0a, 0x05, 0x61, - 0x66, 0x74, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, - 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, - 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, - 0x61, 0x6c, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x66, 0x69, 0x72, 0x73, 0x74, - 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x12, 0x36, - 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x22, 0x47, 0x0a, 0x18, 0x4c, 0x69, + 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4f, 0x69, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x73, 0x22, 0x74, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x73, 0x42, 0x79, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, + 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x09, + 0x72, 0x65, 0x66, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, + 0x08, 0x72, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0xce, 0x01, 0x0a, 0x1c, 0x4c, 0x69, + 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x52, 0x65, 0x66, 0x4e, 0x61, + 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x31, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x52, + 0x65, 0x66, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x66, 0x73, 0x1a, 0x54, + 0x0a, 0x0c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x66, 0x12, 0x29, + 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x66, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x72, 0x65, 0x66, + 0x4e, 0x61, 0x6d, 0x65, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x80, 0x02, 0x0a, 0x15, 0x46, + 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, + 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, + 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, + 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, + 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x12, 0x39, 0x0a, 0x05, 0x6f, + 0x72, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, - 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x0e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, - 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x65, 0x72, 0x73, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x65, 0x72, 0x73, - 0x22, 0x1b, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, - 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x4f, 0x50, 0x4f, 0x10, 0x01, 0x22, 0x42, 0x0a, - 0x13, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, - 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x73, 0x22, 0x6e, 0x0a, 0x16, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, - 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, + 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x25, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, + 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x4f, 0x50, + 0x4f, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x41, 0x54, 0x45, 0x10, 0x02, 0x22, 0x45, 0x0a, + 0x16, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x73, 0x22, 0xec, 0x04, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0xe2, 0x01, 0x0a, 0x17, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x61, 0x6e, 0x67, - 0x75, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, - 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x52, 0x09, 0x6c, 0x61, 0x6e, 0x67, - 0x75, 0x61, 0x67, 0x65, 0x73, 0x1a, 0x7f, 0x0a, 0x08, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, - 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x22, 0x7b, 0x0a, 0x0f, 0x52, 0x61, 0x77, 0x42, 0x6c, 0x61, - 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, - 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x22, 0x26, 0x0a, 0x10, 0x52, 0x61, 0x77, 0x42, 0x6c, 0x61, 0x6d, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xed, 0x01, 0x0a, 0x18, - 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, - 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, - 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, - 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, - 0x74, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x70, 0x61, - 0x74, 0x68, 0x73, 0x70, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6c, 0x69, - 0x74, 0x65, 0x72, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x73, 0x70, 0x65, 0x63, 0x12, 0x3c, 0x0a, - 0x0e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, - 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x67, 0x6c, - 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x46, 0x0a, 0x19, 0x4c, - 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x61, 0x74, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, - 0x79, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x22, 0xa4, 0x02, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, - 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, - 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, - 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x2d, 0x0a, - 0x10, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x70, 0x65, - 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0f, 0x6c, 0x69, 0x74, - 0x65, 0x72, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x73, 0x70, 0x65, 0x63, 0x12, 0x3c, 0x0a, 0x0e, - 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, + 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x05, + 0x70, 0x61, 0x74, 0x68, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x1f, 0x0a, + 0x0b, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0a, 0x73, 0x6b, 0x69, 0x70, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x73, 0x12, 0x21, + 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x61, 0x6c, 0x6b, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x61, 0x6c, + 0x6b, 0x12, 0x30, 0x0a, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x61, 0x66, + 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x69, 0x72, + 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0b, 0x66, 0x69, 0x72, 0x73, 0x74, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x12, 0x36, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, + 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x0e, + 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x67, 0x6c, 0x6f, - 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xd7, 0x01, 0x0a, 0x1e, 0x4c, - 0x69, 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x46, 0x6f, - 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, - 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, - 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, - 0x54, 0x72, 0x65, 0x65, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x1a, 0x65, 0x0a, - 0x0d, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x54, 0x72, 0x65, 0x65, 0x12, 0x29, - 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, - 0x61, 0x74, 0x68, 0x42, 0x79, 0x74, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, - 0x08, 0x03, 0x10, 0x04, 0x22, 0x85, 0x02, 0x0a, 0x17, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, - 0x42, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, - 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x3c, - 0x0a, 0x0e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, - 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x67, - 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x47, 0x0a, 0x18, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x22, 0x6f, 0x0a, 0x1f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, - 0x68, 0x61, 0x73, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, - 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, - 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x68, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, - 0x52, 0x04, 0x73, 0x68, 0x61, 0x73, 0x22, 0x36, 0x0a, 0x20, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x53, 0x68, 0x61, 0x73, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x68, - 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x04, 0x73, 0x68, 0x61, 0x73, 0x22, 0x76, - 0x0a, 0x1d, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x72, + 0x61, 0x69, 0x6c, 0x65, 0x72, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x72, + 0x61, 0x69, 0x6c, 0x65, 0x72, 0x73, 0x22, 0x1b, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, + 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x4f, 0x50, + 0x4f, 0x10, 0x01, 0x22, 0x42, 0x0a, 0x13, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x22, 0x6e, 0x0a, 0x16, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, + 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xe2, 0x01, 0x0a, 0x17, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, + 0x52, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x1a, 0x7f, 0x0a, 0x08, 0x4c, + 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x68, 0x61, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x69, 0x6c, + 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x22, 0x7b, 0x0a, 0x0f, + 0x52, 0x61, 0x77, 0x42, 0x6c, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x64, 0x22, 0x5f, 0x0a, 0x1e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, - 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, - 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x73, 0x69, 0x67, - 0x6e, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x22, 0x75, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, - 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x64, 0x73, 0x22, 0x79, - 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, - 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x69, 0x67, 0x6e, - 0x65, 0x64, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x73, - 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x22, 0x73, 0x0a, 0x18, 0x47, 0x65, 0x74, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x26, 0x0a, 0x10, 0x52, 0x61, 0x77, + 0x42, 0x6c, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x22, 0xed, 0x01, 0x0a, 0x18, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x46, 0x6f, 0x72, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, + 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x6c, 0x69, 0x74, 0x65, + 0x72, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x70, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0f, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x73, + 0x70, 0x65, 0x63, 0x12, 0x3c, 0x0a, 0x0e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x0d, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x22, 0x46, 0x0a, 0x19, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, + 0x6f, 0x72, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, + 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x22, 0xa4, 0x02, 0x0a, 0x1d, 0x4c, 0x69, + 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x46, 0x6f, 0x72, + 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x12, 0x2d, 0x0a, 0x10, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x70, + 0x61, 0x74, 0x68, 0x73, 0x70, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, + 0x01, 0x52, 0x0f, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x73, 0x70, + 0x65, 0x63, 0x12, 0x3c, 0x0a, 0x0e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x0d, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x22, 0xd7, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x46, 0x6f, 0x72, + 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x73, 0x1a, 0x65, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, + 0x54, 0x72, 0x65, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x69, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, + 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x61, 0x74, 0x68, 0x42, 0x79, 0x74, 0x65, 0x73, 0x4a, 0x04, + 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x85, 0x02, 0x0a, 0x17, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, + 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, + 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, + 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x14, + 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x12, 0x3c, 0x0a, 0x0e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x22, 0x47, 0x0a, 0x18, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, + 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x11, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x22, 0x6f, 0x0a, 0x1f, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x73, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, + 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x68, 0x61, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x04, 0x73, 0x68, 0x61, 0x73, 0x22, 0x36, 0x0a, 0x20, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x73, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x73, 0x68, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x04, + 0x73, 0x68, 0x61, 0x73, 0x22, 0x76, 0x0a, 0x1d, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x64, 0x73, 0x22, 0x52, - 0x0a, 0x19, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x32, 0xb9, 0x0f, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x5d, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x73, - 0x41, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, - 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x73, 0x41, 0x6e, 0x63, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x73, 0x41, 0x6e, 0x63, 0x65, 0x73, - 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, - 0x02, 0x08, 0x02, 0x12, 0x4a, 0x0a, 0x09, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x2e, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, - 0x59, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, - 0x6e, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x73, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x73, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x51, 0x0a, 0x0c, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x1b, 0x2e, 0x67, 0x69, 0x74, + 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x64, 0x22, 0x5f, 0x0a, 0x1e, + 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1f, 0x0a, 0x0b, + 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x22, 0x75, 0x0a, + 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, + 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x49, 0x64, 0x73, 0x22, 0x79, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x64, + 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x22, + 0x73, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, + 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x49, 0x64, 0x73, 0x22, 0x52, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0xe6, 0x10, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x50, 0x0a, 0x0b, 0x4c, 0x69, + 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, + 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x59, 0x0a, 0x0e, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x1d, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, + 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x5d, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x49, 0x73, 0x41, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x12, 0x1f, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x73, 0x41, 0x6e, 0x63, + 0x65, 0x73, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x73, 0x41, 0x6e, + 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, + 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x4a, 0x0a, 0x09, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x54, 0x72, 0x65, + 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, + 0x30, 0x01, 0x12, 0x59, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x65, 0x74, + 0x77, 0x65, 0x65, 0x6e, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x73, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x51, 0x0a, + 0x0c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x1b, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x6c, 0x0a, - 0x15, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x69, 0x76, 0x65, 0x72, 0x67, 0x69, 0x6e, 0x67, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x69, 0x76, 0x65, 0x72, 0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x69, 0x76, 0x65, 0x72, - 0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x59, 0x0a, 0x0e, 0x47, - 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1d, 0x2e, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, - 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, - 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x4a, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x12, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, - 0x30, 0x01, 0x12, 0x4b, 0x0a, 0x0a, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x12, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, - 0x4e, 0x0a, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x1a, - 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, - 0x59, 0x0a, 0x0e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x73, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, - 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, - 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x50, 0x0a, 0x0b, 0x46, 0x69, - 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, - 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x5a, 0x0a, 0x0f, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x12, - 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x47, 0x0a, 0x08, 0x52, 0x61, 0x77, 0x42, - 0x6c, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x61, - 0x77, 0x42, 0x6c, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x61, 0x77, 0x42, 0x6c, 0x61, 0x6d, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, - 0x01, 0x12, 0x60, 0x0a, 0x11, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, - 0x6f, 0x72, 0x50, 0x61, 0x74, 0x68, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, - 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, - 0x79, 0x2e, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, - 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, - 0x02, 0x08, 0x02, 0x12, 0x71, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x54, 0x72, 0x65, 0x65, 0x12, 0x25, 0x2e, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x46, 0x6f, 0x72, - 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, - 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x5f, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x73, 0x42, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, - 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x5f, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4f, 0x69, 0x64, 0x12, 0x1f, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, - 0x42, 0x79, 0x4f, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x73, 0x42, 0x79, 0x4f, 0x69, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, - 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x6b, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, + 0x12, 0x6c, 0x0a, 0x15, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x69, 0x76, 0x65, 0x72, 0x67, 0x69, + 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x61, + 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x69, 0x76, 0x65, 0x72, 0x67, 0x69, 0x6e, + 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x25, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x69, + 0x76, 0x65, 0x72, 0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x59, + 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, + 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x65, + 0x65, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, + 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x4a, 0x0a, 0x09, 0x4c, 0x69, 0x73, + 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, + 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x4b, 0x0a, 0x0a, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x12, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, + 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, + 0x08, 0x02, 0x12, 0x4e, 0x0a, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x73, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, + 0x08, 0x02, 0x12, 0x59, 0x0a, 0x0e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, + 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, + 0x64, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x50, 0x0a, + 0x0b, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x1a, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, + 0x5a, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, + 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x47, 0x0a, 0x08, 0x52, + 0x61, 0x77, 0x42, 0x6c, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x2e, 0x52, 0x61, 0x77, 0x42, 0x6c, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x61, 0x77, 0x42, 0x6c, 0x61, + 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, + 0x08, 0x02, 0x30, 0x01, 0x12, 0x60, 0x0a, 0x11, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x61, 0x74, 0x68, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, + 0x6c, 0x79, 0x2e, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, + 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, + 0x6f, 0x72, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, + 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x71, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, + 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x54, 0x72, 0x65, 0x65, + 0x12, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, + 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x54, 0x72, 0x65, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, + 0x46, 0x6f, 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x5f, 0x0a, 0x10, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, + 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x5f, 0x0a, 0x10, 0x4c, 0x69, + 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4f, 0x69, 0x64, 0x12, 0x1f, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x73, 0x42, 0x79, 0x4f, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4f, 0x69, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x6b, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x52, 0x65, 0x66, 0x4e, - 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, - 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x79, 0x0a, 0x18, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, - 0x68, 0x61, 0x73, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x73, 0x12, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x53, 0x68, 0x61, 0x73, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x73, 0x57, 0x69, - 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x28, 0x01, 0x30, 0x01, - 0x12, 0x68, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x62, 0x0a, 0x11, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, - 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x42, 0x34, - 0x5a, 0x32, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, - 0x6c, 0x61, 0x62, 0x2d, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2f, 0x76, - 0x31, 0x34, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x6d, 0x65, 0x12, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x52, + 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, + 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x79, 0x0a, 0x18, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x53, 0x68, 0x61, 0x73, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x12, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x73, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, + 0x73, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x28, + 0x01, 0x30, 0x01, 0x12, 0x68, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x22, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x62, 0x0a, + 0x11, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, + 0x01, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2d, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2f, 0x76, 0x31, 0x34, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3827,164 +4245,182 @@ func file_commit_proto_rawDescGZIP() []byte { return file_commit_proto_rawDescData } -var file_commit_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_commit_proto_msgTypes = make([]protoimpl.MessageInfo, 48) +var file_commit_proto_enumTypes = make([]protoimpl.EnumInfo, 5) +var file_commit_proto_msgTypes = make([]protoimpl.MessageInfo, 52) var file_commit_proto_goTypes = []interface{}{ - (TreeEntryResponse_ObjectType)(0), // 0: gitaly.TreeEntryResponse.ObjectType - (TreeEntry_EntryType)(0), // 1: gitaly.TreeEntry.EntryType - (FindAllCommitsRequest_Order)(0), // 2: gitaly.FindAllCommitsRequest.Order - (FindCommitsRequest_Order)(0), // 3: gitaly.FindCommitsRequest.Order - (*CommitStatsRequest)(nil), // 4: gitaly.CommitStatsRequest - (*CommitStatsResponse)(nil), // 5: gitaly.CommitStatsResponse - (*CommitIsAncestorRequest)(nil), // 6: gitaly.CommitIsAncestorRequest - (*CommitIsAncestorResponse)(nil), // 7: gitaly.CommitIsAncestorResponse - (*TreeEntryRequest)(nil), // 8: gitaly.TreeEntryRequest - (*TreeEntryResponse)(nil), // 9: gitaly.TreeEntryResponse - (*CommitsBetweenRequest)(nil), // 10: gitaly.CommitsBetweenRequest - (*CommitsBetweenResponse)(nil), // 11: gitaly.CommitsBetweenResponse - (*CountCommitsRequest)(nil), // 12: gitaly.CountCommitsRequest - (*CountCommitsResponse)(nil), // 13: gitaly.CountCommitsResponse - (*CountDivergingCommitsRequest)(nil), // 14: gitaly.CountDivergingCommitsRequest - (*CountDivergingCommitsResponse)(nil), // 15: gitaly.CountDivergingCommitsResponse - (*TreeEntry)(nil), // 16: gitaly.TreeEntry - (*GetTreeEntriesRequest)(nil), // 17: gitaly.GetTreeEntriesRequest - (*GetTreeEntriesResponse)(nil), // 18: gitaly.GetTreeEntriesResponse - (*ListFilesRequest)(nil), // 19: gitaly.ListFilesRequest - (*ListFilesResponse)(nil), // 20: gitaly.ListFilesResponse - (*FindCommitRequest)(nil), // 21: gitaly.FindCommitRequest - (*FindCommitResponse)(nil), // 22: gitaly.FindCommitResponse - (*ListCommitsByOidRequest)(nil), // 23: gitaly.ListCommitsByOidRequest - (*ListCommitsByOidResponse)(nil), // 24: gitaly.ListCommitsByOidResponse - (*ListCommitsByRefNameRequest)(nil), // 25: gitaly.ListCommitsByRefNameRequest - (*ListCommitsByRefNameResponse)(nil), // 26: gitaly.ListCommitsByRefNameResponse - (*FindAllCommitsRequest)(nil), // 27: gitaly.FindAllCommitsRequest - (*FindAllCommitsResponse)(nil), // 28: gitaly.FindAllCommitsResponse - (*FindCommitsRequest)(nil), // 29: gitaly.FindCommitsRequest - (*FindCommitsResponse)(nil), // 30: gitaly.FindCommitsResponse - (*CommitLanguagesRequest)(nil), // 31: gitaly.CommitLanguagesRequest - (*CommitLanguagesResponse)(nil), // 32: gitaly.CommitLanguagesResponse - (*RawBlameRequest)(nil), // 33: gitaly.RawBlameRequest - (*RawBlameResponse)(nil), // 34: gitaly.RawBlameResponse - (*LastCommitForPathRequest)(nil), // 35: gitaly.LastCommitForPathRequest - (*LastCommitForPathResponse)(nil), // 36: gitaly.LastCommitForPathResponse - (*ListLastCommitsForTreeRequest)(nil), // 37: gitaly.ListLastCommitsForTreeRequest - (*ListLastCommitsForTreeResponse)(nil), // 38: gitaly.ListLastCommitsForTreeResponse - (*CommitsByMessageRequest)(nil), // 39: gitaly.CommitsByMessageRequest - (*CommitsByMessageResponse)(nil), // 40: gitaly.CommitsByMessageResponse - (*FilterShasWithSignaturesRequest)(nil), // 41: gitaly.FilterShasWithSignaturesRequest - (*FilterShasWithSignaturesResponse)(nil), // 42: gitaly.FilterShasWithSignaturesResponse - (*ExtractCommitSignatureRequest)(nil), // 43: gitaly.ExtractCommitSignatureRequest - (*ExtractCommitSignatureResponse)(nil), // 44: gitaly.ExtractCommitSignatureResponse - (*GetCommitSignaturesRequest)(nil), // 45: gitaly.GetCommitSignaturesRequest - (*GetCommitSignaturesResponse)(nil), // 46: gitaly.GetCommitSignaturesResponse - (*GetCommitMessagesRequest)(nil), // 47: gitaly.GetCommitMessagesRequest - (*GetCommitMessagesResponse)(nil), // 48: gitaly.GetCommitMessagesResponse - (*ListCommitsByRefNameResponse_CommitForRef)(nil), // 49: gitaly.ListCommitsByRefNameResponse.CommitForRef - (*CommitLanguagesResponse_Language)(nil), // 50: gitaly.CommitLanguagesResponse.Language - (*ListLastCommitsForTreeResponse_CommitForTree)(nil), // 51: gitaly.ListLastCommitsForTreeResponse.CommitForTree - (*Repository)(nil), // 52: gitaly.Repository - (*PaginationParameter)(nil), // 53: gitaly.PaginationParameter - (*GitCommit)(nil), // 54: gitaly.GitCommit - (*timestamppb.Timestamp)(nil), // 55: google.protobuf.Timestamp - (*GlobalOptions)(nil), // 56: gitaly.GlobalOptions + (ListCommitsRequest_Order)(0), // 0: gitaly.ListCommitsRequest.Order + (TreeEntryResponse_ObjectType)(0), // 1: gitaly.TreeEntryResponse.ObjectType + (TreeEntry_EntryType)(0), // 2: gitaly.TreeEntry.EntryType + (FindAllCommitsRequest_Order)(0), // 3: gitaly.FindAllCommitsRequest.Order + (FindCommitsRequest_Order)(0), // 4: gitaly.FindCommitsRequest.Order + (*ListCommitsRequest)(nil), // 5: gitaly.ListCommitsRequest + (*ListCommitsResponse)(nil), // 6: gitaly.ListCommitsResponse + (*ListAllCommitsRequest)(nil), // 7: gitaly.ListAllCommitsRequest + (*ListAllCommitsResponse)(nil), // 8: gitaly.ListAllCommitsResponse + (*CommitStatsRequest)(nil), // 9: gitaly.CommitStatsRequest + (*CommitStatsResponse)(nil), // 10: gitaly.CommitStatsResponse + (*CommitIsAncestorRequest)(nil), // 11: gitaly.CommitIsAncestorRequest + (*CommitIsAncestorResponse)(nil), // 12: gitaly.CommitIsAncestorResponse + (*TreeEntryRequest)(nil), // 13: gitaly.TreeEntryRequest + (*TreeEntryResponse)(nil), // 14: gitaly.TreeEntryResponse + (*CommitsBetweenRequest)(nil), // 15: gitaly.CommitsBetweenRequest + (*CommitsBetweenResponse)(nil), // 16: gitaly.CommitsBetweenResponse + (*CountCommitsRequest)(nil), // 17: gitaly.CountCommitsRequest + (*CountCommitsResponse)(nil), // 18: gitaly.CountCommitsResponse + (*CountDivergingCommitsRequest)(nil), // 19: gitaly.CountDivergingCommitsRequest + (*CountDivergingCommitsResponse)(nil), // 20: gitaly.CountDivergingCommitsResponse + (*TreeEntry)(nil), // 21: gitaly.TreeEntry + (*GetTreeEntriesRequest)(nil), // 22: gitaly.GetTreeEntriesRequest + (*GetTreeEntriesResponse)(nil), // 23: gitaly.GetTreeEntriesResponse + (*ListFilesRequest)(nil), // 24: gitaly.ListFilesRequest + (*ListFilesResponse)(nil), // 25: gitaly.ListFilesResponse + (*FindCommitRequest)(nil), // 26: gitaly.FindCommitRequest + (*FindCommitResponse)(nil), // 27: gitaly.FindCommitResponse + (*ListCommitsByOidRequest)(nil), // 28: gitaly.ListCommitsByOidRequest + (*ListCommitsByOidResponse)(nil), // 29: gitaly.ListCommitsByOidResponse + (*ListCommitsByRefNameRequest)(nil), // 30: gitaly.ListCommitsByRefNameRequest + (*ListCommitsByRefNameResponse)(nil), // 31: gitaly.ListCommitsByRefNameResponse + (*FindAllCommitsRequest)(nil), // 32: gitaly.FindAllCommitsRequest + (*FindAllCommitsResponse)(nil), // 33: gitaly.FindAllCommitsResponse + (*FindCommitsRequest)(nil), // 34: gitaly.FindCommitsRequest + (*FindCommitsResponse)(nil), // 35: gitaly.FindCommitsResponse + (*CommitLanguagesRequest)(nil), // 36: gitaly.CommitLanguagesRequest + (*CommitLanguagesResponse)(nil), // 37: gitaly.CommitLanguagesResponse + (*RawBlameRequest)(nil), // 38: gitaly.RawBlameRequest + (*RawBlameResponse)(nil), // 39: gitaly.RawBlameResponse + (*LastCommitForPathRequest)(nil), // 40: gitaly.LastCommitForPathRequest + (*LastCommitForPathResponse)(nil), // 41: gitaly.LastCommitForPathResponse + (*ListLastCommitsForTreeRequest)(nil), // 42: gitaly.ListLastCommitsForTreeRequest + (*ListLastCommitsForTreeResponse)(nil), // 43: gitaly.ListLastCommitsForTreeResponse + (*CommitsByMessageRequest)(nil), // 44: gitaly.CommitsByMessageRequest + (*CommitsByMessageResponse)(nil), // 45: gitaly.CommitsByMessageResponse + (*FilterShasWithSignaturesRequest)(nil), // 46: gitaly.FilterShasWithSignaturesRequest + (*FilterShasWithSignaturesResponse)(nil), // 47: gitaly.FilterShasWithSignaturesResponse + (*ExtractCommitSignatureRequest)(nil), // 48: gitaly.ExtractCommitSignatureRequest + (*ExtractCommitSignatureResponse)(nil), // 49: gitaly.ExtractCommitSignatureResponse + (*GetCommitSignaturesRequest)(nil), // 50: gitaly.GetCommitSignaturesRequest + (*GetCommitSignaturesResponse)(nil), // 51: gitaly.GetCommitSignaturesResponse + (*GetCommitMessagesRequest)(nil), // 52: gitaly.GetCommitMessagesRequest + (*GetCommitMessagesResponse)(nil), // 53: gitaly.GetCommitMessagesResponse + (*ListCommitsByRefNameResponse_CommitForRef)(nil), // 54: gitaly.ListCommitsByRefNameResponse.CommitForRef + (*CommitLanguagesResponse_Language)(nil), // 55: gitaly.CommitLanguagesResponse.Language + (*ListLastCommitsForTreeResponse_CommitForTree)(nil), // 56: gitaly.ListLastCommitsForTreeResponse.CommitForTree + (*Repository)(nil), // 57: gitaly.Repository + (*PaginationParameter)(nil), // 58: gitaly.PaginationParameter + (*timestamppb.Timestamp)(nil), // 59: google.protobuf.Timestamp + (*GitCommit)(nil), // 60: gitaly.GitCommit + (*GlobalOptions)(nil), // 61: gitaly.GlobalOptions } var file_commit_proto_depIdxs = []int32{ - 52, // 0: gitaly.CommitStatsRequest.repository:type_name -> gitaly.Repository - 52, // 1: gitaly.CommitIsAncestorRequest.repository:type_name -> gitaly.Repository - 52, // 2: gitaly.TreeEntryRequest.repository:type_name -> gitaly.Repository - 0, // 3: gitaly.TreeEntryResponse.type:type_name -> gitaly.TreeEntryResponse.ObjectType - 52, // 4: gitaly.CommitsBetweenRequest.repository:type_name -> gitaly.Repository - 53, // 5: gitaly.CommitsBetweenRequest.pagination_params:type_name -> gitaly.PaginationParameter - 54, // 6: gitaly.CommitsBetweenResponse.commits:type_name -> gitaly.GitCommit - 52, // 7: gitaly.CountCommitsRequest.repository:type_name -> gitaly.Repository - 55, // 8: gitaly.CountCommitsRequest.after:type_name -> google.protobuf.Timestamp - 55, // 9: gitaly.CountCommitsRequest.before:type_name -> google.protobuf.Timestamp - 56, // 10: gitaly.CountCommitsRequest.global_options:type_name -> gitaly.GlobalOptions - 52, // 11: gitaly.CountDivergingCommitsRequest.repository:type_name -> gitaly.Repository - 1, // 12: gitaly.TreeEntry.type:type_name -> gitaly.TreeEntry.EntryType - 52, // 13: gitaly.GetTreeEntriesRequest.repository:type_name -> gitaly.Repository - 16, // 14: gitaly.GetTreeEntriesResponse.entries:type_name -> gitaly.TreeEntry - 52, // 15: gitaly.ListFilesRequest.repository:type_name -> gitaly.Repository - 52, // 16: gitaly.FindCommitRequest.repository:type_name -> gitaly.Repository - 54, // 17: gitaly.FindCommitResponse.commit:type_name -> gitaly.GitCommit - 52, // 18: gitaly.ListCommitsByOidRequest.repository:type_name -> gitaly.Repository - 54, // 19: gitaly.ListCommitsByOidResponse.commits:type_name -> gitaly.GitCommit - 52, // 20: gitaly.ListCommitsByRefNameRequest.repository:type_name -> gitaly.Repository - 49, // 21: gitaly.ListCommitsByRefNameResponse.commit_refs:type_name -> gitaly.ListCommitsByRefNameResponse.CommitForRef - 52, // 22: gitaly.FindAllCommitsRequest.repository:type_name -> gitaly.Repository - 2, // 23: gitaly.FindAllCommitsRequest.order:type_name -> gitaly.FindAllCommitsRequest.Order - 54, // 24: gitaly.FindAllCommitsResponse.commits:type_name -> gitaly.GitCommit - 52, // 25: gitaly.FindCommitsRequest.repository:type_name -> gitaly.Repository - 55, // 26: gitaly.FindCommitsRequest.after:type_name -> google.protobuf.Timestamp - 55, // 27: gitaly.FindCommitsRequest.before:type_name -> google.protobuf.Timestamp - 3, // 28: gitaly.FindCommitsRequest.order:type_name -> gitaly.FindCommitsRequest.Order - 56, // 29: gitaly.FindCommitsRequest.global_options:type_name -> gitaly.GlobalOptions - 54, // 30: gitaly.FindCommitsResponse.commits:type_name -> gitaly.GitCommit - 52, // 31: gitaly.CommitLanguagesRequest.repository:type_name -> gitaly.Repository - 50, // 32: gitaly.CommitLanguagesResponse.languages:type_name -> gitaly.CommitLanguagesResponse.Language - 52, // 33: gitaly.RawBlameRequest.repository:type_name -> gitaly.Repository - 52, // 34: gitaly.LastCommitForPathRequest.repository:type_name -> gitaly.Repository - 56, // 35: gitaly.LastCommitForPathRequest.global_options:type_name -> gitaly.GlobalOptions - 54, // 36: gitaly.LastCommitForPathResponse.commit:type_name -> gitaly.GitCommit - 52, // 37: gitaly.ListLastCommitsForTreeRequest.repository:type_name -> gitaly.Repository - 56, // 38: gitaly.ListLastCommitsForTreeRequest.global_options:type_name -> gitaly.GlobalOptions - 51, // 39: gitaly.ListLastCommitsForTreeResponse.commits:type_name -> gitaly.ListLastCommitsForTreeResponse.CommitForTree - 52, // 40: gitaly.CommitsByMessageRequest.repository:type_name -> gitaly.Repository - 56, // 41: gitaly.CommitsByMessageRequest.global_options:type_name -> gitaly.GlobalOptions - 54, // 42: gitaly.CommitsByMessageResponse.commits:type_name -> gitaly.GitCommit - 52, // 43: gitaly.FilterShasWithSignaturesRequest.repository:type_name -> gitaly.Repository - 52, // 44: gitaly.ExtractCommitSignatureRequest.repository:type_name -> gitaly.Repository - 52, // 45: gitaly.GetCommitSignaturesRequest.repository:type_name -> gitaly.Repository - 52, // 46: gitaly.GetCommitMessagesRequest.repository:type_name -> gitaly.Repository - 54, // 47: gitaly.ListCommitsByRefNameResponse.CommitForRef.commit:type_name -> gitaly.GitCommit - 54, // 48: gitaly.ListLastCommitsForTreeResponse.CommitForTree.commit:type_name -> gitaly.GitCommit - 6, // 49: gitaly.CommitService.CommitIsAncestor:input_type -> gitaly.CommitIsAncestorRequest - 8, // 50: gitaly.CommitService.TreeEntry:input_type -> gitaly.TreeEntryRequest - 10, // 51: gitaly.CommitService.CommitsBetween:input_type -> gitaly.CommitsBetweenRequest - 12, // 52: gitaly.CommitService.CountCommits:input_type -> gitaly.CountCommitsRequest - 14, // 53: gitaly.CommitService.CountDivergingCommits:input_type -> gitaly.CountDivergingCommitsRequest - 17, // 54: gitaly.CommitService.GetTreeEntries:input_type -> gitaly.GetTreeEntriesRequest - 19, // 55: gitaly.CommitService.ListFiles:input_type -> gitaly.ListFilesRequest - 21, // 56: gitaly.CommitService.FindCommit:input_type -> gitaly.FindCommitRequest - 4, // 57: gitaly.CommitService.CommitStats:input_type -> gitaly.CommitStatsRequest - 27, // 58: gitaly.CommitService.FindAllCommits:input_type -> gitaly.FindAllCommitsRequest - 29, // 59: gitaly.CommitService.FindCommits:input_type -> gitaly.FindCommitsRequest - 31, // 60: gitaly.CommitService.CommitLanguages:input_type -> gitaly.CommitLanguagesRequest - 33, // 61: gitaly.CommitService.RawBlame:input_type -> gitaly.RawBlameRequest - 35, // 62: gitaly.CommitService.LastCommitForPath:input_type -> gitaly.LastCommitForPathRequest - 37, // 63: gitaly.CommitService.ListLastCommitsForTree:input_type -> gitaly.ListLastCommitsForTreeRequest - 39, // 64: gitaly.CommitService.CommitsByMessage:input_type -> gitaly.CommitsByMessageRequest - 23, // 65: gitaly.CommitService.ListCommitsByOid:input_type -> gitaly.ListCommitsByOidRequest - 25, // 66: gitaly.CommitService.ListCommitsByRefName:input_type -> gitaly.ListCommitsByRefNameRequest - 41, // 67: gitaly.CommitService.FilterShasWithSignatures:input_type -> gitaly.FilterShasWithSignaturesRequest - 45, // 68: gitaly.CommitService.GetCommitSignatures:input_type -> gitaly.GetCommitSignaturesRequest - 47, // 69: gitaly.CommitService.GetCommitMessages:input_type -> gitaly.GetCommitMessagesRequest - 7, // 70: gitaly.CommitService.CommitIsAncestor:output_type -> gitaly.CommitIsAncestorResponse - 9, // 71: gitaly.CommitService.TreeEntry:output_type -> gitaly.TreeEntryResponse - 11, // 72: gitaly.CommitService.CommitsBetween:output_type -> gitaly.CommitsBetweenResponse - 13, // 73: gitaly.CommitService.CountCommits:output_type -> gitaly.CountCommitsResponse - 15, // 74: gitaly.CommitService.CountDivergingCommits:output_type -> gitaly.CountDivergingCommitsResponse - 18, // 75: gitaly.CommitService.GetTreeEntries:output_type -> gitaly.GetTreeEntriesResponse - 20, // 76: gitaly.CommitService.ListFiles:output_type -> gitaly.ListFilesResponse - 22, // 77: gitaly.CommitService.FindCommit:output_type -> gitaly.FindCommitResponse - 5, // 78: gitaly.CommitService.CommitStats:output_type -> gitaly.CommitStatsResponse - 28, // 79: gitaly.CommitService.FindAllCommits:output_type -> gitaly.FindAllCommitsResponse - 30, // 80: gitaly.CommitService.FindCommits:output_type -> gitaly.FindCommitsResponse - 32, // 81: gitaly.CommitService.CommitLanguages:output_type -> gitaly.CommitLanguagesResponse - 34, // 82: gitaly.CommitService.RawBlame:output_type -> gitaly.RawBlameResponse - 36, // 83: gitaly.CommitService.LastCommitForPath:output_type -> gitaly.LastCommitForPathResponse - 38, // 84: gitaly.CommitService.ListLastCommitsForTree:output_type -> gitaly.ListLastCommitsForTreeResponse - 40, // 85: gitaly.CommitService.CommitsByMessage:output_type -> gitaly.CommitsByMessageResponse - 24, // 86: gitaly.CommitService.ListCommitsByOid:output_type -> gitaly.ListCommitsByOidResponse - 26, // 87: gitaly.CommitService.ListCommitsByRefName:output_type -> gitaly.ListCommitsByRefNameResponse - 42, // 88: gitaly.CommitService.FilterShasWithSignatures:output_type -> gitaly.FilterShasWithSignaturesResponse - 46, // 89: gitaly.CommitService.GetCommitSignatures:output_type -> gitaly.GetCommitSignaturesResponse - 48, // 90: gitaly.CommitService.GetCommitMessages:output_type -> gitaly.GetCommitMessagesResponse - 70, // [70:91] is the sub-list for method output_type - 49, // [49:70] is the sub-list for method input_type - 49, // [49:49] is the sub-list for extension type_name - 49, // [49:49] is the sub-list for extension extendee - 0, // [0:49] is the sub-list for field type_name + 57, // 0: gitaly.ListCommitsRequest.repository:type_name -> gitaly.Repository + 58, // 1: gitaly.ListCommitsRequest.pagination_params:type_name -> gitaly.PaginationParameter + 0, // 2: gitaly.ListCommitsRequest.order:type_name -> gitaly.ListCommitsRequest.Order + 59, // 3: gitaly.ListCommitsRequest.after:type_name -> google.protobuf.Timestamp + 59, // 4: gitaly.ListCommitsRequest.before:type_name -> google.protobuf.Timestamp + 60, // 5: gitaly.ListCommitsResponse.commits:type_name -> gitaly.GitCommit + 57, // 6: gitaly.ListAllCommitsRequest.repository:type_name -> gitaly.Repository + 58, // 7: gitaly.ListAllCommitsRequest.pagination_params:type_name -> gitaly.PaginationParameter + 60, // 8: gitaly.ListAllCommitsResponse.commits:type_name -> gitaly.GitCommit + 57, // 9: gitaly.CommitStatsRequest.repository:type_name -> gitaly.Repository + 57, // 10: gitaly.CommitIsAncestorRequest.repository:type_name -> gitaly.Repository + 57, // 11: gitaly.TreeEntryRequest.repository:type_name -> gitaly.Repository + 1, // 12: gitaly.TreeEntryResponse.type:type_name -> gitaly.TreeEntryResponse.ObjectType + 57, // 13: gitaly.CommitsBetweenRequest.repository:type_name -> gitaly.Repository + 58, // 14: gitaly.CommitsBetweenRequest.pagination_params:type_name -> gitaly.PaginationParameter + 60, // 15: gitaly.CommitsBetweenResponse.commits:type_name -> gitaly.GitCommit + 57, // 16: gitaly.CountCommitsRequest.repository:type_name -> gitaly.Repository + 59, // 17: gitaly.CountCommitsRequest.after:type_name -> google.protobuf.Timestamp + 59, // 18: gitaly.CountCommitsRequest.before:type_name -> google.protobuf.Timestamp + 61, // 19: gitaly.CountCommitsRequest.global_options:type_name -> gitaly.GlobalOptions + 57, // 20: gitaly.CountDivergingCommitsRequest.repository:type_name -> gitaly.Repository + 2, // 21: gitaly.TreeEntry.type:type_name -> gitaly.TreeEntry.EntryType + 57, // 22: gitaly.GetTreeEntriesRequest.repository:type_name -> gitaly.Repository + 21, // 23: gitaly.GetTreeEntriesResponse.entries:type_name -> gitaly.TreeEntry + 57, // 24: gitaly.ListFilesRequest.repository:type_name -> gitaly.Repository + 57, // 25: gitaly.FindCommitRequest.repository:type_name -> gitaly.Repository + 60, // 26: gitaly.FindCommitResponse.commit:type_name -> gitaly.GitCommit + 57, // 27: gitaly.ListCommitsByOidRequest.repository:type_name -> gitaly.Repository + 60, // 28: gitaly.ListCommitsByOidResponse.commits:type_name -> gitaly.GitCommit + 57, // 29: gitaly.ListCommitsByRefNameRequest.repository:type_name -> gitaly.Repository + 54, // 30: gitaly.ListCommitsByRefNameResponse.commit_refs:type_name -> gitaly.ListCommitsByRefNameResponse.CommitForRef + 57, // 31: gitaly.FindAllCommitsRequest.repository:type_name -> gitaly.Repository + 3, // 32: gitaly.FindAllCommitsRequest.order:type_name -> gitaly.FindAllCommitsRequest.Order + 60, // 33: gitaly.FindAllCommitsResponse.commits:type_name -> gitaly.GitCommit + 57, // 34: gitaly.FindCommitsRequest.repository:type_name -> gitaly.Repository + 59, // 35: gitaly.FindCommitsRequest.after:type_name -> google.protobuf.Timestamp + 59, // 36: gitaly.FindCommitsRequest.before:type_name -> google.protobuf.Timestamp + 4, // 37: gitaly.FindCommitsRequest.order:type_name -> gitaly.FindCommitsRequest.Order + 61, // 38: gitaly.FindCommitsRequest.global_options:type_name -> gitaly.GlobalOptions + 60, // 39: gitaly.FindCommitsResponse.commits:type_name -> gitaly.GitCommit + 57, // 40: gitaly.CommitLanguagesRequest.repository:type_name -> gitaly.Repository + 55, // 41: gitaly.CommitLanguagesResponse.languages:type_name -> gitaly.CommitLanguagesResponse.Language + 57, // 42: gitaly.RawBlameRequest.repository:type_name -> gitaly.Repository + 57, // 43: gitaly.LastCommitForPathRequest.repository:type_name -> gitaly.Repository + 61, // 44: gitaly.LastCommitForPathRequest.global_options:type_name -> gitaly.GlobalOptions + 60, // 45: gitaly.LastCommitForPathResponse.commit:type_name -> gitaly.GitCommit + 57, // 46: gitaly.ListLastCommitsForTreeRequest.repository:type_name -> gitaly.Repository + 61, // 47: gitaly.ListLastCommitsForTreeRequest.global_options:type_name -> gitaly.GlobalOptions + 56, // 48: gitaly.ListLastCommitsForTreeResponse.commits:type_name -> gitaly.ListLastCommitsForTreeResponse.CommitForTree + 57, // 49: gitaly.CommitsByMessageRequest.repository:type_name -> gitaly.Repository + 61, // 50: gitaly.CommitsByMessageRequest.global_options:type_name -> gitaly.GlobalOptions + 60, // 51: gitaly.CommitsByMessageResponse.commits:type_name -> gitaly.GitCommit + 57, // 52: gitaly.FilterShasWithSignaturesRequest.repository:type_name -> gitaly.Repository + 57, // 53: gitaly.ExtractCommitSignatureRequest.repository:type_name -> gitaly.Repository + 57, // 54: gitaly.GetCommitSignaturesRequest.repository:type_name -> gitaly.Repository + 57, // 55: gitaly.GetCommitMessagesRequest.repository:type_name -> gitaly.Repository + 60, // 56: gitaly.ListCommitsByRefNameResponse.CommitForRef.commit:type_name -> gitaly.GitCommit + 60, // 57: gitaly.ListLastCommitsForTreeResponse.CommitForTree.commit:type_name -> gitaly.GitCommit + 5, // 58: gitaly.CommitService.ListCommits:input_type -> gitaly.ListCommitsRequest + 7, // 59: gitaly.CommitService.ListAllCommits:input_type -> gitaly.ListAllCommitsRequest + 11, // 60: gitaly.CommitService.CommitIsAncestor:input_type -> gitaly.CommitIsAncestorRequest + 13, // 61: gitaly.CommitService.TreeEntry:input_type -> gitaly.TreeEntryRequest + 15, // 62: gitaly.CommitService.CommitsBetween:input_type -> gitaly.CommitsBetweenRequest + 17, // 63: gitaly.CommitService.CountCommits:input_type -> gitaly.CountCommitsRequest + 19, // 64: gitaly.CommitService.CountDivergingCommits:input_type -> gitaly.CountDivergingCommitsRequest + 22, // 65: gitaly.CommitService.GetTreeEntries:input_type -> gitaly.GetTreeEntriesRequest + 24, // 66: gitaly.CommitService.ListFiles:input_type -> gitaly.ListFilesRequest + 26, // 67: gitaly.CommitService.FindCommit:input_type -> gitaly.FindCommitRequest + 9, // 68: gitaly.CommitService.CommitStats:input_type -> gitaly.CommitStatsRequest + 32, // 69: gitaly.CommitService.FindAllCommits:input_type -> gitaly.FindAllCommitsRequest + 34, // 70: gitaly.CommitService.FindCommits:input_type -> gitaly.FindCommitsRequest + 36, // 71: gitaly.CommitService.CommitLanguages:input_type -> gitaly.CommitLanguagesRequest + 38, // 72: gitaly.CommitService.RawBlame:input_type -> gitaly.RawBlameRequest + 40, // 73: gitaly.CommitService.LastCommitForPath:input_type -> gitaly.LastCommitForPathRequest + 42, // 74: gitaly.CommitService.ListLastCommitsForTree:input_type -> gitaly.ListLastCommitsForTreeRequest + 44, // 75: gitaly.CommitService.CommitsByMessage:input_type -> gitaly.CommitsByMessageRequest + 28, // 76: gitaly.CommitService.ListCommitsByOid:input_type -> gitaly.ListCommitsByOidRequest + 30, // 77: gitaly.CommitService.ListCommitsByRefName:input_type -> gitaly.ListCommitsByRefNameRequest + 46, // 78: gitaly.CommitService.FilterShasWithSignatures:input_type -> gitaly.FilterShasWithSignaturesRequest + 50, // 79: gitaly.CommitService.GetCommitSignatures:input_type -> gitaly.GetCommitSignaturesRequest + 52, // 80: gitaly.CommitService.GetCommitMessages:input_type -> gitaly.GetCommitMessagesRequest + 6, // 81: gitaly.CommitService.ListCommits:output_type -> gitaly.ListCommitsResponse + 8, // 82: gitaly.CommitService.ListAllCommits:output_type -> gitaly.ListAllCommitsResponse + 12, // 83: gitaly.CommitService.CommitIsAncestor:output_type -> gitaly.CommitIsAncestorResponse + 14, // 84: gitaly.CommitService.TreeEntry:output_type -> gitaly.TreeEntryResponse + 16, // 85: gitaly.CommitService.CommitsBetween:output_type -> gitaly.CommitsBetweenResponse + 18, // 86: gitaly.CommitService.CountCommits:output_type -> gitaly.CountCommitsResponse + 20, // 87: gitaly.CommitService.CountDivergingCommits:output_type -> gitaly.CountDivergingCommitsResponse + 23, // 88: gitaly.CommitService.GetTreeEntries:output_type -> gitaly.GetTreeEntriesResponse + 25, // 89: gitaly.CommitService.ListFiles:output_type -> gitaly.ListFilesResponse + 27, // 90: gitaly.CommitService.FindCommit:output_type -> gitaly.FindCommitResponse + 10, // 91: gitaly.CommitService.CommitStats:output_type -> gitaly.CommitStatsResponse + 33, // 92: gitaly.CommitService.FindAllCommits:output_type -> gitaly.FindAllCommitsResponse + 35, // 93: gitaly.CommitService.FindCommits:output_type -> gitaly.FindCommitsResponse + 37, // 94: gitaly.CommitService.CommitLanguages:output_type -> gitaly.CommitLanguagesResponse + 39, // 95: gitaly.CommitService.RawBlame:output_type -> gitaly.RawBlameResponse + 41, // 96: gitaly.CommitService.LastCommitForPath:output_type -> gitaly.LastCommitForPathResponse + 43, // 97: gitaly.CommitService.ListLastCommitsForTree:output_type -> gitaly.ListLastCommitsForTreeResponse + 45, // 98: gitaly.CommitService.CommitsByMessage:output_type -> gitaly.CommitsByMessageResponse + 29, // 99: gitaly.CommitService.ListCommitsByOid:output_type -> gitaly.ListCommitsByOidResponse + 31, // 100: gitaly.CommitService.ListCommitsByRefName:output_type -> gitaly.ListCommitsByRefNameResponse + 47, // 101: gitaly.CommitService.FilterShasWithSignatures:output_type -> gitaly.FilterShasWithSignaturesResponse + 51, // 102: gitaly.CommitService.GetCommitSignatures:output_type -> gitaly.GetCommitSignaturesResponse + 53, // 103: gitaly.CommitService.GetCommitMessages:output_type -> gitaly.GetCommitMessagesResponse + 81, // [81:104] is the sub-list for method output_type + 58, // [58:81] is the sub-list for method input_type + 58, // [58:58] is the sub-list for extension type_name + 58, // [58:58] is the sub-list for extension extendee + 0, // [0:58] is the sub-list for field type_name } func init() { file_commit_proto_init() } @@ -3996,7 +4432,7 @@ func file_commit_proto_init() { file_shared_proto_init() if !protoimpl.UnsafeEnabled { file_commit_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommitStatsRequest); i { + switch v := v.(*ListCommitsRequest); i { case 0: return &v.state case 1: @@ -4008,7 +4444,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommitStatsResponse); i { + switch v := v.(*ListCommitsResponse); i { case 0: return &v.state case 1: @@ -4020,7 +4456,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommitIsAncestorRequest); i { + switch v := v.(*ListAllCommitsRequest); i { case 0: return &v.state case 1: @@ -4032,7 +4468,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommitIsAncestorResponse); i { + switch v := v.(*ListAllCommitsResponse); i { case 0: return &v.state case 1: @@ -4044,7 +4480,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TreeEntryRequest); i { + switch v := v.(*CommitStatsRequest); i { case 0: return &v.state case 1: @@ -4056,7 +4492,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TreeEntryResponse); i { + switch v := v.(*CommitStatsResponse); i { case 0: return &v.state case 1: @@ -4068,7 +4504,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommitsBetweenRequest); i { + switch v := v.(*CommitIsAncestorRequest); i { case 0: return &v.state case 1: @@ -4080,7 +4516,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommitsBetweenResponse); i { + switch v := v.(*CommitIsAncestorResponse); i { case 0: return &v.state case 1: @@ -4092,7 +4528,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CountCommitsRequest); i { + switch v := v.(*TreeEntryRequest); i { case 0: return &v.state case 1: @@ -4104,7 +4540,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CountCommitsResponse); i { + switch v := v.(*TreeEntryResponse); i { case 0: return &v.state case 1: @@ -4116,7 +4552,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CountDivergingCommitsRequest); i { + switch v := v.(*CommitsBetweenRequest); i { case 0: return &v.state case 1: @@ -4128,7 +4564,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CountDivergingCommitsResponse); i { + switch v := v.(*CommitsBetweenResponse); i { case 0: return &v.state case 1: @@ -4140,7 +4576,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TreeEntry); i { + switch v := v.(*CountCommitsRequest); i { case 0: return &v.state case 1: @@ -4152,7 +4588,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTreeEntriesRequest); i { + switch v := v.(*CountCommitsResponse); i { case 0: return &v.state case 1: @@ -4164,7 +4600,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTreeEntriesResponse); i { + switch v := v.(*CountDivergingCommitsRequest); i { case 0: return &v.state case 1: @@ -4176,7 +4612,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListFilesRequest); i { + switch v := v.(*CountDivergingCommitsResponse); i { case 0: return &v.state case 1: @@ -4188,7 +4624,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListFilesResponse); i { + switch v := v.(*TreeEntry); i { case 0: return &v.state case 1: @@ -4200,7 +4636,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FindCommitRequest); i { + switch v := v.(*GetTreeEntriesRequest); i { case 0: return &v.state case 1: @@ -4212,7 +4648,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FindCommitResponse); i { + switch v := v.(*GetTreeEntriesResponse); i { case 0: return &v.state case 1: @@ -4224,7 +4660,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCommitsByOidRequest); i { + switch v := v.(*ListFilesRequest); i { case 0: return &v.state case 1: @@ -4236,7 +4672,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCommitsByOidResponse); i { + switch v := v.(*ListFilesResponse); i { case 0: return &v.state case 1: @@ -4248,7 +4684,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCommitsByRefNameRequest); i { + switch v := v.(*FindCommitRequest); i { case 0: return &v.state case 1: @@ -4260,7 +4696,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCommitsByRefNameResponse); i { + switch v := v.(*FindCommitResponse); i { case 0: return &v.state case 1: @@ -4272,7 +4708,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FindAllCommitsRequest); i { + switch v := v.(*ListCommitsByOidRequest); i { case 0: return &v.state case 1: @@ -4284,7 +4720,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FindAllCommitsResponse); i { + switch v := v.(*ListCommitsByOidResponse); i { case 0: return &v.state case 1: @@ -4296,7 +4732,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FindCommitsRequest); i { + switch v := v.(*ListCommitsByRefNameRequest); i { case 0: return &v.state case 1: @@ -4308,7 +4744,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FindCommitsResponse); i { + switch v := v.(*ListCommitsByRefNameResponse); i { case 0: return &v.state case 1: @@ -4320,7 +4756,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommitLanguagesRequest); i { + switch v := v.(*FindAllCommitsRequest); i { case 0: return &v.state case 1: @@ -4332,7 +4768,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommitLanguagesResponse); i { + switch v := v.(*FindAllCommitsResponse); i { case 0: return &v.state case 1: @@ -4344,7 +4780,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RawBlameRequest); i { + switch v := v.(*FindCommitsRequest); i { case 0: return &v.state case 1: @@ -4356,7 +4792,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RawBlameResponse); i { + switch v := v.(*FindCommitsResponse); i { case 0: return &v.state case 1: @@ -4368,7 +4804,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LastCommitForPathRequest); i { + switch v := v.(*CommitLanguagesRequest); i { case 0: return &v.state case 1: @@ -4380,7 +4816,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LastCommitForPathResponse); i { + switch v := v.(*CommitLanguagesResponse); i { case 0: return &v.state case 1: @@ -4392,7 +4828,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListLastCommitsForTreeRequest); i { + switch v := v.(*RawBlameRequest); i { case 0: return &v.state case 1: @@ -4404,7 +4840,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListLastCommitsForTreeResponse); i { + switch v := v.(*RawBlameResponse); i { case 0: return &v.state case 1: @@ -4416,7 +4852,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommitsByMessageRequest); i { + switch v := v.(*LastCommitForPathRequest); i { case 0: return &v.state case 1: @@ -4428,7 +4864,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommitsByMessageResponse); i { + switch v := v.(*LastCommitForPathResponse); i { case 0: return &v.state case 1: @@ -4440,7 +4876,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FilterShasWithSignaturesRequest); i { + switch v := v.(*ListLastCommitsForTreeRequest); i { case 0: return &v.state case 1: @@ -4452,7 +4888,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FilterShasWithSignaturesResponse); i { + switch v := v.(*ListLastCommitsForTreeResponse); i { case 0: return &v.state case 1: @@ -4464,7 +4900,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExtractCommitSignatureRequest); i { + switch v := v.(*CommitsByMessageRequest); i { case 0: return &v.state case 1: @@ -4476,7 +4912,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExtractCommitSignatureResponse); i { + switch v := v.(*CommitsByMessageResponse); i { case 0: return &v.state case 1: @@ -4488,7 +4924,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCommitSignaturesRequest); i { + switch v := v.(*FilterShasWithSignaturesRequest); i { case 0: return &v.state case 1: @@ -4500,7 +4936,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCommitSignaturesResponse); i { + switch v := v.(*FilterShasWithSignaturesResponse); i { case 0: return &v.state case 1: @@ -4512,7 +4948,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCommitMessagesRequest); i { + switch v := v.(*ExtractCommitSignatureRequest); i { case 0: return &v.state case 1: @@ -4524,7 +4960,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCommitMessagesResponse); i { + switch v := v.(*ExtractCommitSignatureResponse); i { case 0: return &v.state case 1: @@ -4536,7 +4972,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCommitsByRefNameResponse_CommitForRef); i { + switch v := v.(*GetCommitSignaturesRequest); i { case 0: return &v.state case 1: @@ -4548,7 +4984,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommitLanguagesResponse_Language); i { + switch v := v.(*GetCommitSignaturesResponse); i { case 0: return &v.state case 1: @@ -4560,6 +4996,54 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetCommitMessagesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_commit_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetCommitMessagesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_commit_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListCommitsByRefNameResponse_CommitForRef); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_commit_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CommitLanguagesResponse_Language); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_commit_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListLastCommitsForTreeResponse_CommitForTree); i { case 0: return &v.state @@ -4577,8 +5061,8 @@ func file_commit_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_commit_proto_rawDesc, - NumEnums: 4, - NumMessages: 48, + NumEnums: 5, + NumMessages: 52, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/go/gitalypb/commit_grpc.pb.go b/proto/go/gitalypb/commit_grpc.pb.go index fa9a0bf67..e9027a158 100644 --- a/proto/go/gitalypb/commit_grpc.pb.go +++ b/proto/go/gitalypb/commit_grpc.pb.go @@ -18,6 +18,14 @@ const _ = grpc.SupportPackageIsVersion7 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type CommitServiceClient interface { + // ListCommits lists all commits reachable via a set of references by doing a + // graph walk. This deprecates ListNewCommits, FindAllCommits, FindCommits + // (except Follow is not yet supported) and CommitsBetweenRequest. Any + // unknown revisions will cause the RPC to fail. + ListCommits(ctx context.Context, in *ListCommitsRequest, opts ...grpc.CallOption) (CommitService_ListCommitsClient, error) + // ListAllCommits lists all commits present in the repository, including + // those not reachable by any reference. + ListAllCommits(ctx context.Context, in *ListAllCommitsRequest, opts ...grpc.CallOption) (CommitService_ListAllCommitsClient, error) CommitIsAncestor(ctx context.Context, in *CommitIsAncestorRequest, opts ...grpc.CallOption) (*CommitIsAncestorResponse, error) TreeEntry(ctx context.Context, in *TreeEntryRequest, opts ...grpc.CallOption) (CommitService_TreeEntryClient, error) CommitsBetween(ctx context.Context, in *CommitsBetweenRequest, opts ...grpc.CallOption) (CommitService_CommitsBetweenClient, error) @@ -50,6 +58,70 @@ func NewCommitServiceClient(cc grpc.ClientConnInterface) CommitServiceClient { return &commitServiceClient{cc} } +func (c *commitServiceClient) ListCommits(ctx context.Context, in *ListCommitsRequest, opts ...grpc.CallOption) (CommitService_ListCommitsClient, error) { + stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[0], "/gitaly.CommitService/ListCommits", opts...) + if err != nil { + return nil, err + } + x := &commitServiceListCommitsClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type CommitService_ListCommitsClient interface { + Recv() (*ListCommitsResponse, error) + grpc.ClientStream +} + +type commitServiceListCommitsClient struct { + grpc.ClientStream +} + +func (x *commitServiceListCommitsClient) Recv() (*ListCommitsResponse, error) { + m := new(ListCommitsResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *commitServiceClient) ListAllCommits(ctx context.Context, in *ListAllCommitsRequest, opts ...grpc.CallOption) (CommitService_ListAllCommitsClient, error) { + stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[1], "/gitaly.CommitService/ListAllCommits", opts...) + if err != nil { + return nil, err + } + x := &commitServiceListAllCommitsClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type CommitService_ListAllCommitsClient interface { + Recv() (*ListAllCommitsResponse, error) + grpc.ClientStream +} + +type commitServiceListAllCommitsClient struct { + grpc.ClientStream +} + +func (x *commitServiceListAllCommitsClient) Recv() (*ListAllCommitsResponse, error) { + m := new(ListAllCommitsResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + func (c *commitServiceClient) CommitIsAncestor(ctx context.Context, in *CommitIsAncestorRequest, opts ...grpc.CallOption) (*CommitIsAncestorResponse, error) { out := new(CommitIsAncestorResponse) err := c.cc.Invoke(ctx, "/gitaly.CommitService/CommitIsAncestor", in, out, opts...) @@ -60,7 +132,7 @@ func (c *commitServiceClient) CommitIsAncestor(ctx context.Context, in *CommitIs } func (c *commitServiceClient) TreeEntry(ctx context.Context, in *TreeEntryRequest, opts ...grpc.CallOption) (CommitService_TreeEntryClient, error) { - stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[0], "/gitaly.CommitService/TreeEntry", opts...) + stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[2], "/gitaly.CommitService/TreeEntry", opts...) if err != nil { return nil, err } @@ -92,7 +164,7 @@ func (x *commitServiceTreeEntryClient) Recv() (*TreeEntryResponse, error) { } func (c *commitServiceClient) CommitsBetween(ctx context.Context, in *CommitsBetweenRequest, opts ...grpc.CallOption) (CommitService_CommitsBetweenClient, error) { - stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[1], "/gitaly.CommitService/CommitsBetween", opts...) + stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[3], "/gitaly.CommitService/CommitsBetween", opts...) if err != nil { return nil, err } @@ -142,7 +214,7 @@ func (c *commitServiceClient) CountDivergingCommits(ctx context.Context, in *Cou } func (c *commitServiceClient) GetTreeEntries(ctx context.Context, in *GetTreeEntriesRequest, opts ...grpc.CallOption) (CommitService_GetTreeEntriesClient, error) { - stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[2], "/gitaly.CommitService/GetTreeEntries", opts...) + stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[4], "/gitaly.CommitService/GetTreeEntries", opts...) if err != nil { return nil, err } @@ -174,7 +246,7 @@ func (x *commitServiceGetTreeEntriesClient) Recv() (*GetTreeEntriesResponse, err } func (c *commitServiceClient) ListFiles(ctx context.Context, in *ListFilesRequest, opts ...grpc.CallOption) (CommitService_ListFilesClient, error) { - stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[3], "/gitaly.CommitService/ListFiles", opts...) + stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[5], "/gitaly.CommitService/ListFiles", opts...) if err != nil { return nil, err } @@ -224,7 +296,7 @@ func (c *commitServiceClient) CommitStats(ctx context.Context, in *CommitStatsRe } func (c *commitServiceClient) FindAllCommits(ctx context.Context, in *FindAllCommitsRequest, opts ...grpc.CallOption) (CommitService_FindAllCommitsClient, error) { - stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[4], "/gitaly.CommitService/FindAllCommits", opts...) + stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[6], "/gitaly.CommitService/FindAllCommits", opts...) if err != nil { return nil, err } @@ -256,7 +328,7 @@ func (x *commitServiceFindAllCommitsClient) Recv() (*FindAllCommitsResponse, err } func (c *commitServiceClient) FindCommits(ctx context.Context, in *FindCommitsRequest, opts ...grpc.CallOption) (CommitService_FindCommitsClient, error) { - stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[5], "/gitaly.CommitService/FindCommits", opts...) + stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[7], "/gitaly.CommitService/FindCommits", opts...) if err != nil { return nil, err } @@ -297,7 +369,7 @@ func (c *commitServiceClient) CommitLanguages(ctx context.Context, in *CommitLan } func (c *commitServiceClient) RawBlame(ctx context.Context, in *RawBlameRequest, opts ...grpc.CallOption) (CommitService_RawBlameClient, error) { - stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[6], "/gitaly.CommitService/RawBlame", opts...) + stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[8], "/gitaly.CommitService/RawBlame", opts...) if err != nil { return nil, err } @@ -338,7 +410,7 @@ func (c *commitServiceClient) LastCommitForPath(ctx context.Context, in *LastCom } func (c *commitServiceClient) ListLastCommitsForTree(ctx context.Context, in *ListLastCommitsForTreeRequest, opts ...grpc.CallOption) (CommitService_ListLastCommitsForTreeClient, error) { - stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[7], "/gitaly.CommitService/ListLastCommitsForTree", opts...) + stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[9], "/gitaly.CommitService/ListLastCommitsForTree", opts...) if err != nil { return nil, err } @@ -370,7 +442,7 @@ func (x *commitServiceListLastCommitsForTreeClient) Recv() (*ListLastCommitsForT } func (c *commitServiceClient) CommitsByMessage(ctx context.Context, in *CommitsByMessageRequest, opts ...grpc.CallOption) (CommitService_CommitsByMessageClient, error) { - stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[8], "/gitaly.CommitService/CommitsByMessage", opts...) + stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[10], "/gitaly.CommitService/CommitsByMessage", opts...) if err != nil { return nil, err } @@ -402,7 +474,7 @@ func (x *commitServiceCommitsByMessageClient) Recv() (*CommitsByMessageResponse, } func (c *commitServiceClient) ListCommitsByOid(ctx context.Context, in *ListCommitsByOidRequest, opts ...grpc.CallOption) (CommitService_ListCommitsByOidClient, error) { - stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[9], "/gitaly.CommitService/ListCommitsByOid", opts...) + stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[11], "/gitaly.CommitService/ListCommitsByOid", opts...) if err != nil { return nil, err } @@ -434,7 +506,7 @@ func (x *commitServiceListCommitsByOidClient) Recv() (*ListCommitsByOidResponse, } func (c *commitServiceClient) ListCommitsByRefName(ctx context.Context, in *ListCommitsByRefNameRequest, opts ...grpc.CallOption) (CommitService_ListCommitsByRefNameClient, error) { - stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[10], "/gitaly.CommitService/ListCommitsByRefName", opts...) + stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[12], "/gitaly.CommitService/ListCommitsByRefName", opts...) if err != nil { return nil, err } @@ -466,7 +538,7 @@ func (x *commitServiceListCommitsByRefNameClient) Recv() (*ListCommitsByRefNameR } func (c *commitServiceClient) FilterShasWithSignatures(ctx context.Context, opts ...grpc.CallOption) (CommitService_FilterShasWithSignaturesClient, error) { - stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[11], "/gitaly.CommitService/FilterShasWithSignatures", opts...) + stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[13], "/gitaly.CommitService/FilterShasWithSignatures", opts...) if err != nil { return nil, err } @@ -497,7 +569,7 @@ func (x *commitServiceFilterShasWithSignaturesClient) Recv() (*FilterShasWithSig } func (c *commitServiceClient) GetCommitSignatures(ctx context.Context, in *GetCommitSignaturesRequest, opts ...grpc.CallOption) (CommitService_GetCommitSignaturesClient, error) { - stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[12], "/gitaly.CommitService/GetCommitSignatures", opts...) + stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[14], "/gitaly.CommitService/GetCommitSignatures", opts...) if err != nil { return nil, err } @@ -529,7 +601,7 @@ func (x *commitServiceGetCommitSignaturesClient) Recv() (*GetCommitSignaturesRes } func (c *commitServiceClient) GetCommitMessages(ctx context.Context, in *GetCommitMessagesRequest, opts ...grpc.CallOption) (CommitService_GetCommitMessagesClient, error) { - stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[13], "/gitaly.CommitService/GetCommitMessages", opts...) + stream, err := c.cc.NewStream(ctx, &CommitService_ServiceDesc.Streams[15], "/gitaly.CommitService/GetCommitMessages", opts...) if err != nil { return nil, err } @@ -564,6 +636,14 @@ func (x *commitServiceGetCommitMessagesClient) Recv() (*GetCommitMessagesRespons // All implementations must embed UnimplementedCommitServiceServer // for forward compatibility type CommitServiceServer interface { + // ListCommits lists all commits reachable via a set of references by doing a + // graph walk. This deprecates ListNewCommits, FindAllCommits, FindCommits + // (except Follow is not yet supported) and CommitsBetweenRequest. Any + // unknown revisions will cause the RPC to fail. + ListCommits(*ListCommitsRequest, CommitService_ListCommitsServer) error + // ListAllCommits lists all commits present in the repository, including + // those not reachable by any reference. + ListAllCommits(*ListAllCommitsRequest, CommitService_ListAllCommitsServer) error CommitIsAncestor(context.Context, *CommitIsAncestorRequest) (*CommitIsAncestorResponse, error) TreeEntry(*TreeEntryRequest, CommitService_TreeEntryServer) error CommitsBetween(*CommitsBetweenRequest, CommitService_CommitsBetweenServer) error @@ -593,6 +673,12 @@ type CommitServiceServer interface { type UnimplementedCommitServiceServer struct { } +func (UnimplementedCommitServiceServer) ListCommits(*ListCommitsRequest, CommitService_ListCommitsServer) error { + return status.Errorf(codes.Unimplemented, "method ListCommits not implemented") +} +func (UnimplementedCommitServiceServer) ListAllCommits(*ListAllCommitsRequest, CommitService_ListAllCommitsServer) error { + return status.Errorf(codes.Unimplemented, "method ListAllCommits not implemented") +} func (UnimplementedCommitServiceServer) CommitIsAncestor(context.Context, *CommitIsAncestorRequest) (*CommitIsAncestorResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CommitIsAncestor not implemented") } @@ -669,6 +755,48 @@ func RegisterCommitServiceServer(s grpc.ServiceRegistrar, srv CommitServiceServe s.RegisterService(&CommitService_ServiceDesc, srv) } +func _CommitService_ListCommits_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(ListCommitsRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(CommitServiceServer).ListCommits(m, &commitServiceListCommitsServer{stream}) +} + +type CommitService_ListCommitsServer interface { + Send(*ListCommitsResponse) error + grpc.ServerStream +} + +type commitServiceListCommitsServer struct { + grpc.ServerStream +} + +func (x *commitServiceListCommitsServer) Send(m *ListCommitsResponse) error { + return x.ServerStream.SendMsg(m) +} + +func _CommitService_ListAllCommits_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(ListAllCommitsRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(CommitServiceServer).ListAllCommits(m, &commitServiceListAllCommitsServer{stream}) +} + +type CommitService_ListAllCommitsServer interface { + Send(*ListAllCommitsResponse) error + grpc.ServerStream +} + +type commitServiceListAllCommitsServer struct { + grpc.ServerStream +} + +func (x *commitServiceListAllCommitsServer) Send(m *ListAllCommitsResponse) error { + return x.ServerStream.SendMsg(m) +} + func _CommitService_CommitIsAncestor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(CommitIsAncestorRequest) if err := dec(in); err != nil { @@ -1132,6 +1260,16 @@ var CommitService_ServiceDesc = grpc.ServiceDesc{ }, Streams: []grpc.StreamDesc{ { + StreamName: "ListCommits", + Handler: _CommitService_ListCommits_Handler, + ServerStreams: true, + }, + { + StreamName: "ListAllCommits", + Handler: _CommitService_ListAllCommits_Handler, + ServerStreams: true, + }, + { StreamName: "TreeEntry", Handler: _CommitService_TreeEntry_Handler, ServerStreams: true, diff --git a/ruby/proto/gitaly/commit_pb.rb b/ruby/proto/gitaly/commit_pb.rb index 63251e66e..e27ba697c 100644 --- a/ruby/proto/gitaly/commit_pb.rb +++ b/ruby/proto/gitaly/commit_pb.rb @@ -8,6 +8,33 @@ require 'shared_pb' require 'google/protobuf/timestamp_pb' Google::Protobuf::DescriptorPool.generated_pool.build do add_file("commit.proto", :syntax => :proto3) do + add_message "gitaly.ListCommitsRequest" do + optional :repository, :message, 1, "gitaly.Repository" + repeated :revisions, :string, 2 + optional :pagination_params, :message, 3, "gitaly.PaginationParameter" + optional :order, :enum, 4, "gitaly.ListCommitsRequest.Order" + optional :max_parents, :uint32, 5 + optional :disable_walk, :bool, 6 + optional :first_parent, :bool, 7 + optional :after, :message, 8, "google.protobuf.Timestamp" + optional :before, :message, 9, "google.protobuf.Timestamp" + optional :author, :bytes, 10 + end + add_enum "gitaly.ListCommitsRequest.Order" do + value :NONE, 0 + value :TOPO, 1 + value :DATE, 2 + end + add_message "gitaly.ListCommitsResponse" do + repeated :commits, :message, 1, "gitaly.GitCommit" + end + add_message "gitaly.ListAllCommitsRequest" do + optional :repository, :message, 1, "gitaly.Repository" + optional :pagination_params, :message, 2, "gitaly.PaginationParameter" + end + add_message "gitaly.ListAllCommitsResponse" do + repeated :commits, :message, 1, "gitaly.GitCommit" + end add_message "gitaly.CommitStatsRequest" do optional :repository, :message, 1, "gitaly.Repository" optional :revision, :bytes, 2 @@ -270,6 +297,11 @@ Google::Protobuf::DescriptorPool.generated_pool.build do end module Gitaly + ListCommitsRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.ListCommitsRequest").msgclass + ListCommitsRequest::Order = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.ListCommitsRequest.Order").enummodule + ListCommitsResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.ListCommitsResponse").msgclass + ListAllCommitsRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.ListAllCommitsRequest").msgclass + ListAllCommitsResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.ListAllCommitsResponse").msgclass CommitStatsRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.CommitStatsRequest").msgclass CommitStatsResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.CommitStatsResponse").msgclass CommitIsAncestorRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.CommitIsAncestorRequest").msgclass diff --git a/ruby/proto/gitaly/commit_services_pb.rb b/ruby/proto/gitaly/commit_services_pb.rb index 4f761c423..74f2fca05 100644 --- a/ruby/proto/gitaly/commit_services_pb.rb +++ b/ruby/proto/gitaly/commit_services_pb.rb @@ -14,6 +14,14 @@ module Gitaly self.unmarshal_class_method = :decode self.service_name = 'gitaly.CommitService' + # ListCommits lists all commits reachable via a set of references by doing a + # graph walk. This deprecates ListNewCommits, FindAllCommits, FindCommits + # (except Follow is not yet supported) and CommitsBetweenRequest. Any + # unknown revisions will cause the RPC to fail. + rpc :ListCommits, Gitaly::ListCommitsRequest, stream(Gitaly::ListCommitsResponse) + # ListAllCommits lists all commits present in the repository, including + # those not reachable by any reference. + rpc :ListAllCommits, Gitaly::ListAllCommitsRequest, stream(Gitaly::ListAllCommitsResponse) rpc :CommitIsAncestor, Gitaly::CommitIsAncestorRequest, Gitaly::CommitIsAncestorResponse rpc :TreeEntry, Gitaly::TreeEntryRequest, stream(Gitaly::TreeEntryResponse) rpc :CommitsBetween, Gitaly::CommitsBetweenRequest, stream(Gitaly::CommitsBetweenResponse) |