diff options
author | Pavlo Strokov <pstrokov@gitlab.com> | 2022-08-01 10:47:58 +0300 |
---|---|---|
committer | Pavlo Strokov <pstrokov@gitlab.com> | 2022-08-01 10:47:58 +0300 |
commit | d33e6f4e277e995af9894a37fa9587cb5882d05b (patch) | |
tree | 0be04ce8a505c7dfcb0627ff5869d0f0f57c6cc8 | |
parent | 31ea786fbf0a7874b44efcb1f8b43bc4536d9b7e (diff) | |
parent | c6e1eb1483962ef5e4d00bd9b7a6e627c42fea0d (diff) |
Merge branch 'pks-find-tag-error' into 'master'
proto: Introduce FindTagError to distinguish non-existent tags
See merge request gitlab-org/gitaly!4767
-rw-r--r-- | internal/gitaly/service/ref/find_tag.go | 122 | ||||
-rw-r--r-- | internal/gitaly/service/ref/find_tag_test.go | 324 | ||||
-rw-r--r-- | internal/gitaly/service/ref/refs.go | 109 | ||||
-rw-r--r-- | internal/gitaly/service/ref/refs_test.go | 298 | ||||
-rw-r--r-- | proto/errors.proto | 6 | ||||
-rw-r--r-- | proto/go/gitalypb/errors.pb.go | 188 | ||||
-rw-r--r-- | proto/go/gitalypb/ref.pb.go | 1258 | ||||
-rw-r--r-- | proto/go/gitalypb/ref_grpc.pb.go | 8 | ||||
-rw-r--r-- | proto/ref.proto | 23 | ||||
-rw-r--r-- | ruby/proto/gitaly/errors_pb.rb | 4 | ||||
-rw-r--r-- | ruby/proto/gitaly/ref_pb.rb | 4 | ||||
-rw-r--r-- | ruby/proto/gitaly/ref_services_pb.rb | 4 |
12 files changed, 1278 insertions, 1070 deletions
diff --git a/internal/gitaly/service/ref/find_tag.go b/internal/gitaly/service/ref/find_tag.go new file mode 100644 index 000000000..5c92d5cbf --- /dev/null +++ b/internal/gitaly/service/ref/find_tag.go @@ -0,0 +1,122 @@ +package ref + +import ( + "bufio" + "context" + "errors" + "fmt" + "strings" + + "gitlab.com/gitlab-org/gitaly/v15/internal/git" + "gitlab.com/gitlab-org/gitaly/v15/internal/git/catfile" + "gitlab.com/gitlab-org/gitaly/v15/internal/helper" + "gitlab.com/gitlab-org/gitaly/v15/proto/go/gitalypb" +) + +func (s *server) FindTag(ctx context.Context, in *gitalypb.FindTagRequest) (*gitalypb.FindTagResponse, error) { + if err := s.validateFindTagRequest(in); err != nil { + return nil, helper.ErrInvalidArgument(err) + } + + repo := s.localrepo(in.GetRepository()) + + tag, err := s.findTag(ctx, repo, in.GetTagName()) + if err != nil { + return nil, helper.ErrInternal(err) + } + + return &gitalypb.FindTagResponse{Tag: tag}, nil +} + +// parseTagLine parses a line of text with the output format %(objectname) %(objecttype) %(refname:lstrip=2) +func parseTagLine(ctx context.Context, objectReader catfile.ObjectReader, tagLine string) (*gitalypb.Tag, error) { + fields := strings.SplitN(tagLine, " ", 3) + if len(fields) != 3 { + return nil, fmt.Errorf("invalid output from for-each-ref command: %v", tagLine) + } + + tagID, refType, refName := fields[0], fields[1], fields[2] + + tag := &gitalypb.Tag{ + Id: tagID, + Name: []byte(refName), + } + + switch refType { + // annotated tag + case "tag": + tag, err := catfile.GetTag(ctx, objectReader, git.Revision(tagID), refName) + if err != nil { + return nil, fmt.Errorf("getting annotated tag: %v", err) + } + catfile.TrimTagMessage(tag) + + return tag, nil + case "commit": + commit, err := catfile.GetCommit(ctx, objectReader, git.Revision(tagID)) + if err != nil { + return nil, fmt.Errorf("getting commit catfile: %v", err) + } + tag.TargetCommit = commit + return tag, nil + default: + return tag, nil + } +} + +func (s *server) findTag(ctx context.Context, repo git.RepositoryExecutor, tagName []byte) (*gitalypb.Tag, error) { + tagCmd, err := repo.Exec(ctx, + git.SubCmd{ + Name: "tag", + Flags: []git.Option{ + git.Flag{Name: "-l"}, git.ValueFlag{Name: "--format", Value: tagFormat}, + }, + Args: []string{string(tagName)}, + }, + git.WithRefTxHook(repo), + ) + if err != nil { + return nil, fmt.Errorf("for-each-ref error: %v", err) + } + + objectReader, cancel, err := s.catfileCache.ObjectReader(ctx, repo) + if err != nil { + return nil, err + } + defer cancel() + + var tag *gitalypb.Tag + + scanner := bufio.NewScanner(tagCmd) + if scanner.Scan() { + tag, err = parseTagLine(ctx, objectReader, scanner.Text()) + if err != nil { + return nil, err + } + } else { + // TODO: this callsite will eventually be converted to return a FindTagError with + // `TagNotFound` set. + return nil, errors.New("no tag found") + } + + if err = tagCmd.Wait(); err != nil { + return nil, err + } + + return tag, nil +} + +func (s *server) validateFindTagRequest(in *gitalypb.FindTagRequest) error { + if in.GetRepository() == nil { + return errors.New("repository is empty") + } + + if _, err := s.locator.GetRepoPath(in.GetRepository()); err != nil { + return fmt.Errorf("invalid git directory: %v", err) + } + + if in.GetTagName() == nil { + return errors.New("tag name is empty") + } + return nil +} diff --git a/internal/gitaly/service/ref/find_tag_test.go b/internal/gitaly/service/ref/find_tag_test.go new file mode 100644 index 000000000..6461e9e77 --- /dev/null +++ b/internal/gitaly/service/ref/find_tag_test.go @@ -0,0 +1,324 @@ +//go:build !gitaly_test_sha256 + +package ref + +import ( + "fmt" + "strings" + "testing" + + "github.com/stretchr/testify/require" + "gitlab.com/gitlab-org/gitaly/v15/internal/git" + "gitlab.com/gitlab-org/gitaly/v15/internal/git/catfile" + "gitlab.com/gitlab-org/gitaly/v15/internal/git/gittest" + "gitlab.com/gitlab-org/gitaly/v15/internal/git/localrepo" + "gitlab.com/gitlab-org/gitaly/v15/internal/git/updateref" + "gitlab.com/gitlab-org/gitaly/v15/internal/helper" + "gitlab.com/gitlab-org/gitaly/v15/internal/testhelper" + "gitlab.com/gitlab-org/gitaly/v15/proto/go/gitalypb" + "google.golang.org/grpc/codes" + "google.golang.org/protobuf/types/known/timestamppb" +) + +func TestFindTag_successful(t *testing.T) { + t.Parallel() + + ctx := testhelper.Context(t) + cfg, repoProto, repoPath, client := setupRefService(ctx, t) + + repo := localrepo.NewTestRepo(t, cfg, repoProto) + + blobID := git.ObjectID("faaf198af3a36dbf41961466703cc1d47c61d051") + commitID := git.ObjectID("6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9") + + gitCommit := testhelper.GitLabTestCommit(commitID.String()) + + bigCommitID := gittest.WriteCommit(t, cfg, repoPath, + gittest.WithBranch("local-big-commits"), + gittest.WithMessage("An empty commit with REALLY BIG message\n\n"+strings.Repeat("a", helper.MaxCommitOrTagMessageSize+1)), + gittest.WithParents("60ecb67744cb56576c30214ff52294f8ce2def98"), + ) + bigCommit, err := repo.ReadCommit(ctx, git.Revision(bigCommitID)) + require.NoError(t, err) + + annotatedTagID := gittest.WriteTag(t, cfg, repoPath, "v1.2.0", blobID.Revision(), gittest.WriteTagConfig{Message: "Blob tag"}) + + gittest.WriteTag(t, cfg, repoPath, "v1.3.0", commitID.Revision()) + gittest.WriteTag(t, cfg, repoPath, "v1.4.0", blobID.Revision()) + + // To test recursive resolving to a commit + gittest.WriteTag(t, cfg, repoPath, "v1.5.0", "v1.3.0") + + // A tag to commit with a big message + gittest.WriteTag(t, cfg, repoPath, "v1.6.0", bigCommitID.Revision()) + + // A tag with a big message + bigMessage := strings.Repeat("a", 11*1024) + bigMessageTag1ID := gittest.WriteTag(t, cfg, repoPath, "v1.7.0", commitID.Revision(), gittest.WriteTagConfig{Message: bigMessage}) + + // A tag with a commit id as its name + commitTagID := gittest.WriteTag(t, cfg, repoPath, commitID.String(), commitID.Revision(), gittest.WriteTagConfig{Message: "commit tag with a commit sha as the name"}) + + // a tag of a tag + tagOfTagID := gittest.WriteTag(t, cfg, repoPath, "tag-of-tag", commitTagID.Revision(), gittest.WriteTagConfig{Message: "tag of a tag"}) + + expectedTags := []*gitalypb.Tag{ + { + Name: []byte(commitID), + Id: commitTagID.String(), + TargetCommit: gitCommit, + Message: []byte("commit tag with a commit sha as the name"), + MessageSize: 40, + Tagger: &gitalypb.CommitAuthor{ + Name: []byte(gittest.DefaultCommitterName), + Email: []byte(gittest.DefaultCommitterMail), + Date: timestamppb.New(gittest.DefaultCommitTime), + Timezone: []byte("+0100"), + }, + }, + { + Name: []byte("tag-of-tag"), + Id: tagOfTagID.String(), + TargetCommit: gitCommit, + Message: []byte("tag of a tag"), + MessageSize: 12, + Tagger: &gitalypb.CommitAuthor{ + Name: []byte(gittest.DefaultCommitterName), + Email: []byte(gittest.DefaultCommitterMail), + Date: timestamppb.New(gittest.DefaultCommitTime), + Timezone: []byte("+0100"), + }, + }, + { + Name: []byte("v1.0.0"), + Id: "f4e6814c3e4e7a0de82a9e7cd20c626cc963a2f8", + TargetCommit: gitCommit, + Message: []byte("Release"), + MessageSize: 7, + Tagger: &gitalypb.CommitAuthor{ + Name: []byte("Dmitriy Zaporozhets"), + Email: []byte("dmitriy.zaporozhets@gmail.com"), + Date: ×tamppb.Timestamp{Seconds: 1393491299}, + Timezone: []byte("+0200"), + }, + SignatureType: gitalypb.SignatureType_NONE, + }, + { + Name: []byte("v1.1.0"), + Id: "8a2a6eb295bb170b34c24c76c49ed0e9b2eaf34b", + TargetCommit: testhelper.GitLabTestCommit("5937ac0a7beb003549fc5fd26fc247adbce4a52e"), + Message: []byte("Version 1.1.0"), + MessageSize: 13, + Tagger: &gitalypb.CommitAuthor{ + Name: []byte("Dmitriy Zaporozhets"), + Email: []byte("dmitriy.zaporozhets@gmail.com"), + Date: ×tamppb.Timestamp{Seconds: 1393505709}, + Timezone: []byte("+0200"), + }, + }, + { + Name: []byte("v1.1.1"), + Id: "8f03acbcd11c53d9c9468078f32a2622005a4841", + TargetCommit: testhelper.GitLabTestCommit("189a6c924013fc3fe40d6f1ec1dc20214183bc97"), + Message: []byte("x509 signed tag\n-----BEGIN SIGNED MESSAGE-----\nMIISfwYJKoZIhvcNAQcCoIIScDCCEmwCAQExDTALBglghkgBZQMEAgEwCwYJKoZI\nhvcNAQcBoIIP8zCCB3QwggVcoAMCAQICBBXXLOIwDQYJKoZIhvcNAQELBQAwgbYx\nCzAJBgNVBAYTAkRFMQ8wDQYDVQQIDAZCYXllcm4xETAPBgNVBAcMCE11ZW5jaGVu\nMRAwDgYDVQQKDAdTaWVtZW5zMREwDwYDVQQFEwhaWlpaWlpBNjEdMBsGA1UECwwU\nU2llbWVucyBUcnVzdCBDZW50ZXIxPzA9BgNVBAMMNlNpZW1lbnMgSXNzdWluZyBD\nQSBNZWRpdW0gU3RyZW5ndGggQXV0aGVudGljYXRpb24gMjAxNjAeFw0xNzAyMDMw\nNjU4MzNaFw0yMDAyMDMwNjU4MzNaMFsxETAPBgNVBAUTCFowMDBOV0RIMQ4wDAYD\nVQQqDAVSb2dlcjEOMAwGA1UEBAwFTWVpZXIxEDAOBgNVBAoMB1NpZW1lbnMxFDAS\nBgNVBAMMC01laWVyIFJvZ2VyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\nAQEAuBNea/68ZCnHYQjpm/k3ZBG0wBpEKSwG6lk9CEQlSxsqVLQHAoAKBIlJm1in\nYVLcK/Sq1yhYJ/qWcY/M53DhK2rpPuhtrWJUdOUy8EBWO20F4bd4Fw9pO7jt8bme\nu33TSrK772vKjuppzB6SeG13Cs08H+BIeD106G27h7ufsO00pvsxoSDL+uc4slnr\npBL+2TAL7nSFnB9QHWmRIK27SPqJE+lESdb0pse11x1wjvqKy2Q7EjL9fpqJdHzX\nNLKHXd2r024TOORTa05DFTNR+kQEKKV96XfpYdtSBomXNQ44cisiPBJjFtYvfnFE\nwgrHa8fogn/b0C+A+HAoICN12wIDAQABo4IC4jCCAt4wHQYDVR0OBBYEFCF+gkUp\nXQ6xGc0kRWXuDFxzA14zMEMGA1UdEQQ8MDqgIwYKKwYBBAGCNxQCA6AVDBNyLm1l\naWVyQHNpZW1lbnMuY29tgRNyLm1laWVyQHNpZW1lbnMuY29tMA4GA1UdDwEB/wQE\nAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwgcoGA1UdHwSBwjCB\nvzCBvKCBuaCBtoYmaHR0cDovL2NoLnNpZW1lbnMuY29tL3BraT9aWlpaWlpBNi5j\ncmyGQWxkYXA6Ly9jbC5zaWVtZW5zLm5ldC9DTj1aWlpaWlpBNixMPVBLST9jZXJ0\naWZpY2F0ZVJldm9jYXRpb25MaXN0hklsZGFwOi8vY2wuc2llbWVucy5jb20vQ049\nWlpaWlpaQTYsbz1UcnVzdGNlbnRlcj9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0\nMEUGA1UdIAQ+MDwwOgYNKwYBBAGhaQcCAgMBAzApMCcGCCsGAQUFBwIBFhtodHRw\nOi8vd3d3LnNpZW1lbnMuY29tL3BraS8wDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAW\ngBT4FV1HDGx3e3LEAheRaKK292oJRDCCAQQGCCsGAQUFBwEBBIH3MIH0MDIGCCsG\nAQUFBzAChiZodHRwOi8vYWguc2llbWVucy5jb20vcGtpP1paWlpaWkE2LmNydDBB\nBggrBgEFBQcwAoY1bGRhcDovL2FsLnNpZW1lbnMubmV0L0NOPVpaWlpaWkE2LEw9\nUEtJP2NBQ2VydGlmaWNhdGUwSQYIKwYBBQUHMAKGPWxkYXA6Ly9hbC5zaWVtZW5z\nLmNvbS9DTj1aWlpaWlpBNixvPVRydXN0Y2VudGVyP2NBQ2VydGlmaWNhdGUwMAYI\nKwYBBQUHMAGGJGh0dHA6Ly9vY3NwLnBraS1zZXJ2aWNlcy5zaWVtZW5zLmNvbTAN\nBgkqhkiG9w0BAQsFAAOCAgEAXPVcX6vaEcszJqg5IemF9aFTlwTrX5ITNIpzcqG+\nkD5haOf2mZYLjl+MKtLC1XfmIsGCUZNb8bjP6QHQEI+2d6x/ZOqPq7Kd7PwVu6x6\nxZrkDjUyhUbUntT5+RBy++l3Wf6Cq6Kx+K8ambHBP/bu90/p2U8KfFAG3Kr2gI2q\nfZrnNMOxmJfZ3/sXxssgLkhbZ7hRa+MpLfQ6uFsSiat3vlawBBvTyHnoZ/7oRc8y\nqi6QzWcd76CPpMElYWibl+hJzKbBZUWvc71AzHR6i1QeZ6wubYz7vr+FF5Y7tnxB\nVz6omPC9XAg0F+Dla6Zlz3Awj5imCzVXa+9SjtnsidmJdLcKzTAKyDewewoxYOOJ\nj3cJU7VSjJPl+2fVmDBaQwcNcUcu/TPAKApkegqO7tRF9IPhjhW8QkRnkqMetO3D\nOXmAFVIsEI0Hvb2cdb7B6jSpjGUuhaFm9TCKhQtCk2p8JCDTuaENLm1x34rrJKbT\n2vzyYN0CZtSkUdgD4yQxK9VWXGEzexRisWb4AnZjD2NAquLPpXmw8N0UwFD7MSpC\ndpaX7FktdvZmMXsnGiAdtLSbBgLVWOD1gmJFDjrhNbI8NOaOaNk4jrfGqNh5lhGU\n4DnBT2U6Cie1anLmFH/oZooAEXR2o3Nu+1mNDJChnJp0ovs08aa3zZvBdcloOvfU\nqdowggh3MIIGX6ADAgECAgQtyi/nMA0GCSqGSIb3DQEBCwUAMIGZMQswCQYDVQQG\nEwJERTEPMA0GA1UECAwGQmF5ZXJuMREwDwYDVQQHDAhNdWVuY2hlbjEQMA4GA1UE\nCgwHU2llbWVuczERMA8GA1UEBRMIWlpaWlpaQTExHTAbBgNVBAsMFFNpZW1lbnMg\nVHJ1c3QgQ2VudGVyMSIwIAYDVQQDDBlTaWVtZW5zIFJvb3QgQ0EgVjMuMCAyMDE2\nMB4XDTE2MDcyMDEzNDYxMFoXDTIyMDcyMDEzNDYxMFowgbYxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIDAZCYXllcm4xETAPBgNVBAcMCE11ZW5jaGVuMRAwDgYDVQQKDAdT\naWVtZW5zMREwDwYDVQQFEwhaWlpaWlpBNjEdMBsGA1UECwwUU2llbWVucyBUcnVz\ndCBDZW50ZXIxPzA9BgNVBAMMNlNpZW1lbnMgSXNzdWluZyBDQSBNZWRpdW0gU3Ry\nZW5ndGggQXV0aGVudGljYXRpb24gMjAxNjCCAiIwDQYJKoZIhvcNAQEBBQADggIP\nADCCAgoCggIBAL9UfK+JAZEqVMVvECdYF9IK4KSw34AqyNl3rYP5x03dtmKaNu+2\n0fQqNESA1NGzw3s6LmrKLh1cR991nB2cvKOXu7AvEGpSuxzIcOROd4NpvRx+Ej1p\nJIPeqf+ScmVK7lMSO8QL/QzjHOpGV3is9sG+ZIxOW9U1ESooy4Hal6ZNs4DNItsz\npiCKqm6G3et4r2WqCy2RRuSqvnmMza7Y8BZsLy0ZVo5teObQ37E/FxqSrbDI8nxn\nB7nVUve5ZjrqoIGSkEOtyo11003dVO1vmWB9A0WQGDqE/q3w178hGhKfxzRaqzyi\nSoADUYS2sD/CglGTUxVq6u0pGLLsCFjItcCWqW+T9fPYfJ2CEd5b3hvqdCn+pXjZ\n/gdX1XAcdUF5lRnGWifaYpT9n4s4adzX8q6oHSJxTppuAwLRKH6eXALbGQ1I9lGQ\nDSOipD/09xkEsPw6HOepmf2U3YxZK1VU2sHqugFJboeLcHMzp6E1n2ctlNG1GKE9\nFDHmdyFzDi0Nnxtf/GgVjnHF68hByEE1MYdJ4nJLuxoT9hyjYdRW9MpeNNxxZnmz\nW3zh7QxIqP0ZfIz6XVhzrI9uZiqwwojDiM5tEOUkQ7XyW6grNXe75yt6mTj89LlB\nH5fOW2RNmCy/jzBXDjgyskgK7kuCvUYTuRv8ITXbBY5axFA+CpxZqokpAgMBAAGj\nggKmMIICojCCAQUGCCsGAQUFBwEBBIH4MIH1MEEGCCsGAQUFBzAChjVsZGFwOi8v\nYWwuc2llbWVucy5uZXQvQ049WlpaWlpaQTEsTD1QS0k/Y0FDZXJ0aWZpY2F0ZTAy\nBggrBgEFBQcwAoYmaHR0cDovL2FoLnNpZW1lbnMuY29tL3BraT9aWlpaWlpBMS5j\ncnQwSgYIKwYBBQUHMAKGPmxkYXA6Ly9hbC5zaWVtZW5zLmNvbS91aWQ9WlpaWlpa\nQTEsbz1UcnVzdGNlbnRlcj9jQUNlcnRpZmljYXRlMDAGCCsGAQUFBzABhiRodHRw\nOi8vb2NzcC5wa2ktc2VydmljZXMuc2llbWVucy5jb20wHwYDVR0jBBgwFoAUcG2g\nUOyp0CxnnRkV/v0EczXD4tQwEgYDVR0TAQH/BAgwBgEB/wIBADBABgNVHSAEOTA3\nMDUGCCsGAQQBoWkHMCkwJwYIKwYBBQUHAgEWG2h0dHA6Ly93d3cuc2llbWVucy5j\nb20vcGtpLzCBxwYDVR0fBIG/MIG8MIG5oIG2oIGzhj9sZGFwOi8vY2wuc2llbWVu\ncy5uZXQvQ049WlpaWlpaQTEsTD1QS0k/YXV0aG9yaXR5UmV2b2NhdGlvbkxpc3SG\nJmh0dHA6Ly9jaC5zaWVtZW5zLmNvbS9wa2k/WlpaWlpaQTEuY3JshkhsZGFwOi8v\nY2wuc2llbWVucy5jb20vdWlkPVpaWlpaWkExLG89VHJ1c3RjZW50ZXI/YXV0aG9y\naXR5UmV2b2NhdGlvbkxpc3QwJwYDVR0lBCAwHgYIKwYBBQUHAwIGCCsGAQUFBwME\nBggrBgEFBQcDCTAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPgVXUcMbHd7csQC\nF5Foorb3aglEMA0GCSqGSIb3DQEBCwUAA4ICAQBw+sqMp3SS7DVKcILEmXbdRAg3\nlLO1r457KY+YgCT9uX4VG5EdRKcGfWXK6VHGCi4Dos5eXFV34Mq/p8nu1sqMuoGP\nYjHn604eWDprhGy6GrTYdxzcE/GGHkpkuE3Ir/45UcmZlOU41SJ9SNjuIVrSHMOf\nccSY42BCspR/Q1Z/ykmIqQecdT3/Kkx02GzzSN2+HlW6cEO4GBW5RMqsvd2n0h2d\nfe2zcqOgkLtx7u2JCR/U77zfyxG3qXtcymoz0wgSHcsKIl+GUjITLkHfS9Op8V7C\nGr/dX437sIg5pVHmEAWadjkIzqdHux+EF94Z6kaHywohc1xG0KvPYPX7iSNjkvhz\n4NY53DHmxl4YEMLffZnaS/dqyhe1GTpcpyN8WiR4KuPfxrkVDOsuzWFtMSvNdlOV\ngdI0MXcLMP+EOeANZWX6lGgJ3vWyemo58nzgshKd24MY3w3i6masUkxJH2KvI7UH\n/1Db3SC8oOUjInvSRej6M3ZhYWgugm6gbpUgFoDw/o9Cg6Qm71hY0JtcaPC13rzm\nN8a2Br0+Fa5e2VhwLmAxyfe1JKzqPwuHT0S5u05SQghL5VdzqfA8FCL/j4XC9yI6\ncsZTAQi73xFQYVjZt3+aoSz84lOlTmVo/jgvGMY/JzH9I4mETGgAJRNj34Z/0meh\nM+pKWCojNH/dgyJSwDGCAlIwggJOAgEBMIG/MIG2MQswCQYDVQQGEwJERTEPMA0G\nA1UECAwGQmF5ZXJuMREwDwYDVQQHDAhNdWVuY2hlbjEQMA4GA1UECgwHU2llbWVu\nczERMA8GA1UEBRMIWlpaWlpaQTYxHTAbBgNVBAsMFFNpZW1lbnMgVHJ1c3QgQ2Vu\ndGVyMT8wPQYDVQQDDDZTaWVtZW5zIElzc3VpbmcgQ0EgTWVkaXVtIFN0cmVuZ3Ro\nIEF1dGhlbnRpY2F0aW9uIDIwMTYCBBXXLOIwCwYJYIZIAWUDBAIBoGkwHAYJKoZI\nhvcNAQkFMQ8XDTE5MTEyMDE0NTYyMFowLwYJKoZIhvcNAQkEMSIEIJDnZUpcVLzC\nOdtpkH8gtxwLPIDE0NmAmFC9uM8q2z+OMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0B\nBwEwCwYJKoZIhvcNAQEBBIIBAH/Pqv2xp3a0jSPkwU1K3eGA/1lfoNJMUny4d/PS\nLVWlkgrmedXdLmuBzAGEaaZOJS0lEpNd01pR/reHs7xxZ+RZ0olTs2ufM0CijQSx\nOL9HDl2O3OoD77NWx4tl3Wy1yJCeV3XH/cEI7AkKHCmKY9QMoMYWh16ORBtr+YcS\nYK+gONOjpjgcgTJgZ3HSFgQ50xiD4WT1kFBHsuYsLqaOSbTfTN6Ayyg4edjrPQqa\nVcVf1OQcIrfWA3yMQrnEZfOYfN/D4EPjTfxBV+VCi/F2bdZmMbJ7jNk1FbewSwWO\nSDH1i0K32NyFbnh0BSos7njq7ELqKlYBsoB/sZfaH2vKy5U=\n-----END SIGNED MESSAGE-----"), + MessageSize: 6494, + Tagger: &gitalypb.CommitAuthor{ + Name: []byte("Roger Meier"), + Email: []byte("r.meier@siemens.com"), + Date: ×tamppb.Timestamp{Seconds: 1574261780}, + Timezone: []byte("+0100"), + }, + SignatureType: gitalypb.SignatureType_X509, + }, + { + Name: []byte("v1.2.0"), + Id: annotatedTagID.String(), + Message: []byte("Blob tag"), + MessageSize: 8, + Tagger: &gitalypb.CommitAuthor{ + Name: []byte(gittest.DefaultCommitterName), + Email: []byte(gittest.DefaultCommitterMail), + Date: timestamppb.New(gittest.DefaultCommitTime), + Timezone: []byte("+0100"), + }, + }, + { + Name: []byte("v1.3.0"), + Id: commitID.String(), + TargetCommit: gitCommit, + }, + { + Name: []byte("v1.4.0"), + Id: blobID.String(), + }, + { + Name: []byte("v1.5.0"), + Id: commitID.String(), + TargetCommit: gitCommit, + }, + { + Name: []byte("v1.6.0"), + Id: bigCommitID.String(), + TargetCommit: bigCommit, + }, + { + Name: []byte("v1.7.0"), + Id: bigMessageTag1ID.String(), + Message: []byte(bigMessage[:helper.MaxCommitOrTagMessageSize]), + MessageSize: int64(len(bigMessage)), + TargetCommit: gitCommit, + Tagger: &gitalypb.CommitAuthor{ + Name: []byte(gittest.DefaultCommitterName), + Email: []byte(gittest.DefaultCommitterMail), + Date: timestamppb.New(gittest.DefaultCommitTime), + Timezone: []byte("+0100"), + }, + }, + } + + for _, expectedTag := range expectedTags { + rpcRequest := &gitalypb.FindTagRequest{Repository: repoProto, TagName: expectedTag.Name} + + resp, err := client.FindTag(ctx, rpcRequest) + require.NoError(t, err) + + testhelper.ProtoEqual(t, expectedTag, resp.GetTag()) + } +} + +func TestFindTag_nestedTag(t *testing.T) { + t.Parallel() + + ctx := testhelper.Context(t) + cfg, repoProto, repoPath, client := setupRefService(ctx, t) + + repo := localrepo.NewTestRepo(t, cfg, repoProto) + + blobID := git.ObjectID("faaf198af3a36dbf41961466703cc1d47c61d051") + commitID := git.ObjectID("6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9") + + testCases := []struct { + description string + depth int + originalOid git.ObjectID + }{ + { + description: "nested 1 deep, points to a commit", + depth: 1, + originalOid: commitID, + }, + { + description: "nested 4 deep, points to a commit", + depth: 4, + originalOid: commitID, + }, + { + description: "nested 3 deep, points to a blob", + depth: 3, + originalOid: blobID, + }, + { + description: "nested 20 deep, points to a commit", + depth: 20, + originalOid: commitID, + }, + } + + for _, tc := range testCases { + t.Run(tc.description, func(t *testing.T) { + tags, err := repo.GetReferences(ctx, "refs/tags/") + require.NoError(t, err) + + updater, err := updateref.New(ctx, repo) + require.NoError(t, err) + for _, tag := range tags { + require.NoError(t, updater.Delete(tag.Name)) + } + require.NoError(t, updater.Commit()) + + catfileCache := catfile.NewCache(cfg) + defer catfileCache.Stop() + + objectReader, cancel, err := catfileCache.ObjectReader(ctx, repo) + require.NoError(t, err) + defer cancel() + + objectInfoReader, cancel, err := catfileCache.ObjectInfoReader(ctx, repo) + require.NoError(t, err) + defer cancel() + + info, err := objectInfoReader.Info(ctx, git.Revision(tc.originalOid)) + require.NoError(t, err) + + tagID := tc.originalOid + var tagName, tagMessage string + + for depth := 0; depth < tc.depth; depth++ { + tagName = fmt.Sprintf("tag-depth-%d", depth) + tagMessage = fmt.Sprintf("a commit %d deep", depth) + tagID = gittest.WriteTag(t, cfg, repoPath, tagName, tagID.Revision(), gittest.WriteTagConfig{Message: tagMessage}) + } + expectedTag := &gitalypb.Tag{ + Name: []byte(tagName), + Id: tagID.String(), + Message: []byte(tagMessage), + MessageSize: int64(len([]byte(tagMessage))), + Tagger: &gitalypb.CommitAuthor{ + Name: []byte(gittest.DefaultCommitterName), + Email: []byte(gittest.DefaultCommitterMail), + Date: timestamppb.New(gittest.DefaultCommitTime), + Timezone: []byte("+0100"), + }, + } + if info.Type == "commit" { + commit, err := catfile.GetCommit(ctx, objectReader, git.Revision(tc.originalOid)) + require.NoError(t, err) + expectedTag.TargetCommit = commit + } + rpcRequest := &gitalypb.FindTagRequest{Repository: repoProto, TagName: []byte(tagName)} + + resp, err := client.FindTag(ctx, rpcRequest) + require.NoError(t, err) + require.Equal(t, expectedTag, resp.GetTag()) + }) + } +} + +func TestFindTag_invalidRequest(t *testing.T) { + t.Parallel() + + ctx := testhelper.Context(t) + _, repo, _, client := setupRefService(ctx, t) + + testCases := []struct { + desc string + request *gitalypb.FindTagRequest + }{ + { + desc: "empty request", + request: &gitalypb.FindTagRequest{}, + }, + { + desc: "invalid repo", + request: &gitalypb.FindTagRequest{ + Repository: &gitalypb.Repository{ + StorageName: "fake", + RelativePath: "repo", + }, + }, + }, + { + desc: "empty tag name", + request: &gitalypb.FindTagRequest{ + Repository: repo, + }, + }, + } + + for _, tc := range testCases { + t.Run(tc.desc, func(t *testing.T) { + _, err := client.FindTag(ctx, tc.request) + testhelper.RequireGrpcCode(t, err, codes.InvalidArgument) + }) + } +} diff --git a/internal/gitaly/service/ref/refs.go b/internal/gitaly/service/ref/refs.go index 998415e6d..0e1f13eb6 100644 --- a/internal/gitaly/service/ref/refs.go +++ b/internal/gitaly/service/ref/refs.go @@ -1,16 +1,13 @@ package ref import ( - "bufio" "bytes" "context" - "errors" "fmt" "math" "strings" "gitlab.com/gitlab-org/gitaly/v15/internal/git" - "gitlab.com/gitlab-org/gitaly/v15/internal/git/catfile" "gitlab.com/gitlab-org/gitaly/v15/internal/helper" "gitlab.com/gitlab-org/gitaly/v15/internal/helper/lines" "gitlab.com/gitlab-org/gitaly/v15/proto/go/gitalypb" @@ -175,112 +172,6 @@ func (s *server) findAllBranches(in *gitalypb.FindAllBranchesRequest, stream git return s.findRefs(ctx, writer, repo, patterns, opts) } -func (s *server) FindTag(ctx context.Context, in *gitalypb.FindTagRequest) (*gitalypb.FindTagResponse, error) { - if err := s.validateFindTagRequest(in); err != nil { - return nil, helper.ErrInvalidArgument(err) - } - - repo := s.localrepo(in.GetRepository()) - - tag, err := s.findTag(ctx, repo, in.GetTagName()) - if err != nil { - return nil, helper.ErrInternal(err) - } - - return &gitalypb.FindTagResponse{Tag: tag}, nil -} - -// parseTagLine parses a line of text with the output format %(objectname) %(objecttype) %(refname:lstrip=2) -func parseTagLine(ctx context.Context, objectReader catfile.ObjectReader, tagLine string) (*gitalypb.Tag, error) { - fields := strings.SplitN(tagLine, " ", 3) - if len(fields) != 3 { - return nil, fmt.Errorf("invalid output from for-each-ref command: %v", tagLine) - } - - tagID, refType, refName := fields[0], fields[1], fields[2] - - tag := &gitalypb.Tag{ - Id: tagID, - Name: []byte(refName), - } - - switch refType { - // annotated tag - case "tag": - tag, err := catfile.GetTag(ctx, objectReader, git.Revision(tagID), refName) - if err != nil { - return nil, fmt.Errorf("getting annotated tag: %v", err) - } - catfile.TrimTagMessage(tag) - - return tag, nil - case "commit": - commit, err := catfile.GetCommit(ctx, objectReader, git.Revision(tagID)) - if err != nil { - return nil, fmt.Errorf("getting commit catfile: %v", err) - } - tag.TargetCommit = commit - return tag, nil - default: - return tag, nil - } -} - -func (s *server) findTag(ctx context.Context, repo git.RepositoryExecutor, tagName []byte) (*gitalypb.Tag, error) { - tagCmd, err := repo.Exec(ctx, - git.SubCmd{ - Name: "tag", - Flags: []git.Option{ - git.Flag{Name: "-l"}, git.ValueFlag{Name: "--format", Value: tagFormat}, - }, - Args: []string{string(tagName)}, - }, - git.WithRefTxHook(repo), - ) - if err != nil { - return nil, fmt.Errorf("for-each-ref error: %v", err) - } - - objectReader, cancel, err := s.catfileCache.ObjectReader(ctx, repo) - if err != nil { - return nil, err - } - defer cancel() - - var tag *gitalypb.Tag - - scanner := bufio.NewScanner(tagCmd) - if scanner.Scan() { - tag, err = parseTagLine(ctx, objectReader, scanner.Text()) - if err != nil { - return nil, err - } - } else { - return nil, errors.New("no tag found") - } - - if err = tagCmd.Wait(); err != nil { - return nil, err - } - - return tag, nil -} - -func (s *server) validateFindTagRequest(in *gitalypb.FindTagRequest) error { - if in.GetRepository() == nil { - return errors.New("repository is empty") - } - - if _, err := s.locator.GetRepoPath(in.GetRepository()); err != nil { - return fmt.Errorf("invalid git directory: %v", err) - } - - if in.GetTagName() == nil { - return errors.New("tag name is empty") - } - return nil -} - func buildPaginationOpts(ctx context.Context, p *gitalypb.PaginationParameter) *paginationOpts { opts := &paginationOpts{} opts.IsPageToken = func(_ []byte) bool { return true } diff --git a/internal/gitaly/service/ref/refs_test.go b/internal/gitaly/service/ref/refs_test.go index 99e4a3d6f..404ea6af8 100644 --- a/internal/gitaly/service/ref/refs_test.go +++ b/internal/gitaly/service/ref/refs_test.go @@ -12,7 +12,6 @@ import ( "github.com/stretchr/testify/require" "gitlab.com/gitlab-org/gitaly/v15/internal/git" - "gitlab.com/gitlab-org/gitaly/v15/internal/git/catfile" "gitlab.com/gitlab-org/gitaly/v15/internal/git/gittest" "gitlab.com/gitlab-org/gitaly/v15/internal/git/localrepo" "gitlab.com/gitlab-org/gitaly/v15/internal/git/updateref" @@ -863,300 +862,3 @@ func TestListBranchNamesContainingCommit(t *testing.T) { }) } } - -func TestSuccessfulFindTagRequest(t *testing.T) { - ctx := testhelper.Context(t) - cfg, repoProto, repoPath, client := setupRefService(ctx, t) - - repo := localrepo.NewTestRepo(t, cfg, repoProto) - - blobID := git.ObjectID("faaf198af3a36dbf41961466703cc1d47c61d051") - commitID := git.ObjectID("6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9") - - gitCommit := testhelper.GitLabTestCommit(commitID.String()) - - bigCommitID := gittest.WriteCommit(t, cfg, repoPath, - gittest.WithBranch("local-big-commits"), - gittest.WithMessage("An empty commit with REALLY BIG message\n\n"+strings.Repeat("a", helper.MaxCommitOrTagMessageSize+1)), - gittest.WithParents("60ecb67744cb56576c30214ff52294f8ce2def98"), - ) - bigCommit, err := repo.ReadCommit(ctx, git.Revision(bigCommitID)) - require.NoError(t, err) - - annotatedTagID := gittest.WriteTag(t, cfg, repoPath, "v1.2.0", blobID.Revision(), gittest.WriteTagConfig{Message: "Blob tag"}) - - gittest.WriteTag(t, cfg, repoPath, "v1.3.0", commitID.Revision()) - gittest.WriteTag(t, cfg, repoPath, "v1.4.0", blobID.Revision()) - - // To test recursive resolving to a commit - gittest.WriteTag(t, cfg, repoPath, "v1.5.0", "v1.3.0") - - // A tag to commit with a big message - gittest.WriteTag(t, cfg, repoPath, "v1.6.0", bigCommitID.Revision()) - - // A tag with a big message - bigMessage := strings.Repeat("a", 11*1024) - bigMessageTag1ID := gittest.WriteTag(t, cfg, repoPath, "v1.7.0", commitID.Revision(), gittest.WriteTagConfig{Message: bigMessage}) - - // A tag with a commit id as its name - commitTagID := gittest.WriteTag(t, cfg, repoPath, commitID.String(), commitID.Revision(), gittest.WriteTagConfig{Message: "commit tag with a commit sha as the name"}) - - // a tag of a tag - tagOfTagID := gittest.WriteTag(t, cfg, repoPath, "tag-of-tag", commitTagID.Revision(), gittest.WriteTagConfig{Message: "tag of a tag"}) - - expectedTags := []*gitalypb.Tag{ - { - Name: []byte(commitID), - Id: commitTagID.String(), - TargetCommit: gitCommit, - Message: []byte("commit tag with a commit sha as the name"), - MessageSize: 40, - Tagger: &gitalypb.CommitAuthor{ - Name: []byte(gittest.DefaultCommitterName), - Email: []byte(gittest.DefaultCommitterMail), - Date: timestamppb.New(gittest.DefaultCommitTime), - Timezone: []byte("+0100"), - }, - }, - { - Name: []byte("tag-of-tag"), - Id: tagOfTagID.String(), - TargetCommit: gitCommit, - Message: []byte("tag of a tag"), - MessageSize: 12, - Tagger: &gitalypb.CommitAuthor{ - Name: []byte(gittest.DefaultCommitterName), - Email: []byte(gittest.DefaultCommitterMail), - Date: timestamppb.New(gittest.DefaultCommitTime), - Timezone: []byte("+0100"), - }, - }, - { - Name: []byte("v1.0.0"), - Id: "f4e6814c3e4e7a0de82a9e7cd20c626cc963a2f8", - TargetCommit: gitCommit, - Message: []byte("Release"), - MessageSize: 7, - Tagger: &gitalypb.CommitAuthor{ - Name: []byte("Dmitriy Zaporozhets"), - Email: []byte("dmitriy.zaporozhets@gmail.com"), - Date: ×tamppb.Timestamp{Seconds: 1393491299}, - Timezone: []byte("+0200"), - }, - SignatureType: gitalypb.SignatureType_NONE, - }, - { - Name: []byte("v1.1.0"), - Id: "8a2a6eb295bb170b34c24c76c49ed0e9b2eaf34b", - TargetCommit: testhelper.GitLabTestCommit("5937ac0a7beb003549fc5fd26fc247adbce4a52e"), - Message: []byte("Version 1.1.0"), - MessageSize: 13, - Tagger: &gitalypb.CommitAuthor{ - Name: []byte("Dmitriy Zaporozhets"), - Email: []byte("dmitriy.zaporozhets@gmail.com"), - Date: ×tamppb.Timestamp{Seconds: 1393505709}, - Timezone: []byte("+0200"), - }, - }, - { - Name: []byte("v1.1.1"), - Id: "8f03acbcd11c53d9c9468078f32a2622005a4841", - TargetCommit: testhelper.GitLabTestCommit("189a6c924013fc3fe40d6f1ec1dc20214183bc97"), - Message: []byte("x509 signed tag\n-----BEGIN SIGNED MESSAGE-----\nMIISfwYJKoZIhvcNAQcCoIIScDCCEmwCAQExDTALBglghkgBZQMEAgEwCwYJKoZI\nhvcNAQcBoIIP8zCCB3QwggVcoAMCAQICBBXXLOIwDQYJKoZIhvcNAQELBQAwgbYx\nCzAJBgNVBAYTAkRFMQ8wDQYDVQQIDAZCYXllcm4xETAPBgNVBAcMCE11ZW5jaGVu\nMRAwDgYDVQQKDAdTaWVtZW5zMREwDwYDVQQFEwhaWlpaWlpBNjEdMBsGA1UECwwU\nU2llbWVucyBUcnVzdCBDZW50ZXIxPzA9BgNVBAMMNlNpZW1lbnMgSXNzdWluZyBD\nQSBNZWRpdW0gU3RyZW5ndGggQXV0aGVudGljYXRpb24gMjAxNjAeFw0xNzAyMDMw\nNjU4MzNaFw0yMDAyMDMwNjU4MzNaMFsxETAPBgNVBAUTCFowMDBOV0RIMQ4wDAYD\nVQQqDAVSb2dlcjEOMAwGA1UEBAwFTWVpZXIxEDAOBgNVBAoMB1NpZW1lbnMxFDAS\nBgNVBAMMC01laWVyIFJvZ2VyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\nAQEAuBNea/68ZCnHYQjpm/k3ZBG0wBpEKSwG6lk9CEQlSxsqVLQHAoAKBIlJm1in\nYVLcK/Sq1yhYJ/qWcY/M53DhK2rpPuhtrWJUdOUy8EBWO20F4bd4Fw9pO7jt8bme\nu33TSrK772vKjuppzB6SeG13Cs08H+BIeD106G27h7ufsO00pvsxoSDL+uc4slnr\npBL+2TAL7nSFnB9QHWmRIK27SPqJE+lESdb0pse11x1wjvqKy2Q7EjL9fpqJdHzX\nNLKHXd2r024TOORTa05DFTNR+kQEKKV96XfpYdtSBomXNQ44cisiPBJjFtYvfnFE\nwgrHa8fogn/b0C+A+HAoICN12wIDAQABo4IC4jCCAt4wHQYDVR0OBBYEFCF+gkUp\nXQ6xGc0kRWXuDFxzA14zMEMGA1UdEQQ8MDqgIwYKKwYBBAGCNxQCA6AVDBNyLm1l\naWVyQHNpZW1lbnMuY29tgRNyLm1laWVyQHNpZW1lbnMuY29tMA4GA1UdDwEB/wQE\nAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwgcoGA1UdHwSBwjCB\nvzCBvKCBuaCBtoYmaHR0cDovL2NoLnNpZW1lbnMuY29tL3BraT9aWlpaWlpBNi5j\ncmyGQWxkYXA6Ly9jbC5zaWVtZW5zLm5ldC9DTj1aWlpaWlpBNixMPVBLST9jZXJ0\naWZpY2F0ZVJldm9jYXRpb25MaXN0hklsZGFwOi8vY2wuc2llbWVucy5jb20vQ049\nWlpaWlpaQTYsbz1UcnVzdGNlbnRlcj9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0\nMEUGA1UdIAQ+MDwwOgYNKwYBBAGhaQcCAgMBAzApMCcGCCsGAQUFBwIBFhtodHRw\nOi8vd3d3LnNpZW1lbnMuY29tL3BraS8wDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAW\ngBT4FV1HDGx3e3LEAheRaKK292oJRDCCAQQGCCsGAQUFBwEBBIH3MIH0MDIGCCsG\nAQUFBzAChiZodHRwOi8vYWguc2llbWVucy5jb20vcGtpP1paWlpaWkE2LmNydDBB\nBggrBgEFBQcwAoY1bGRhcDovL2FsLnNpZW1lbnMubmV0L0NOPVpaWlpaWkE2LEw9\nUEtJP2NBQ2VydGlmaWNhdGUwSQYIKwYBBQUHMAKGPWxkYXA6Ly9hbC5zaWVtZW5z\nLmNvbS9DTj1aWlpaWlpBNixvPVRydXN0Y2VudGVyP2NBQ2VydGlmaWNhdGUwMAYI\nKwYBBQUHMAGGJGh0dHA6Ly9vY3NwLnBraS1zZXJ2aWNlcy5zaWVtZW5zLmNvbTAN\nBgkqhkiG9w0BAQsFAAOCAgEAXPVcX6vaEcszJqg5IemF9aFTlwTrX5ITNIpzcqG+\nkD5haOf2mZYLjl+MKtLC1XfmIsGCUZNb8bjP6QHQEI+2d6x/ZOqPq7Kd7PwVu6x6\nxZrkDjUyhUbUntT5+RBy++l3Wf6Cq6Kx+K8ambHBP/bu90/p2U8KfFAG3Kr2gI2q\nfZrnNMOxmJfZ3/sXxssgLkhbZ7hRa+MpLfQ6uFsSiat3vlawBBvTyHnoZ/7oRc8y\nqi6QzWcd76CPpMElYWibl+hJzKbBZUWvc71AzHR6i1QeZ6wubYz7vr+FF5Y7tnxB\nVz6omPC9XAg0F+Dla6Zlz3Awj5imCzVXa+9SjtnsidmJdLcKzTAKyDewewoxYOOJ\nj3cJU7VSjJPl+2fVmDBaQwcNcUcu/TPAKApkegqO7tRF9IPhjhW8QkRnkqMetO3D\nOXmAFVIsEI0Hvb2cdb7B6jSpjGUuhaFm9TCKhQtCk2p8JCDTuaENLm1x34rrJKbT\n2vzyYN0CZtSkUdgD4yQxK9VWXGEzexRisWb4AnZjD2NAquLPpXmw8N0UwFD7MSpC\ndpaX7FktdvZmMXsnGiAdtLSbBgLVWOD1gmJFDjrhNbI8NOaOaNk4jrfGqNh5lhGU\n4DnBT2U6Cie1anLmFH/oZooAEXR2o3Nu+1mNDJChnJp0ovs08aa3zZvBdcloOvfU\nqdowggh3MIIGX6ADAgECAgQtyi/nMA0GCSqGSIb3DQEBCwUAMIGZMQswCQYDVQQG\nEwJERTEPMA0GA1UECAwGQmF5ZXJuMREwDwYDVQQHDAhNdWVuY2hlbjEQMA4GA1UE\nCgwHU2llbWVuczERMA8GA1UEBRMIWlpaWlpaQTExHTAbBgNVBAsMFFNpZW1lbnMg\nVHJ1c3QgQ2VudGVyMSIwIAYDVQQDDBlTaWVtZW5zIFJvb3QgQ0EgVjMuMCAyMDE2\nMB4XDTE2MDcyMDEzNDYxMFoXDTIyMDcyMDEzNDYxMFowgbYxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIDAZCYXllcm4xETAPBgNVBAcMCE11ZW5jaGVuMRAwDgYDVQQKDAdT\naWVtZW5zMREwDwYDVQQFEwhaWlpaWlpBNjEdMBsGA1UECwwUU2llbWVucyBUcnVz\ndCBDZW50ZXIxPzA9BgNVBAMMNlNpZW1lbnMgSXNzdWluZyBDQSBNZWRpdW0gU3Ry\nZW5ndGggQXV0aGVudGljYXRpb24gMjAxNjCCAiIwDQYJKoZIhvcNAQEBBQADggIP\nADCCAgoCggIBAL9UfK+JAZEqVMVvECdYF9IK4KSw34AqyNl3rYP5x03dtmKaNu+2\n0fQqNESA1NGzw3s6LmrKLh1cR991nB2cvKOXu7AvEGpSuxzIcOROd4NpvRx+Ej1p\nJIPeqf+ScmVK7lMSO8QL/QzjHOpGV3is9sG+ZIxOW9U1ESooy4Hal6ZNs4DNItsz\npiCKqm6G3et4r2WqCy2RRuSqvnmMza7Y8BZsLy0ZVo5teObQ37E/FxqSrbDI8nxn\nB7nVUve5ZjrqoIGSkEOtyo11003dVO1vmWB9A0WQGDqE/q3w178hGhKfxzRaqzyi\nSoADUYS2sD/CglGTUxVq6u0pGLLsCFjItcCWqW+T9fPYfJ2CEd5b3hvqdCn+pXjZ\n/gdX1XAcdUF5lRnGWifaYpT9n4s4adzX8q6oHSJxTppuAwLRKH6eXALbGQ1I9lGQ\nDSOipD/09xkEsPw6HOepmf2U3YxZK1VU2sHqugFJboeLcHMzp6E1n2ctlNG1GKE9\nFDHmdyFzDi0Nnxtf/GgVjnHF68hByEE1MYdJ4nJLuxoT9hyjYdRW9MpeNNxxZnmz\nW3zh7QxIqP0ZfIz6XVhzrI9uZiqwwojDiM5tEOUkQ7XyW6grNXe75yt6mTj89LlB\nH5fOW2RNmCy/jzBXDjgyskgK7kuCvUYTuRv8ITXbBY5axFA+CpxZqokpAgMBAAGj\nggKmMIICojCCAQUGCCsGAQUFBwEBBIH4MIH1MEEGCCsGAQUFBzAChjVsZGFwOi8v\nYWwuc2llbWVucy5uZXQvQ049WlpaWlpaQTEsTD1QS0k/Y0FDZXJ0aWZpY2F0ZTAy\nBggrBgEFBQcwAoYmaHR0cDovL2FoLnNpZW1lbnMuY29tL3BraT9aWlpaWlpBMS5j\ncnQwSgYIKwYBBQUHMAKGPmxkYXA6Ly9hbC5zaWVtZW5zLmNvbS91aWQ9WlpaWlpa\nQTEsbz1UcnVzdGNlbnRlcj9jQUNlcnRpZmljYXRlMDAGCCsGAQUFBzABhiRodHRw\nOi8vb2NzcC5wa2ktc2VydmljZXMuc2llbWVucy5jb20wHwYDVR0jBBgwFoAUcG2g\nUOyp0CxnnRkV/v0EczXD4tQwEgYDVR0TAQH/BAgwBgEB/wIBADBABgNVHSAEOTA3\nMDUGCCsGAQQBoWkHMCkwJwYIKwYBBQUHAgEWG2h0dHA6Ly93d3cuc2llbWVucy5j\nb20vcGtpLzCBxwYDVR0fBIG/MIG8MIG5oIG2oIGzhj9sZGFwOi8vY2wuc2llbWVu\ncy5uZXQvQ049WlpaWlpaQTEsTD1QS0k/YXV0aG9yaXR5UmV2b2NhdGlvbkxpc3SG\nJmh0dHA6Ly9jaC5zaWVtZW5zLmNvbS9wa2k/WlpaWlpaQTEuY3JshkhsZGFwOi8v\nY2wuc2llbWVucy5jb20vdWlkPVpaWlpaWkExLG89VHJ1c3RjZW50ZXI/YXV0aG9y\naXR5UmV2b2NhdGlvbkxpc3QwJwYDVR0lBCAwHgYIKwYBBQUHAwIGCCsGAQUFBwME\nBggrBgEFBQcDCTAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPgVXUcMbHd7csQC\nF5Foorb3aglEMA0GCSqGSIb3DQEBCwUAA4ICAQBw+sqMp3SS7DVKcILEmXbdRAg3\nlLO1r457KY+YgCT9uX4VG5EdRKcGfWXK6VHGCi4Dos5eXFV34Mq/p8nu1sqMuoGP\nYjHn604eWDprhGy6GrTYdxzcE/GGHkpkuE3Ir/45UcmZlOU41SJ9SNjuIVrSHMOf\nccSY42BCspR/Q1Z/ykmIqQecdT3/Kkx02GzzSN2+HlW6cEO4GBW5RMqsvd2n0h2d\nfe2zcqOgkLtx7u2JCR/U77zfyxG3qXtcymoz0wgSHcsKIl+GUjITLkHfS9Op8V7C\nGr/dX437sIg5pVHmEAWadjkIzqdHux+EF94Z6kaHywohc1xG0KvPYPX7iSNjkvhz\n4NY53DHmxl4YEMLffZnaS/dqyhe1GTpcpyN8WiR4KuPfxrkVDOsuzWFtMSvNdlOV\ngdI0MXcLMP+EOeANZWX6lGgJ3vWyemo58nzgshKd24MY3w3i6masUkxJH2KvI7UH\n/1Db3SC8oOUjInvSRej6M3ZhYWgugm6gbpUgFoDw/o9Cg6Qm71hY0JtcaPC13rzm\nN8a2Br0+Fa5e2VhwLmAxyfe1JKzqPwuHT0S5u05SQghL5VdzqfA8FCL/j4XC9yI6\ncsZTAQi73xFQYVjZt3+aoSz84lOlTmVo/jgvGMY/JzH9I4mETGgAJRNj34Z/0meh\nM+pKWCojNH/dgyJSwDGCAlIwggJOAgEBMIG/MIG2MQswCQYDVQQGEwJERTEPMA0G\nA1UECAwGQmF5ZXJuMREwDwYDVQQHDAhNdWVuY2hlbjEQMA4GA1UECgwHU2llbWVu\nczERMA8GA1UEBRMIWlpaWlpaQTYxHTAbBgNVBAsMFFNpZW1lbnMgVHJ1c3QgQ2Vu\ndGVyMT8wPQYDVQQDDDZTaWVtZW5zIElzc3VpbmcgQ0EgTWVkaXVtIFN0cmVuZ3Ro\nIEF1dGhlbnRpY2F0aW9uIDIwMTYCBBXXLOIwCwYJYIZIAWUDBAIBoGkwHAYJKoZI\nhvcNAQkFMQ8XDTE5MTEyMDE0NTYyMFowLwYJKoZIhvcNAQkEMSIEIJDnZUpcVLzC\nOdtpkH8gtxwLPIDE0NmAmFC9uM8q2z+OMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0B\nBwEwCwYJKoZIhvcNAQEBBIIBAH/Pqv2xp3a0jSPkwU1K3eGA/1lfoNJMUny4d/PS\nLVWlkgrmedXdLmuBzAGEaaZOJS0lEpNd01pR/reHs7xxZ+RZ0olTs2ufM0CijQSx\nOL9HDl2O3OoD77NWx4tl3Wy1yJCeV3XH/cEI7AkKHCmKY9QMoMYWh16ORBtr+YcS\nYK+gONOjpjgcgTJgZ3HSFgQ50xiD4WT1kFBHsuYsLqaOSbTfTN6Ayyg4edjrPQqa\nVcVf1OQcIrfWA3yMQrnEZfOYfN/D4EPjTfxBV+VCi/F2bdZmMbJ7jNk1FbewSwWO\nSDH1i0K32NyFbnh0BSos7njq7ELqKlYBsoB/sZfaH2vKy5U=\n-----END SIGNED MESSAGE-----"), - MessageSize: 6494, - Tagger: &gitalypb.CommitAuthor{ - Name: []byte("Roger Meier"), - Email: []byte("r.meier@siemens.com"), - Date: ×tamppb.Timestamp{Seconds: 1574261780}, - Timezone: []byte("+0100"), - }, - SignatureType: gitalypb.SignatureType_X509, - }, - { - Name: []byte("v1.2.0"), - Id: annotatedTagID.String(), - Message: []byte("Blob tag"), - MessageSize: 8, - Tagger: &gitalypb.CommitAuthor{ - Name: []byte(gittest.DefaultCommitterName), - Email: []byte(gittest.DefaultCommitterMail), - Date: timestamppb.New(gittest.DefaultCommitTime), - Timezone: []byte("+0100"), - }, - }, - { - Name: []byte("v1.3.0"), - Id: commitID.String(), - TargetCommit: gitCommit, - }, - { - Name: []byte("v1.4.0"), - Id: blobID.String(), - }, - { - Name: []byte("v1.5.0"), - Id: commitID.String(), - TargetCommit: gitCommit, - }, - { - Name: []byte("v1.6.0"), - Id: bigCommitID.String(), - TargetCommit: bigCommit, - }, - { - Name: []byte("v1.7.0"), - Id: bigMessageTag1ID.String(), - Message: []byte(bigMessage[:helper.MaxCommitOrTagMessageSize]), - MessageSize: int64(len(bigMessage)), - TargetCommit: gitCommit, - Tagger: &gitalypb.CommitAuthor{ - Name: []byte(gittest.DefaultCommitterName), - Email: []byte(gittest.DefaultCommitterMail), - Date: timestamppb.New(gittest.DefaultCommitTime), - Timezone: []byte("+0100"), - }, - }, - } - - for _, expectedTag := range expectedTags { - rpcRequest := &gitalypb.FindTagRequest{Repository: repoProto, TagName: expectedTag.Name} - - resp, err := client.FindTag(ctx, rpcRequest) - require.NoError(t, err) - - testhelper.ProtoEqual(t, expectedTag, resp.GetTag()) - } -} - -func TestFindTagNestedTag(t *testing.T) { - ctx := testhelper.Context(t) - cfg, repoProto, repoPath, client := setupRefService(ctx, t) - - repo := localrepo.NewTestRepo(t, cfg, repoProto) - - blobID := git.ObjectID("faaf198af3a36dbf41961466703cc1d47c61d051") - commitID := git.ObjectID("6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9") - - testCases := []struct { - description string - depth int - originalOid git.ObjectID - }{ - { - description: "nested 1 deep, points to a commit", - depth: 1, - originalOid: commitID, - }, - { - description: "nested 4 deep, points to a commit", - depth: 4, - originalOid: commitID, - }, - { - description: "nested 3 deep, points to a blob", - depth: 3, - originalOid: blobID, - }, - { - description: "nested 20 deep, points to a commit", - depth: 20, - originalOid: commitID, - }, - } - - for _, tc := range testCases { - t.Run(tc.description, func(t *testing.T) { - tags, err := repo.GetReferences(ctx, "refs/tags/") - require.NoError(t, err) - - updater, err := updateref.New(ctx, repo) - require.NoError(t, err) - for _, tag := range tags { - require.NoError(t, updater.Delete(tag.Name)) - } - require.NoError(t, updater.Commit()) - - catfileCache := catfile.NewCache(cfg) - defer catfileCache.Stop() - - objectReader, cancel, err := catfileCache.ObjectReader(ctx, repo) - require.NoError(t, err) - defer cancel() - - objectInfoReader, cancel, err := catfileCache.ObjectInfoReader(ctx, repo) - require.NoError(t, err) - defer cancel() - - info, err := objectInfoReader.Info(ctx, git.Revision(tc.originalOid)) - require.NoError(t, err) - - tagID := tc.originalOid - var tagName, tagMessage string - - for depth := 0; depth < tc.depth; depth++ { - tagName = fmt.Sprintf("tag-depth-%d", depth) - tagMessage = fmt.Sprintf("a commit %d deep", depth) - tagID = gittest.WriteTag(t, cfg, repoPath, tagName, tagID.Revision(), gittest.WriteTagConfig{Message: tagMessage}) - } - expectedTag := &gitalypb.Tag{ - Name: []byte(tagName), - Id: tagID.String(), - Message: []byte(tagMessage), - MessageSize: int64(len([]byte(tagMessage))), - Tagger: &gitalypb.CommitAuthor{ - Name: []byte(gittest.DefaultCommitterName), - Email: []byte(gittest.DefaultCommitterMail), - Date: timestamppb.New(gittest.DefaultCommitTime), - Timezone: []byte("+0100"), - }, - } - if info.Type == "commit" { - commit, err := catfile.GetCommit(ctx, objectReader, git.Revision(tc.originalOid)) - require.NoError(t, err) - expectedTag.TargetCommit = commit - } - rpcRequest := &gitalypb.FindTagRequest{Repository: repoProto, TagName: []byte(tagName)} - - resp, err := client.FindTag(ctx, rpcRequest) - require.NoError(t, err) - require.Equal(t, expectedTag, resp.GetTag()) - }) - } -} - -func TestInvalidFindTagRequest(t *testing.T) { - ctx := testhelper.Context(t) - _, repo, _, client := setupRefService(ctx, t) - - testCases := []struct { - desc string - request *gitalypb.FindTagRequest - }{ - { - desc: "empty request", - request: &gitalypb.FindTagRequest{}, - }, - { - desc: "invalid repo", - request: &gitalypb.FindTagRequest{ - Repository: &gitalypb.Repository{ - StorageName: "fake", - RelativePath: "repo", - }, - }, - }, - { - desc: "empty tag name", - request: &gitalypb.FindTagRequest{ - Repository: repo, - }, - }, - } - - for _, tc := range testCases { - t.Run(tc.desc, func(t *testing.T) { - _, err := client.FindTag(ctx, tc.request) - testhelper.RequireGrpcCode(t, err, codes.InvalidArgument) - }) - } -} diff --git a/proto/errors.proto b/proto/errors.proto index b4078aae1..4a600adc5 100644 --- a/proto/errors.proto +++ b/proto/errors.proto @@ -67,6 +67,12 @@ message ReferenceExistsError { string oid = 2; } +// ReferenceNotFoundError is an error retruned when a reference that ought to exist does not exist. +message ReferenceNotFoundError { + // ReferenceName is the name of the reference that does not exist. + bytes reference_name = 1; +} + // ReferenceUpdateError is an error returned when updating a reference has // failed. message ReferenceUpdateError { diff --git a/proto/go/gitalypb/errors.pb.go b/proto/go/gitalypb/errors.pb.go index 83d60620b..1b2c2d7f8 100644 --- a/proto/go/gitalypb/errors.pb.go +++ b/proto/go/gitalypb/errors.pb.go @@ -83,7 +83,7 @@ func (x CustomHookError_HookType) Number() protoreflect.EnumNumber { // Deprecated: Use CustomHookError_HookType.Descriptor instead. func (CustomHookError_HookType) EnumDescriptor() ([]byte, []int) { - return file_errors_proto_rawDescGZIP(), []int{10, 0} + return file_errors_proto_rawDescGZIP(), []int{11, 0} } // AccessCheckError is an error returned by GitLab's `/internal/allowed` @@ -474,6 +474,55 @@ func (x *ReferenceExistsError) GetOid() string { return "" } +// ReferenceNotFoundError is an error retruned when a reference that ought to exist does not exist. +type ReferenceNotFoundError struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ReferenceName is the name of the reference that does not exist. + ReferenceName []byte `protobuf:"bytes,1,opt,name=reference_name,json=referenceName,proto3" json:"reference_name,omitempty"` +} + +func (x *ReferenceNotFoundError) Reset() { + *x = ReferenceNotFoundError{} + if protoimpl.UnsafeEnabled { + mi := &file_errors_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReferenceNotFoundError) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReferenceNotFoundError) ProtoMessage() {} + +func (x *ReferenceNotFoundError) ProtoReflect() protoreflect.Message { + mi := &file_errors_proto_msgTypes[7] + 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 ReferenceNotFoundError.ProtoReflect.Descriptor instead. +func (*ReferenceNotFoundError) Descriptor() ([]byte, []int) { + return file_errors_proto_rawDescGZIP(), []int{7} +} + +func (x *ReferenceNotFoundError) GetReferenceName() []byte { + if x != nil { + return x.ReferenceName + } + return nil +} + // ReferenceUpdateError is an error returned when updating a reference has // failed. type ReferenceUpdateError struct { @@ -492,7 +541,7 @@ type ReferenceUpdateError struct { func (x *ReferenceUpdateError) Reset() { *x = ReferenceUpdateError{} if protoimpl.UnsafeEnabled { - mi := &file_errors_proto_msgTypes[7] + mi := &file_errors_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -505,7 +554,7 @@ func (x *ReferenceUpdateError) String() string { func (*ReferenceUpdateError) ProtoMessage() {} func (x *ReferenceUpdateError) ProtoReflect() protoreflect.Message { - mi := &file_errors_proto_msgTypes[7] + mi := &file_errors_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -518,7 +567,7 @@ func (x *ReferenceUpdateError) ProtoReflect() protoreflect.Message { // Deprecated: Use ReferenceUpdateError.ProtoReflect.Descriptor instead. func (*ReferenceUpdateError) Descriptor() ([]byte, []int) { - return file_errors_proto_rawDescGZIP(), []int{7} + return file_errors_proto_rawDescGZIP(), []int{8} } func (x *ReferenceUpdateError) GetReferenceName() []byte { @@ -556,7 +605,7 @@ type ResolveRevisionError struct { func (x *ResolveRevisionError) Reset() { *x = ResolveRevisionError{} if protoimpl.UnsafeEnabled { - mi := &file_errors_proto_msgTypes[8] + mi := &file_errors_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -569,7 +618,7 @@ func (x *ResolveRevisionError) String() string { func (*ResolveRevisionError) ProtoMessage() {} func (x *ResolveRevisionError) ProtoReflect() protoreflect.Message { - mi := &file_errors_proto_msgTypes[8] + mi := &file_errors_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -582,7 +631,7 @@ func (x *ResolveRevisionError) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolveRevisionError.ProtoReflect.Descriptor instead. func (*ResolveRevisionError) Descriptor() ([]byte, []int) { - return file_errors_proto_rawDescGZIP(), []int{8} + return file_errors_proto_rawDescGZIP(), []int{9} } func (x *ResolveRevisionError) GetRevision() []byte { @@ -608,7 +657,7 @@ type LimitError struct { func (x *LimitError) Reset() { *x = LimitError{} if protoimpl.UnsafeEnabled { - mi := &file_errors_proto_msgTypes[9] + mi := &file_errors_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -621,7 +670,7 @@ func (x *LimitError) String() string { func (*LimitError) ProtoMessage() {} func (x *LimitError) ProtoReflect() protoreflect.Message { - mi := &file_errors_proto_msgTypes[9] + mi := &file_errors_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -634,7 +683,7 @@ func (x *LimitError) ProtoReflect() protoreflect.Message { // Deprecated: Use LimitError.ProtoReflect.Descriptor instead. func (*LimitError) Descriptor() ([]byte, []int) { - return file_errors_proto_rawDescGZIP(), []int{9} + return file_errors_proto_rawDescGZIP(), []int{10} } func (x *LimitError) GetErrorMessage() string { @@ -669,7 +718,7 @@ type CustomHookError struct { func (x *CustomHookError) Reset() { *x = CustomHookError{} if protoimpl.UnsafeEnabled { - mi := &file_errors_proto_msgTypes[10] + mi := &file_errors_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -682,7 +731,7 @@ func (x *CustomHookError) String() string { func (*CustomHookError) ProtoMessage() {} func (x *CustomHookError) ProtoReflect() protoreflect.Message { - mi := &file_errors_proto_msgTypes[10] + mi := &file_errors_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -695,7 +744,7 @@ func (x *CustomHookError) ProtoReflect() protoreflect.Message { // Deprecated: Use CustomHookError.ProtoReflect.Descriptor instead. func (*CustomHookError) Descriptor() ([]byte, []int) { - return file_errors_proto_rawDescGZIP(), []int{10} + return file_errors_proto_rawDescGZIP(), []int{11} } func (x *CustomHookError) GetStdout() []byte { @@ -759,43 +808,47 @@ var file_errors_proto_rawDesc = []byte{ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, - 0x64, 0x22, 0x6f, 0x0a, 0x14, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x0d, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x17, 0x0a, 0x07, 0x6f, 0x6c, 0x64, 0x5f, 0x6f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x6f, 0x6c, 0x64, 0x4f, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x65, 0x77, - 0x5f, 0x6f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x65, 0x77, 0x4f, - 0x69, 0x64, 0x22, 0x32, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x6d, 0x0a, 0x0a, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, 0x0b, 0x72, 0x65, 0x74, - 0x72, 0x79, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x72, 0x65, 0x74, 0x72, 0x79, - 0x41, 0x66, 0x74, 0x65, 0x72, 0x22, 0xf2, 0x01, 0x0a, 0x0f, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x48, 0x6f, 0x6f, 0x6b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, - 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, - 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x12, 0x3d, 0x0a, 0x09, 0x68, 0x6f, 0x6f, - 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, - 0x68, 0x6f, 0x6f, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x22, 0x70, 0x0a, 0x08, 0x48, 0x6f, 0x6f, 0x6b, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x48, 0x4f, 0x4f, 0x4b, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x18, 0x0a, 0x14, 0x48, 0x4f, 0x4f, 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x52, 0x45, - 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x48, 0x4f, 0x4f, - 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, - 0x19, 0x0a, 0x15, 0x48, 0x4f, 0x4f, 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x4f, 0x53, - 0x54, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x10, 0x03, 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, 0x35, 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, + 0x64, 0x22, 0x3f, 0x0a, 0x16, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x6f, + 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x72, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x22, 0x6f, 0x0a, 0x14, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0d, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6f, 0x6c, 0x64, 0x5f, 0x6f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x6f, 0x6c, 0x64, 0x4f, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x65, + 0x77, 0x5f, 0x6f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x65, 0x77, + 0x4f, 0x69, 0x64, 0x22, 0x32, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x72, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x6d, 0x0a, 0x0a, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, 0x0b, 0x72, 0x65, + 0x74, 0x72, 0x79, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x72, 0x65, 0x74, 0x72, + 0x79, 0x41, 0x66, 0x74, 0x65, 0x72, 0x22, 0xf2, 0x01, 0x0a, 0x0f, 0x43, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, + 0x64, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, 0x74, 0x64, 0x6f, + 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x12, 0x3d, 0x0a, 0x09, 0x68, 0x6f, + 0x6f, 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, + 0x6b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x08, 0x68, 0x6f, 0x6f, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x22, 0x70, 0x0a, 0x08, 0x48, 0x6f, 0x6f, + 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x48, 0x4f, 0x4f, 0x4b, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x18, 0x0a, 0x14, 0x48, 0x4f, 0x4f, 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x52, + 0x45, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x48, 0x4f, + 0x4f, 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x02, + 0x12, 0x19, 0x0a, 0x15, 0x48, 0x4f, 0x4f, 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x4f, + 0x53, 0x54, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x10, 0x03, 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, 0x35, 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 ( @@ -811,7 +864,7 @@ func file_errors_proto_rawDescGZIP() []byte { } var file_errors_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_errors_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_errors_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_errors_proto_goTypes = []interface{}{ (CustomHookError_HookType)(0), // 0: gitaly.CustomHookError.HookType (*AccessCheckError)(nil), // 1: gitaly.AccessCheckError @@ -821,14 +874,15 @@ var file_errors_proto_goTypes = []interface{}{ (*MergeConflictError)(nil), // 5: gitaly.MergeConflictError (*ReferencesLockedError)(nil), // 6: gitaly.ReferencesLockedError (*ReferenceExistsError)(nil), // 7: gitaly.ReferenceExistsError - (*ReferenceUpdateError)(nil), // 8: gitaly.ReferenceUpdateError - (*ResolveRevisionError)(nil), // 9: gitaly.ResolveRevisionError - (*LimitError)(nil), // 10: gitaly.LimitError - (*CustomHookError)(nil), // 11: gitaly.CustomHookError - (*durationpb.Duration)(nil), // 12: google.protobuf.Duration + (*ReferenceNotFoundError)(nil), // 8: gitaly.ReferenceNotFoundError + (*ReferenceUpdateError)(nil), // 9: gitaly.ReferenceUpdateError + (*ResolveRevisionError)(nil), // 10: gitaly.ResolveRevisionError + (*LimitError)(nil), // 11: gitaly.LimitError + (*CustomHookError)(nil), // 12: gitaly.CustomHookError + (*durationpb.Duration)(nil), // 13: google.protobuf.Duration } var file_errors_proto_depIdxs = []int32{ - 12, // 0: gitaly.LimitError.retry_after:type_name -> google.protobuf.Duration + 13, // 0: gitaly.LimitError.retry_after:type_name -> google.protobuf.Duration 0, // 1: gitaly.CustomHookError.hook_type:type_name -> gitaly.CustomHookError.HookType 2, // [2:2] is the sub-list for method output_type 2, // [2:2] is the sub-list for method input_type @@ -928,7 +982,7 @@ func file_errors_proto_init() { } } file_errors_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReferenceUpdateError); i { + switch v := v.(*ReferenceNotFoundError); i { case 0: return &v.state case 1: @@ -940,7 +994,7 @@ func file_errors_proto_init() { } } file_errors_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResolveRevisionError); i { + switch v := v.(*ReferenceUpdateError); i { case 0: return &v.state case 1: @@ -952,7 +1006,7 @@ func file_errors_proto_init() { } } file_errors_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LimitError); i { + switch v := v.(*ResolveRevisionError); i { case 0: return &v.state case 1: @@ -964,6 +1018,18 @@ func file_errors_proto_init() { } } file_errors_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LimitError); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_errors_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CustomHookError); i { case 0: return &v.state @@ -982,7 +1048,7 @@ func file_errors_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_errors_proto_rawDesc, NumEnums: 1, - NumMessages: 11, + NumMessages: 12, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/go/gitalypb/ref.pb.go b/proto/go/gitalypb/ref.pb.go index e1af47561..e166c81d6 100644 --- a/proto/go/gitalypb/ref.pb.go +++ b/proto/go/gitalypb/ref.pb.go @@ -120,7 +120,7 @@ func (x FindAllTagsRequest_SortBy_Key) Number() protoreflect.EnumNumber { // Deprecated: Use FindAllTagsRequest_SortBy_Key.Descriptor instead. func (FindAllTagsRequest_SortBy_Key) EnumDescriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{14, 0, 0} + return file_ref_proto_rawDescGZIP(), []int{15, 0, 0} } // This comment is left unintentionally blank. @@ -177,7 +177,7 @@ func (x CreateBranchResponse_Status) Number() protoreflect.EnumNumber { // Deprecated: Use CreateBranchResponse_Status.Descriptor instead. func (CreateBranchResponse_Status) EnumDescriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{19, 0} + return file_ref_proto_rawDescGZIP(), []int{20, 0} } // This comment is left unintentionally blank. @@ -234,7 +234,7 @@ func (x ListRefsRequest_SortBy_Key) Number() protoreflect.EnumNumber { // Deprecated: Use ListRefsRequest_SortBy_Key.Descriptor instead. func (ListRefsRequest_SortBy_Key) EnumDescriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{39, 0, 0} + return file_ref_proto_rawDescGZIP(), []int{40, 0, 0} } // This comment is left unintentionally blank. @@ -937,15 +937,17 @@ func (x *FindAllBranchesResponse) GetBranches() []*FindAllBranchesResponse_Branc return nil } -// This comment is left unintentionally blank. +// FindTagRequest is a request for the FindTag RPC. type FindTagRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // This comment is left unintentionally blank. + // Repository is the repository to look up the tag in. Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"` - // This comment is left unintentionally blank. + // TagName is the name of the tag that should be looked up. The caller is supposed to pass in the + // tag name only, so if e.g. a tag `refs/tags/v1.0.0` exists, then the caller should pass `v1.0.0` + // as argument. TagName []byte `protobuf:"bytes,2,opt,name=tag_name,json=tagName,proto3" json:"tag_name,omitempty"` } @@ -995,13 +997,13 @@ func (x *FindTagRequest) GetTagName() []byte { return nil } -// This comment is left unintentionally blank. +// FindTagResponse is a response for the FindTag RPC. type FindTagResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // This comment is left unintentionally blank. + // Tag is the tag that was found. Tag *Tag `protobuf:"bytes,1,opt,name=tag,proto3" json:"tag,omitempty"` } @@ -1044,6 +1046,56 @@ func (x *FindTagResponse) GetTag() *Tag { return nil } +// FindTagError is an error that will be returned by the FindTag RPC under specific error +// conditions. +type FindTagError struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // TagNotFound indicates that the tag was not found. + TagNotFound *ReferenceNotFoundError `protobuf:"bytes,1,opt,name=tag_not_found,json=tagNotFound,proto3" json:"tag_not_found,omitempty"` +} + +func (x *FindTagError) Reset() { + *x = FindTagError{} + if protoimpl.UnsafeEnabled { + mi := &file_ref_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FindTagError) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FindTagError) ProtoMessage() {} + +func (x *FindTagError) ProtoReflect() protoreflect.Message { + mi := &file_ref_proto_msgTypes[14] + 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 FindTagError.ProtoReflect.Descriptor instead. +func (*FindTagError) Descriptor() ([]byte, []int) { + return file_ref_proto_rawDescGZIP(), []int{14} +} + +func (x *FindTagError) GetTagNotFound() *ReferenceNotFoundError { + if x != nil { + return x.TagNotFound + } + return nil +} + // This comment is left unintentionally blank. type FindAllTagsRequest struct { state protoimpl.MessageState @@ -1063,7 +1115,7 @@ type FindAllTagsRequest struct { func (x *FindAllTagsRequest) Reset() { *x = FindAllTagsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[14] + mi := &file_ref_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1076,7 +1128,7 @@ func (x *FindAllTagsRequest) String() string { func (*FindAllTagsRequest) ProtoMessage() {} func (x *FindAllTagsRequest) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[14] + mi := &file_ref_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1089,7 +1141,7 @@ func (x *FindAllTagsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FindAllTagsRequest.ProtoReflect.Descriptor instead. func (*FindAllTagsRequest) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{14} + return file_ref_proto_rawDescGZIP(), []int{15} } func (x *FindAllTagsRequest) GetRepository() *Repository { @@ -1126,7 +1178,7 @@ type FindAllTagsResponse struct { func (x *FindAllTagsResponse) Reset() { *x = FindAllTagsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[15] + mi := &file_ref_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1139,7 +1191,7 @@ func (x *FindAllTagsResponse) String() string { func (*FindAllTagsResponse) ProtoMessage() {} func (x *FindAllTagsResponse) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[15] + mi := &file_ref_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1152,7 +1204,7 @@ func (x *FindAllTagsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FindAllTagsResponse.ProtoReflect.Descriptor instead. func (*FindAllTagsResponse) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{15} + return file_ref_proto_rawDescGZIP(), []int{16} } func (x *FindAllTagsResponse) GetTags() []*Tag { @@ -1177,7 +1229,7 @@ type RefExistsRequest struct { func (x *RefExistsRequest) Reset() { *x = RefExistsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[16] + mi := &file_ref_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1190,7 +1242,7 @@ func (x *RefExistsRequest) String() string { func (*RefExistsRequest) ProtoMessage() {} func (x *RefExistsRequest) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[16] + mi := &file_ref_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1203,7 +1255,7 @@ func (x *RefExistsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RefExistsRequest.ProtoReflect.Descriptor instead. func (*RefExistsRequest) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{16} + return file_ref_proto_rawDescGZIP(), []int{17} } func (x *RefExistsRequest) GetRepository() *Repository { @@ -1233,7 +1285,7 @@ type RefExistsResponse struct { func (x *RefExistsResponse) Reset() { *x = RefExistsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[17] + mi := &file_ref_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1246,7 +1298,7 @@ func (x *RefExistsResponse) String() string { func (*RefExistsResponse) ProtoMessage() {} func (x *RefExistsResponse) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[17] + mi := &file_ref_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1259,7 +1311,7 @@ func (x *RefExistsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RefExistsResponse.ProtoReflect.Descriptor instead. func (*RefExistsResponse) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{17} + return file_ref_proto_rawDescGZIP(), []int{18} } func (x *RefExistsResponse) GetValue() bool { @@ -1286,7 +1338,7 @@ type CreateBranchRequest struct { func (x *CreateBranchRequest) Reset() { *x = CreateBranchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[18] + mi := &file_ref_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1299,7 +1351,7 @@ func (x *CreateBranchRequest) String() string { func (*CreateBranchRequest) ProtoMessage() {} func (x *CreateBranchRequest) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[18] + mi := &file_ref_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1312,7 +1364,7 @@ func (x *CreateBranchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateBranchRequest.ProtoReflect.Descriptor instead. func (*CreateBranchRequest) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{18} + return file_ref_proto_rawDescGZIP(), []int{19} } func (x *CreateBranchRequest) GetRepository() *Repository { @@ -1351,7 +1403,7 @@ type CreateBranchResponse struct { func (x *CreateBranchResponse) Reset() { *x = CreateBranchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[19] + mi := &file_ref_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1364,7 +1416,7 @@ func (x *CreateBranchResponse) String() string { func (*CreateBranchResponse) ProtoMessage() {} func (x *CreateBranchResponse) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[19] + mi := &file_ref_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1377,7 +1429,7 @@ func (x *CreateBranchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateBranchResponse.ProtoReflect.Descriptor instead. func (*CreateBranchResponse) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{19} + return file_ref_proto_rawDescGZIP(), []int{20} } func (x *CreateBranchResponse) GetStatus() CreateBranchResponse_Status { @@ -1409,7 +1461,7 @@ type DeleteBranchRequest struct { func (x *DeleteBranchRequest) Reset() { *x = DeleteBranchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[20] + mi := &file_ref_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1422,7 +1474,7 @@ func (x *DeleteBranchRequest) String() string { func (*DeleteBranchRequest) ProtoMessage() {} func (x *DeleteBranchRequest) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[20] + mi := &file_ref_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1435,7 +1487,7 @@ func (x *DeleteBranchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteBranchRequest.ProtoReflect.Descriptor instead. func (*DeleteBranchRequest) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{20} + return file_ref_proto_rawDescGZIP(), []int{21} } func (x *DeleteBranchRequest) GetRepository() *Repository { @@ -1462,7 +1514,7 @@ type DeleteBranchResponse struct { func (x *DeleteBranchResponse) Reset() { *x = DeleteBranchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[21] + mi := &file_ref_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1475,7 +1527,7 @@ func (x *DeleteBranchResponse) String() string { func (*DeleteBranchResponse) ProtoMessage() {} func (x *DeleteBranchResponse) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[21] + mi := &file_ref_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1488,7 +1540,7 @@ func (x *DeleteBranchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteBranchResponse.ProtoReflect.Descriptor instead. func (*DeleteBranchResponse) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{21} + return file_ref_proto_rawDescGZIP(), []int{22} } // This comment is left unintentionally blank. @@ -1507,7 +1559,7 @@ type FindBranchRequest struct { func (x *FindBranchRequest) Reset() { *x = FindBranchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[22] + mi := &file_ref_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1520,7 +1572,7 @@ func (x *FindBranchRequest) String() string { func (*FindBranchRequest) ProtoMessage() {} func (x *FindBranchRequest) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[22] + mi := &file_ref_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1533,7 +1585,7 @@ func (x *FindBranchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FindBranchRequest.ProtoReflect.Descriptor instead. func (*FindBranchRequest) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{22} + return file_ref_proto_rawDescGZIP(), []int{23} } func (x *FindBranchRequest) GetRepository() *Repository { @@ -1563,7 +1615,7 @@ type FindBranchResponse struct { func (x *FindBranchResponse) Reset() { *x = FindBranchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[23] + mi := &file_ref_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1576,7 +1628,7 @@ func (x *FindBranchResponse) String() string { func (*FindBranchResponse) ProtoMessage() {} func (x *FindBranchResponse) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[23] + mi := &file_ref_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1589,7 +1641,7 @@ func (x *FindBranchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FindBranchResponse.ProtoReflect.Descriptor instead. func (*FindBranchResponse) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{23} + return file_ref_proto_rawDescGZIP(), []int{24} } func (x *FindBranchResponse) GetBranch() *Branch { @@ -1616,7 +1668,7 @@ type DeleteRefsRequest struct { func (x *DeleteRefsRequest) Reset() { *x = DeleteRefsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[24] + mi := &file_ref_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1629,7 +1681,7 @@ func (x *DeleteRefsRequest) String() string { func (*DeleteRefsRequest) ProtoMessage() {} func (x *DeleteRefsRequest) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[24] + mi := &file_ref_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1642,7 +1694,7 @@ func (x *DeleteRefsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteRefsRequest.ProtoReflect.Descriptor instead. func (*DeleteRefsRequest) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{24} + return file_ref_proto_rawDescGZIP(), []int{25} } func (x *DeleteRefsRequest) GetRepository() *Repository { @@ -1679,7 +1731,7 @@ type DeleteRefsResponse struct { func (x *DeleteRefsResponse) Reset() { *x = DeleteRefsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[25] + mi := &file_ref_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1692,7 +1744,7 @@ func (x *DeleteRefsResponse) String() string { func (*DeleteRefsResponse) ProtoMessage() {} func (x *DeleteRefsResponse) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[25] + mi := &file_ref_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1705,7 +1757,7 @@ func (x *DeleteRefsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteRefsResponse.ProtoReflect.Descriptor instead. func (*DeleteRefsResponse) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{25} + return file_ref_proto_rawDescGZIP(), []int{26} } func (x *DeleteRefsResponse) GetGitError() string { @@ -1730,7 +1782,7 @@ type DeleteRefsError struct { func (x *DeleteRefsError) Reset() { *x = DeleteRefsError{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[26] + mi := &file_ref_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1743,7 +1795,7 @@ func (x *DeleteRefsError) String() string { func (*DeleteRefsError) ProtoMessage() {} func (x *DeleteRefsError) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[26] + mi := &file_ref_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1756,7 +1808,7 @@ func (x *DeleteRefsError) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteRefsError.ProtoReflect.Descriptor instead. func (*DeleteRefsError) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{26} + return file_ref_proto_rawDescGZIP(), []int{27} } func (m *DeleteRefsError) GetError() isDeleteRefsError_Error { @@ -1818,7 +1870,7 @@ type ListBranchNamesContainingCommitRequest struct { func (x *ListBranchNamesContainingCommitRequest) Reset() { *x = ListBranchNamesContainingCommitRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[27] + mi := &file_ref_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1831,7 +1883,7 @@ func (x *ListBranchNamesContainingCommitRequest) String() string { func (*ListBranchNamesContainingCommitRequest) ProtoMessage() {} func (x *ListBranchNamesContainingCommitRequest) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[27] + mi := &file_ref_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1844,7 +1896,7 @@ func (x *ListBranchNamesContainingCommitRequest) ProtoReflect() protoreflect.Mes // Deprecated: Use ListBranchNamesContainingCommitRequest.ProtoReflect.Descriptor instead. func (*ListBranchNamesContainingCommitRequest) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{27} + return file_ref_proto_rawDescGZIP(), []int{28} } func (x *ListBranchNamesContainingCommitRequest) GetRepository() *Repository { @@ -1881,7 +1933,7 @@ type ListBranchNamesContainingCommitResponse struct { func (x *ListBranchNamesContainingCommitResponse) Reset() { *x = ListBranchNamesContainingCommitResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[28] + mi := &file_ref_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1894,7 +1946,7 @@ func (x *ListBranchNamesContainingCommitResponse) String() string { func (*ListBranchNamesContainingCommitResponse) ProtoMessage() {} func (x *ListBranchNamesContainingCommitResponse) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[28] + mi := &file_ref_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1907,7 +1959,7 @@ func (x *ListBranchNamesContainingCommitResponse) ProtoReflect() protoreflect.Me // Deprecated: Use ListBranchNamesContainingCommitResponse.ProtoReflect.Descriptor instead. func (*ListBranchNamesContainingCommitResponse) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{28} + return file_ref_proto_rawDescGZIP(), []int{29} } func (x *ListBranchNamesContainingCommitResponse) GetBranchNames() [][]byte { @@ -1935,7 +1987,7 @@ type ListTagNamesContainingCommitRequest struct { func (x *ListTagNamesContainingCommitRequest) Reset() { *x = ListTagNamesContainingCommitRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[29] + mi := &file_ref_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1948,7 +2000,7 @@ func (x *ListTagNamesContainingCommitRequest) String() string { func (*ListTagNamesContainingCommitRequest) ProtoMessage() {} func (x *ListTagNamesContainingCommitRequest) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[29] + mi := &file_ref_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1961,7 +2013,7 @@ func (x *ListTagNamesContainingCommitRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use ListTagNamesContainingCommitRequest.ProtoReflect.Descriptor instead. func (*ListTagNamesContainingCommitRequest) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{29} + return file_ref_proto_rawDescGZIP(), []int{30} } func (x *ListTagNamesContainingCommitRequest) GetRepository() *Repository { @@ -1998,7 +2050,7 @@ type ListTagNamesContainingCommitResponse struct { func (x *ListTagNamesContainingCommitResponse) Reset() { *x = ListTagNamesContainingCommitResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[30] + mi := &file_ref_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2011,7 +2063,7 @@ func (x *ListTagNamesContainingCommitResponse) String() string { func (*ListTagNamesContainingCommitResponse) ProtoMessage() {} func (x *ListTagNamesContainingCommitResponse) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[30] + mi := &file_ref_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2024,7 +2076,7 @@ func (x *ListTagNamesContainingCommitResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use ListTagNamesContainingCommitResponse.ProtoReflect.Descriptor instead. func (*ListTagNamesContainingCommitResponse) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{30} + return file_ref_proto_rawDescGZIP(), []int{31} } func (x *ListTagNamesContainingCommitResponse) GetTagNames() [][]byte { @@ -2051,7 +2103,7 @@ type GetTagSignaturesRequest struct { func (x *GetTagSignaturesRequest) Reset() { *x = GetTagSignaturesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[31] + mi := &file_ref_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2064,7 +2116,7 @@ func (x *GetTagSignaturesRequest) String() string { func (*GetTagSignaturesRequest) ProtoMessage() {} func (x *GetTagSignaturesRequest) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[31] + mi := &file_ref_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2077,7 +2129,7 @@ func (x *GetTagSignaturesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTagSignaturesRequest.ProtoReflect.Descriptor instead. func (*GetTagSignaturesRequest) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{31} + return file_ref_proto_rawDescGZIP(), []int{32} } func (x *GetTagSignaturesRequest) GetRepository() *Repository { @@ -2109,7 +2161,7 @@ type GetTagSignaturesResponse struct { func (x *GetTagSignaturesResponse) Reset() { *x = GetTagSignaturesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[32] + mi := &file_ref_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2122,7 +2174,7 @@ func (x *GetTagSignaturesResponse) String() string { func (*GetTagSignaturesResponse) ProtoMessage() {} func (x *GetTagSignaturesResponse) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[32] + mi := &file_ref_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2135,7 +2187,7 @@ func (x *GetTagSignaturesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTagSignaturesResponse.ProtoReflect.Descriptor instead. func (*GetTagSignaturesResponse) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{32} + return file_ref_proto_rawDescGZIP(), []int{33} } func (x *GetTagSignaturesResponse) GetSignatures() []*GetTagSignaturesResponse_TagSignature { @@ -2160,7 +2212,7 @@ type GetTagMessagesRequest struct { func (x *GetTagMessagesRequest) Reset() { *x = GetTagMessagesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[33] + mi := &file_ref_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2173,7 +2225,7 @@ func (x *GetTagMessagesRequest) String() string { func (*GetTagMessagesRequest) ProtoMessage() {} func (x *GetTagMessagesRequest) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[33] + mi := &file_ref_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2186,7 +2238,7 @@ func (x *GetTagMessagesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTagMessagesRequest.ProtoReflect.Descriptor instead. func (*GetTagMessagesRequest) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{33} + return file_ref_proto_rawDescGZIP(), []int{34} } func (x *GetTagMessagesRequest) GetRepository() *Repository { @@ -2218,7 +2270,7 @@ type GetTagMessagesResponse struct { func (x *GetTagMessagesResponse) Reset() { *x = GetTagMessagesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[34] + mi := &file_ref_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2231,7 +2283,7 @@ func (x *GetTagMessagesResponse) String() string { func (*GetTagMessagesResponse) ProtoMessage() {} func (x *GetTagMessagesResponse) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[34] + mi := &file_ref_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2244,7 +2296,7 @@ func (x *GetTagMessagesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTagMessagesResponse.ProtoReflect.Descriptor instead. func (*GetTagMessagesResponse) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{34} + return file_ref_proto_rawDescGZIP(), []int{35} } func (x *GetTagMessagesResponse) GetMessage() []byte { @@ -2276,7 +2328,7 @@ type FindAllRemoteBranchesRequest struct { func (x *FindAllRemoteBranchesRequest) Reset() { *x = FindAllRemoteBranchesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[35] + mi := &file_ref_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2289,7 +2341,7 @@ func (x *FindAllRemoteBranchesRequest) String() string { func (*FindAllRemoteBranchesRequest) ProtoMessage() {} func (x *FindAllRemoteBranchesRequest) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[35] + mi := &file_ref_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2302,7 +2354,7 @@ func (x *FindAllRemoteBranchesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FindAllRemoteBranchesRequest.ProtoReflect.Descriptor instead. func (*FindAllRemoteBranchesRequest) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{35} + return file_ref_proto_rawDescGZIP(), []int{36} } func (x *FindAllRemoteBranchesRequest) GetRepository() *Repository { @@ -2332,7 +2384,7 @@ type FindAllRemoteBranchesResponse struct { func (x *FindAllRemoteBranchesResponse) Reset() { *x = FindAllRemoteBranchesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[36] + mi := &file_ref_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2345,7 +2397,7 @@ func (x *FindAllRemoteBranchesResponse) String() string { func (*FindAllRemoteBranchesResponse) ProtoMessage() {} func (x *FindAllRemoteBranchesResponse) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[36] + mi := &file_ref_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2358,7 +2410,7 @@ func (x *FindAllRemoteBranchesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FindAllRemoteBranchesResponse.ProtoReflect.Descriptor instead. func (*FindAllRemoteBranchesResponse) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{36} + return file_ref_proto_rawDescGZIP(), []int{37} } func (x *FindAllRemoteBranchesResponse) GetBranches() []*Branch { @@ -2381,7 +2433,7 @@ type PackRefsRequest struct { func (x *PackRefsRequest) Reset() { *x = PackRefsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[37] + mi := &file_ref_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2394,7 +2446,7 @@ func (x *PackRefsRequest) String() string { func (*PackRefsRequest) ProtoMessage() {} func (x *PackRefsRequest) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[37] + mi := &file_ref_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2407,7 +2459,7 @@ func (x *PackRefsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PackRefsRequest.ProtoReflect.Descriptor instead. func (*PackRefsRequest) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{37} + return file_ref_proto_rawDescGZIP(), []int{38} } func (x *PackRefsRequest) GetRepository() *Repository { @@ -2427,7 +2479,7 @@ type PackRefsResponse struct { func (x *PackRefsResponse) Reset() { *x = PackRefsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[38] + mi := &file_ref_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2440,7 +2492,7 @@ func (x *PackRefsResponse) String() string { func (*PackRefsResponse) ProtoMessage() {} func (x *PackRefsResponse) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[38] + mi := &file_ref_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2453,7 +2505,7 @@ func (x *PackRefsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PackRefsResponse.ProtoReflect.Descriptor instead. func (*PackRefsResponse) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{38} + return file_ref_proto_rawDescGZIP(), []int{39} } // ListRefsRequest is a request for the ListRefs RPC. @@ -2478,7 +2530,7 @@ type ListRefsRequest struct { func (x *ListRefsRequest) Reset() { *x = ListRefsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[39] + mi := &file_ref_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2491,7 +2543,7 @@ func (x *ListRefsRequest) String() string { func (*ListRefsRequest) ProtoMessage() {} func (x *ListRefsRequest) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[39] + mi := &file_ref_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2504,7 +2556,7 @@ func (x *ListRefsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRefsRequest.ProtoReflect.Descriptor instead. func (*ListRefsRequest) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{39} + return file_ref_proto_rawDescGZIP(), []int{40} } func (x *ListRefsRequest) GetRepository() *Repository { @@ -2549,7 +2601,7 @@ type ListRefsResponse struct { func (x *ListRefsResponse) Reset() { *x = ListRefsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[40] + mi := &file_ref_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2562,7 +2614,7 @@ func (x *ListRefsResponse) String() string { func (*ListRefsResponse) ProtoMessage() {} func (x *ListRefsResponse) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[40] + mi := &file_ref_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2575,7 +2627,7 @@ func (x *ListRefsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRefsResponse.ProtoReflect.Descriptor instead. func (*ListRefsResponse) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{40} + return file_ref_proto_rawDescGZIP(), []int{41} } func (x *ListRefsResponse) GetReferences() []*ListRefsResponse_Reference { @@ -2609,7 +2661,7 @@ type FindRefsByOIDRequest struct { func (x *FindRefsByOIDRequest) Reset() { *x = FindRefsByOIDRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[41] + mi := &file_ref_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2622,7 +2674,7 @@ func (x *FindRefsByOIDRequest) String() string { func (*FindRefsByOIDRequest) ProtoMessage() {} func (x *FindRefsByOIDRequest) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[41] + mi := &file_ref_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2635,7 +2687,7 @@ func (x *FindRefsByOIDRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FindRefsByOIDRequest.ProtoReflect.Descriptor instead. func (*FindRefsByOIDRequest) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{41} + return file_ref_proto_rawDescGZIP(), []int{42} } func (x *FindRefsByOIDRequest) GetRepository() *Repository { @@ -2686,7 +2738,7 @@ type FindRefsByOIDResponse struct { func (x *FindRefsByOIDResponse) Reset() { *x = FindRefsByOIDResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[42] + mi := &file_ref_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2699,7 +2751,7 @@ func (x *FindRefsByOIDResponse) String() string { func (*FindRefsByOIDResponse) ProtoMessage() {} func (x *FindRefsByOIDResponse) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[42] + mi := &file_ref_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2712,7 +2764,7 @@ func (x *FindRefsByOIDResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FindRefsByOIDResponse.ProtoReflect.Descriptor instead. func (*FindRefsByOIDResponse) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{42} + return file_ref_proto_rawDescGZIP(), []int{43} } func (x *FindRefsByOIDResponse) GetRefs() []string { @@ -2737,7 +2789,7 @@ type FindAllBranchesResponse_Branch struct { func (x *FindAllBranchesResponse_Branch) Reset() { *x = FindAllBranchesResponse_Branch{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[43] + mi := &file_ref_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2750,7 +2802,7 @@ func (x *FindAllBranchesResponse_Branch) String() string { func (*FindAllBranchesResponse_Branch) ProtoMessage() {} func (x *FindAllBranchesResponse_Branch) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[43] + mi := &file_ref_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2795,7 +2847,7 @@ type FindAllTagsRequest_SortBy struct { func (x *FindAllTagsRequest_SortBy) Reset() { *x = FindAllTagsRequest_SortBy{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[44] + mi := &file_ref_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2808,7 +2860,7 @@ func (x *FindAllTagsRequest_SortBy) String() string { func (*FindAllTagsRequest_SortBy) ProtoMessage() {} func (x *FindAllTagsRequest_SortBy) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[44] + mi := &file_ref_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2821,7 +2873,7 @@ func (x *FindAllTagsRequest_SortBy) ProtoReflect() protoreflect.Message { // Deprecated: Use FindAllTagsRequest_SortBy.ProtoReflect.Descriptor instead. func (*FindAllTagsRequest_SortBy) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{14, 0} + return file_ref_proto_rawDescGZIP(), []int{15, 0} } func (x *FindAllTagsRequest_SortBy) GetKey() FindAllTagsRequest_SortBy_Key { @@ -2858,7 +2910,7 @@ type GetTagSignaturesResponse_TagSignature struct { func (x *GetTagSignaturesResponse_TagSignature) Reset() { *x = GetTagSignaturesResponse_TagSignature{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[45] + mi := &file_ref_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2871,7 +2923,7 @@ func (x *GetTagSignaturesResponse_TagSignature) String() string { func (*GetTagSignaturesResponse_TagSignature) ProtoMessage() {} func (x *GetTagSignaturesResponse_TagSignature) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[45] + mi := &file_ref_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2884,7 +2936,7 @@ func (x *GetTagSignaturesResponse_TagSignature) ProtoReflect() protoreflect.Mess // Deprecated: Use GetTagSignaturesResponse_TagSignature.ProtoReflect.Descriptor instead. func (*GetTagSignaturesResponse_TagSignature) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{32, 0} + return file_ref_proto_rawDescGZIP(), []int{33, 0} } func (x *GetTagSignaturesResponse_TagSignature) GetTagId() string { @@ -2923,7 +2975,7 @@ type ListRefsRequest_SortBy struct { func (x *ListRefsRequest_SortBy) Reset() { *x = ListRefsRequest_SortBy{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[46] + mi := &file_ref_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2936,7 +2988,7 @@ func (x *ListRefsRequest_SortBy) String() string { func (*ListRefsRequest_SortBy) ProtoMessage() {} func (x *ListRefsRequest_SortBy) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[46] + mi := &file_ref_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2949,7 +3001,7 @@ func (x *ListRefsRequest_SortBy) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRefsRequest_SortBy.ProtoReflect.Descriptor instead. func (*ListRefsRequest_SortBy) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{39, 0} + return file_ref_proto_rawDescGZIP(), []int{40, 0} } func (x *ListRefsRequest_SortBy) GetKey() ListRefsRequest_SortBy_Key { @@ -2981,7 +3033,7 @@ type ListRefsResponse_Reference struct { func (x *ListRefsResponse_Reference) Reset() { *x = ListRefsResponse_Reference{} if protoimpl.UnsafeEnabled { - mi := &file_ref_proto_msgTypes[47] + mi := &file_ref_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2994,7 +3046,7 @@ func (x *ListRefsResponse_Reference) String() string { func (*ListRefsResponse_Reference) ProtoMessage() {} func (x *ListRefsResponse_Reference) ProtoReflect() protoreflect.Message { - mi := &file_ref_proto_msgTypes[47] + mi := &file_ref_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3007,7 +3059,7 @@ func (x *ListRefsResponse_Reference) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRefsResponse_Reference.ProtoReflect.Descriptor instead. func (*ListRefsResponse_Reference) Descriptor() ([]byte, []int) { - return file_ref_proto_rawDescGZIP(), []int{40, 0} + return file_ref_proto_rawDescGZIP(), []int{41, 0} } func (x *ListRefsResponse_Reference) GetName() []byte { @@ -3141,344 +3193,349 @@ var file_ref_proto_rawDesc = []byte{ 0x0f, 0x46, 0x69, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, - 0xf2, 0x02, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x67, 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, 0x3a, 0x0a, 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, - 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6f, - 0x72, 0x74, 0x42, 0x79, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 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, 0x1a, 0x9b, 0x01, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x42, - 0x79, 0x12, 0x37, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, - 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x54, - 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x42, - 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x09, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0x23, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x46, 0x4e, 0x41, 0x4d, - 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x52, 0x45, 0x41, 0x54, 0x4f, 0x52, 0x44, 0x41, - 0x54, 0x45, 0x10, 0x01, 0x22, 0x36, 0x0a, 0x13, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x54, - 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x04, 0x74, - 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x22, 0x5e, 0x0a, 0x10, - 0x52, 0x65, 0x66, 0x45, 0x78, 0x69, 0x73, 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, 0x10, 0x0a, 0x03, 0x72, 0x65, - 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x72, 0x65, 0x66, 0x22, 0x29, 0x0a, 0x11, - 0x52, 0x65, 0x66, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 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, 0x84, 0x01, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 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, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, - 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0xcb, - 0x01, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x26, 0x0a, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x42, 0x72, - 0x61, 0x6e, 0x63, 0x68, 0x52, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x22, 0x4e, 0x0a, 0x06, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0e, - 0x0a, 0x0a, 0x45, 0x52, 0x52, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x53, 0x10, 0x01, 0x12, 0x0f, - 0x0a, 0x0b, 0x45, 0x52, 0x52, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x02, 0x12, - 0x1b, 0x0a, 0x17, 0x45, 0x52, 0x52, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x53, - 0x54, 0x41, 0x52, 0x54, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x10, 0x03, 0x22, 0x63, 0x0a, 0x13, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, + 0x52, 0x0a, 0x0c, 0x46, 0x69, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, + 0x42, 0x0a, 0x0d, 0x74, 0x61, 0x67, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x66, 0x6f, 0x75, 0x6e, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, + 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x74, 0x61, 0x67, 0x4e, 0x6f, 0x74, 0x46, 0x6f, + 0x75, 0x6e, 0x64, 0x22, 0xf2, 0x02, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x54, + 0x61, 0x67, 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, 0x3a, 0x0a, 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, + 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, + 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, 0x1a, 0x9b, 0x01, 0x0a, 0x06, 0x53, + 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, 0x37, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, + 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, + 0x6f, 0x72, 0x74, 0x42, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, + 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x15, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x44, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0x23, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, + 0x46, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x52, 0x45, 0x41, 0x54, + 0x4f, 0x52, 0x44, 0x41, 0x54, 0x45, 0x10, 0x01, 0x22, 0x36, 0x0a, 0x13, 0x46, 0x69, 0x6e, 0x64, + 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x1f, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, + 0x22, 0x5e, 0x0a, 0x10, 0x52, 0x65, 0x66, 0x45, 0x78, 0x69, 0x73, 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, 0x10, + 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x72, 0x65, 0x66, + 0x22, 0x29, 0x0a, 0x11, 0x52, 0x65, 0x66, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 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, 0x84, 0x01, 0x0a, 0x13, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 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, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, - 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, 0x0a, 0x11, 0x46, 0x69, 0x6e, - 0x64, 0x42, 0x72, 0x61, 0x6e, 0x63, 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, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3c, 0x0a, 0x12, - 0x46, 0x69, 0x6e, 0x64, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x42, 0x72, 0x61, 0x6e, - 0x63, 0x68, 0x52, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x22, 0x8f, 0x01, 0x0a, 0x11, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x66, 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, 0x2c, 0x0a, 0x12, 0x65, 0x78, - 0x63, 0x65, 0x70, 0x74, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x57, 0x69, - 0x74, 0x68, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x66, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x04, 0x72, 0x65, 0x66, 0x73, 0x22, 0x31, 0x0a, 0x12, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x69, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x69, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, - 0xb0, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x66, 0x73, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x12, 0x46, 0x0a, 0x0e, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x52, 0x65, 0x66, 0x46, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x69, 0x6e, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x4c, 0x0a, 0x11, 0x72, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, - 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x65, 0x64, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x10, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x95, 0x01, 0x0a, 0x26, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, - 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, + 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x22, 0xcb, 0x01, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x72, 0x61, + 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, + 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x26, 0x0a, 0x06, 0x62, 0x72, 0x61, 0x6e, + 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2e, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, + 0x22, 0x4e, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, + 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x52, 0x52, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x53, + 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x52, 0x52, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, + 0x44, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x45, 0x52, 0x52, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, + 0x49, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x10, 0x03, + 0x22, 0x63, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 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, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, + 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, 0x0a, + 0x11, 0x46, 0x69, 0x6e, 0x64, 0x42, 0x72, 0x61, 0x6e, 0x63, 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, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x22, 0x3c, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x22, 0x8f, + 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x66, 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, 0x2c, + 0x0a, 0x12, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x70, 0x72, + 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x65, 0x78, 0x63, 0x65, + 0x70, 0x74, 0x57, 0x69, 0x74, 0x68, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x12, 0x0a, 0x04, + 0x72, 0x65, 0x66, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x04, 0x72, 0x65, 0x66, 0x73, + 0x22, 0x31, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x69, 0x74, 0x5f, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x69, 0x74, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x22, 0xb0, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, + 0x66, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x46, 0x0a, 0x0e, 0x69, 0x6e, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x52, 0x65, 0x66, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, + 0x52, 0x0d, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, + 0x4c, 0x0a, 0x11, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x5f, 0x6c, 0x6f, + 0x63, 0x6b, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x4c, 0x6f, + 0x63, 0x6b, 0x65, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x10, 0x72, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x07, 0x0a, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x95, 0x01, 0x0a, 0x26, 0x4c, 0x69, 0x73, 0x74, 0x42, + 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x69, 0x6e, 0x67, 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, 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, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x52, + 0x0a, 0x27, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x72, 0x61, + 0x6e, 0x63, 0x68, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, + 0x0b, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x01, + 0x10, 0x02, 0x22, 0x92, 0x01, 0x0a, 0x23, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x4e, 0x61, + 0x6d, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 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, 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, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x49, 0x0a, 0x24, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, + 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0c, 0x52, 0x08, 0x74, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x01, + 0x10, 0x02, 0x22, 0x78, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 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, 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, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x52, 0x0a, 0x27, 0x4c, 0x69, - 0x73, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x43, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0b, 0x62, 0x72, 0x61, - 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x92, - 0x01, 0x0a, 0x23, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x43, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 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, 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, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x22, 0x49, 0x0a, 0x24, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, - 0x61, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, - 0x74, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x78, - 0x0a, 0x17, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 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, 0x23, 0x0a, 0x0d, 0x74, 0x61, 0x67, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x61, 0x67, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xc8, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, - 0x54, 0x61, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x67, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x1a, 0x5d, 0x0a, 0x0c, 0x54, 0x61, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x74, 0x61, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x67, 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, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x22, 0x7b, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, + 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x61, 0x67, 0x5f, 0x72, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, + 0x74, 0x61, 0x67, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xc8, 0x01, 0x0a, + 0x18, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0a, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x53, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x54, 0x61, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x1a, 0x5d, 0x0a, 0x0c, 0x54, 0x61, 0x67, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x74, 0x61, 0x67, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x67, 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, 0x18, 0x0a, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x7b, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x61, + 0x67, 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, 0x17, 0x0a, 0x07, 0x74, 0x61, + 0x67, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x67, + 0x49, 0x64, 0x73, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x09, 0x74, 0x61, 0x67, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x22, 0x59, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 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, 0x12, 0x15, 0x0a, 0x06, 0x74, 0x61, 0x67, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x67, 0x49, 0x64, 0x4a, + 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x08, 0x74, 0x61, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x22, + 0x79, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 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, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x4b, 0x0a, 0x1d, 0x46, 0x69, + 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, + 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x08, 0x62, + 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x08, 0x62, + 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x22, 0x5b, 0x0a, 0x0f, 0x50, 0x61, 0x63, 0x6b, 0x52, + 0x65, 0x66, 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, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x08, 0x61, 0x6c, 0x6c, 0x5f, + 0x72, 0x65, 0x66, 0x73, 0x22, 0x12, 0x0a, 0x10, 0x50, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x66, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xf2, 0x02, 0x0a, 0x0f, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x66, 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, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x67, 0x5f, 0x69, 0x64, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x67, 0x49, 0x64, 0x73, 0x4a, - 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x09, 0x74, 0x61, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x22, 0x59, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 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, 0x12, 0x15, 0x0a, 0x06, 0x74, 0x61, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x67, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, - 0x02, 0x52, 0x08, 0x74, 0x61, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x79, 0x0a, 0x1c, 0x46, - 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, - 0x63, 0x68, 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, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x6d, 0x6f, - 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x4b, 0x0a, 0x1d, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, - 0x6c, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x08, 0x62, 0x72, 0x61, 0x6e, 0x63, - 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x08, 0x62, 0x72, 0x61, 0x6e, 0x63, - 0x68, 0x65, 0x73, 0x22, 0x5b, 0x0a, 0x0f, 0x50, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x66, 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, - 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x08, 0x61, 0x6c, 0x6c, 0x5f, 0x72, 0x65, 0x66, 0x73, - 0x22, 0x12, 0x0a, 0x10, 0x50, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xf2, 0x02, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x66, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x65, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x04, 0x68, 0x65, 0x61, 0x64, 0x12, 0x37, 0x0a, 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, + 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x1a, + 0xbb, 0x01, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, 0x34, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x33, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x6f, 0x72, + 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x46, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x0b, 0x0a, 0x07, + 0x52, 0x45, 0x46, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x52, 0x45, + 0x41, 0x54, 0x4f, 0x52, 0x44, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x55, + 0x54, 0x48, 0x4f, 0x52, 0x44, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x4f, + 0x4d, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x52, 0x44, 0x41, 0x54, 0x45, 0x10, 0x03, 0x22, 0x8f, 0x01, + 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, + 0xba, 0x01, 0x0a, 0x14, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x66, 0x73, 0x42, 0x79, 0x4f, 0x49, + 0x44, 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, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x68, 0x65, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x68, 0x65, - 0x61, 0x64, 0x12, 0x37, 0x0a, 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6f, 0x72, - 0x74, 0x42, 0x79, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x1a, 0xbb, 0x01, 0x0a, 0x06, - 0x53, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, 0x34, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6f, 0x72, - 0x74, 0x42, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x09, - 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x15, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x46, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x46, 0x4e, - 0x41, 0x4d, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x52, 0x45, 0x41, 0x54, 0x4f, 0x52, - 0x44, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, - 0x44, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, - 0x54, 0x45, 0x52, 0x44, 0x41, 0x54, 0x45, 0x10, 0x03, 0x22, 0x8f, 0x01, 0x0a, 0x10, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, - 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0xba, 0x01, 0x0a, 0x14, - 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x66, 0x73, 0x42, 0x79, 0x4f, 0x49, 0x44, 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, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, - 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x66, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x66, 0x50, 0x61, 0x74, 0x74, 0x65, - 0x72, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x2b, 0x0a, 0x15, 0x46, 0x69, 0x6e, 0x64, - 0x52, 0x65, 0x66, 0x73, 0x42, 0x79, 0x4f, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x66, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x04, 0x72, 0x65, 0x66, 0x73, 0x32, 0xa5, 0x0d, 0x0a, 0x0a, 0x52, 0x65, 0x66, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x15, 0x46, 0x69, 0x6e, 0x64, 0x44, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x2e, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, - 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, - 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, - 0x08, 0x02, 0x12, 0x65, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x42, 0x72, 0x61, - 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, - 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x42, 0x72, 0x61, 0x6e, - 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x5c, 0x0a, 0x0f, 0x46, 0x69, 0x6e, - 0x64, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x67, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6f, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x66, 0x5f, 0x70, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x66, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x6f, 0x72, + 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x2b, 0x0a, 0x15, + 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x66, 0x73, 0x42, 0x79, 0x4f, 0x49, 0x44, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x66, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x66, 0x73, 0x32, 0xa5, 0x0d, 0x0a, 0x0a, 0x52, 0x65, + 0x66, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x15, 0x46, 0x69, 0x6e, 0x64, + 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x72, 0x61, 0x6e, + 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, + 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x65, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, + 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x42, 0x72, 0x61, + 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, + 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x5c, 0x0a, + 0x0f, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x12, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, + 0x6c, 0x54, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, + 0x6c, 0x54, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x62, 0x0a, 0x11, 0x46, + 0x69, 0x6e, 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, + 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, + 0x5c, 0x0a, 0x0f, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, + 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, + 0x41, 0x6c, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, + 0x41, 0x6c, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 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, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x67, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, - 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x62, 0x0a, 0x11, 0x46, 0x69, 0x6e, 0x64, 0x4c, - 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, - 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, - 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x6f, 0x63, 0x61, - 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x5c, 0x0a, 0x0f, 0x46, - 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x12, 0x1e, - 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x42, - 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, - 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x42, - 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 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, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, - 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, - 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x42, 0x0a, 0x07, 0x46, - 0x69, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, - 0x46, 0x69, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, - 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, - 0x6e, 0x0a, 0x15, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, - 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x42, - 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, - 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x52, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, - 0x48, 0x0a, 0x09, 0x52, 0x65, 0x66, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x18, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x66, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, - 0x52, 0x65, 0x66, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x4b, 0x0a, 0x0a, 0x46, 0x69, 0x6e, - 0x64, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, - 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, - 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x4b, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x65, 0x66, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, - 0x02, 0x08, 0x01, 0x12, 0x8c, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x72, 0x61, 0x6e, - 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, - 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x2e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, - 0x30, 0x01, 0x12, 0x83, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x12, 0x2b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, - 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, - 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x5f, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x54, - 0x61, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 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, 0x59, 0x0a, 0x0e, 0x47, 0x65, 0x74, - 0x54, 0x61, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 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, 0x12, 0x48, 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x66, 0x73, - 0x12, 0x17, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x52, 0x65, - 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x09, 0x88, 0x02, 0x01, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x03, 0x12, 0x47, - 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x66, 0x73, 0x12, 0x17, 0x2e, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, - 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x54, 0x0a, 0x0d, 0x46, 0x69, 0x6e, 0x64, 0x52, - 0x65, 0x66, 0x73, 0x42, 0x79, 0x4f, 0x49, 0x44, 0x12, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, - 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x66, 0x73, 0x42, 0x79, 0x4f, 0x49, 0x44, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, - 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x66, 0x73, 0x42, 0x79, 0x4f, 0x49, 0x44, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 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, - 0x35, 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, + 0x42, 0x0a, 0x07, 0x46, 0x69, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, + 0x54, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, + 0x02, 0x08, 0x02, 0x12, 0x6e, 0x0a, 0x15, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x52, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, + 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, + 0x02, 0x30, 0x01, 0x12, 0x48, 0x0a, 0x09, 0x52, 0x65, 0x66, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, + 0x12, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x66, 0x45, 0x78, 0x69, + 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x66, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x4b, 0x0a, + 0x0a, 0x46, 0x69, 0x6e, 0x64, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x19, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x46, 0x69, 0x6e, 0x64, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x4b, 0x0a, 0x0a, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x66, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x8c, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, + 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x2e, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, + 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x83, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, + 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x2b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x43, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x5f, 0x0a, 0x10, + 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, + 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, + 0x67, 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, 0x59, 0x0a, + 0x0e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, + 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 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, 0x12, 0x48, 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, + 0x52, 0x65, 0x66, 0x73, 0x12, 0x17, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x61, + 0x63, 0x6b, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x66, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x09, 0x88, 0x02, 0x01, 0xfa, 0x97, 0x28, 0x02, + 0x08, 0x03, 0x12, 0x47, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x66, 0x73, 0x12, 0x17, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x66, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x54, 0x0a, 0x0d, 0x46, + 0x69, 0x6e, 0x64, 0x52, 0x65, 0x66, 0x73, 0x42, 0x79, 0x4f, 0x49, 0x44, 0x12, 0x1c, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x66, 0x73, 0x42, 0x79, + 0x4f, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x66, 0x73, 0x42, 0x79, 0x4f, 0x49, + 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, + 0x02, 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, 0x35, 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 ( @@ -3494,7 +3551,7 @@ func file_ref_proto_rawDescGZIP() []byte { } var file_ref_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_ref_proto_msgTypes = make([]protoimpl.MessageInfo, 48) +var file_ref_proto_msgTypes = make([]protoimpl.MessageInfo, 49) var file_ref_proto_goTypes = []interface{}{ (FindLocalBranchesRequest_SortBy)(0), // 0: gitaly.FindLocalBranchesRequest.SortBy (FindAllTagsRequest_SortBy_Key)(0), // 1: gitaly.FindAllTagsRequest.SortBy.Key @@ -3514,138 +3571,141 @@ var file_ref_proto_goTypes = []interface{}{ (*FindAllBranchesResponse)(nil), // 15: gitaly.FindAllBranchesResponse (*FindTagRequest)(nil), // 16: gitaly.FindTagRequest (*FindTagResponse)(nil), // 17: gitaly.FindTagResponse - (*FindAllTagsRequest)(nil), // 18: gitaly.FindAllTagsRequest - (*FindAllTagsResponse)(nil), // 19: gitaly.FindAllTagsResponse - (*RefExistsRequest)(nil), // 20: gitaly.RefExistsRequest - (*RefExistsResponse)(nil), // 21: gitaly.RefExistsResponse - (*CreateBranchRequest)(nil), // 22: gitaly.CreateBranchRequest - (*CreateBranchResponse)(nil), // 23: gitaly.CreateBranchResponse - (*DeleteBranchRequest)(nil), // 24: gitaly.DeleteBranchRequest - (*DeleteBranchResponse)(nil), // 25: gitaly.DeleteBranchResponse - (*FindBranchRequest)(nil), // 26: gitaly.FindBranchRequest - (*FindBranchResponse)(nil), // 27: gitaly.FindBranchResponse - (*DeleteRefsRequest)(nil), // 28: gitaly.DeleteRefsRequest - (*DeleteRefsResponse)(nil), // 29: gitaly.DeleteRefsResponse - (*DeleteRefsError)(nil), // 30: gitaly.DeleteRefsError - (*ListBranchNamesContainingCommitRequest)(nil), // 31: gitaly.ListBranchNamesContainingCommitRequest - (*ListBranchNamesContainingCommitResponse)(nil), // 32: gitaly.ListBranchNamesContainingCommitResponse - (*ListTagNamesContainingCommitRequest)(nil), // 33: gitaly.ListTagNamesContainingCommitRequest - (*ListTagNamesContainingCommitResponse)(nil), // 34: gitaly.ListTagNamesContainingCommitResponse - (*GetTagSignaturesRequest)(nil), // 35: gitaly.GetTagSignaturesRequest - (*GetTagSignaturesResponse)(nil), // 36: gitaly.GetTagSignaturesResponse - (*GetTagMessagesRequest)(nil), // 37: gitaly.GetTagMessagesRequest - (*GetTagMessagesResponse)(nil), // 38: gitaly.GetTagMessagesResponse - (*FindAllRemoteBranchesRequest)(nil), // 39: gitaly.FindAllRemoteBranchesRequest - (*FindAllRemoteBranchesResponse)(nil), // 40: gitaly.FindAllRemoteBranchesResponse - (*PackRefsRequest)(nil), // 41: gitaly.PackRefsRequest - (*PackRefsResponse)(nil), // 42: gitaly.PackRefsResponse - (*ListRefsRequest)(nil), // 43: gitaly.ListRefsRequest - (*ListRefsResponse)(nil), // 44: gitaly.ListRefsResponse - (*FindRefsByOIDRequest)(nil), // 45: gitaly.FindRefsByOIDRequest - (*FindRefsByOIDResponse)(nil), // 46: gitaly.FindRefsByOIDResponse - (*FindAllBranchesResponse_Branch)(nil), // 47: gitaly.FindAllBranchesResponse.Branch - (*FindAllTagsRequest_SortBy)(nil), // 48: gitaly.FindAllTagsRequest.SortBy - (*GetTagSignaturesResponse_TagSignature)(nil), // 49: gitaly.GetTagSignaturesResponse.TagSignature - (*ListRefsRequest_SortBy)(nil), // 50: gitaly.ListRefsRequest.SortBy - (*ListRefsResponse_Reference)(nil), // 51: gitaly.ListRefsResponse.Reference - (*Repository)(nil), // 52: gitaly.Repository - (*PaginationParameter)(nil), // 53: gitaly.PaginationParameter - (*GitCommit)(nil), // 54: gitaly.GitCommit - (*timestamppb.Timestamp)(nil), // 55: google.protobuf.Timestamp - (*Tag)(nil), // 56: gitaly.Tag - (*Branch)(nil), // 57: gitaly.Branch - (*InvalidRefFormatError)(nil), // 58: gitaly.InvalidRefFormatError - (*ReferencesLockedError)(nil), // 59: gitaly.ReferencesLockedError - (SortDirection)(0), // 60: gitaly.SortDirection + (*FindTagError)(nil), // 18: gitaly.FindTagError + (*FindAllTagsRequest)(nil), // 19: gitaly.FindAllTagsRequest + (*FindAllTagsResponse)(nil), // 20: gitaly.FindAllTagsResponse + (*RefExistsRequest)(nil), // 21: gitaly.RefExistsRequest + (*RefExistsResponse)(nil), // 22: gitaly.RefExistsResponse + (*CreateBranchRequest)(nil), // 23: gitaly.CreateBranchRequest + (*CreateBranchResponse)(nil), // 24: gitaly.CreateBranchResponse + (*DeleteBranchRequest)(nil), // 25: gitaly.DeleteBranchRequest + (*DeleteBranchResponse)(nil), // 26: gitaly.DeleteBranchResponse + (*FindBranchRequest)(nil), // 27: gitaly.FindBranchRequest + (*FindBranchResponse)(nil), // 28: gitaly.FindBranchResponse + (*DeleteRefsRequest)(nil), // 29: gitaly.DeleteRefsRequest + (*DeleteRefsResponse)(nil), // 30: gitaly.DeleteRefsResponse + (*DeleteRefsError)(nil), // 31: gitaly.DeleteRefsError + (*ListBranchNamesContainingCommitRequest)(nil), // 32: gitaly.ListBranchNamesContainingCommitRequest + (*ListBranchNamesContainingCommitResponse)(nil), // 33: gitaly.ListBranchNamesContainingCommitResponse + (*ListTagNamesContainingCommitRequest)(nil), // 34: gitaly.ListTagNamesContainingCommitRequest + (*ListTagNamesContainingCommitResponse)(nil), // 35: gitaly.ListTagNamesContainingCommitResponse + (*GetTagSignaturesRequest)(nil), // 36: gitaly.GetTagSignaturesRequest + (*GetTagSignaturesResponse)(nil), // 37: gitaly.GetTagSignaturesResponse + (*GetTagMessagesRequest)(nil), // 38: gitaly.GetTagMessagesRequest + (*GetTagMessagesResponse)(nil), // 39: gitaly.GetTagMessagesResponse + (*FindAllRemoteBranchesRequest)(nil), // 40: gitaly.FindAllRemoteBranchesRequest + (*FindAllRemoteBranchesResponse)(nil), // 41: gitaly.FindAllRemoteBranchesResponse + (*PackRefsRequest)(nil), // 42: gitaly.PackRefsRequest + (*PackRefsResponse)(nil), // 43: gitaly.PackRefsResponse + (*ListRefsRequest)(nil), // 44: gitaly.ListRefsRequest + (*ListRefsResponse)(nil), // 45: gitaly.ListRefsResponse + (*FindRefsByOIDRequest)(nil), // 46: gitaly.FindRefsByOIDRequest + (*FindRefsByOIDResponse)(nil), // 47: gitaly.FindRefsByOIDResponse + (*FindAllBranchesResponse_Branch)(nil), // 48: gitaly.FindAllBranchesResponse.Branch + (*FindAllTagsRequest_SortBy)(nil), // 49: gitaly.FindAllTagsRequest.SortBy + (*GetTagSignaturesResponse_TagSignature)(nil), // 50: gitaly.GetTagSignaturesResponse.TagSignature + (*ListRefsRequest_SortBy)(nil), // 51: gitaly.ListRefsRequest.SortBy + (*ListRefsResponse_Reference)(nil), // 52: gitaly.ListRefsResponse.Reference + (*Repository)(nil), // 53: gitaly.Repository + (*PaginationParameter)(nil), // 54: gitaly.PaginationParameter + (*GitCommit)(nil), // 55: gitaly.GitCommit + (*timestamppb.Timestamp)(nil), // 56: google.protobuf.Timestamp + (*Tag)(nil), // 57: gitaly.Tag + (*ReferenceNotFoundError)(nil), // 58: gitaly.ReferenceNotFoundError + (*Branch)(nil), // 59: gitaly.Branch + (*InvalidRefFormatError)(nil), // 60: gitaly.InvalidRefFormatError + (*ReferencesLockedError)(nil), // 61: gitaly.ReferencesLockedError + (SortDirection)(0), // 62: gitaly.SortDirection } var file_ref_proto_depIdxs = []int32{ - 52, // 0: gitaly.FindDefaultBranchNameRequest.repository:type_name -> gitaly.Repository - 52, // 1: gitaly.FindAllBranchNamesRequest.repository:type_name -> gitaly.Repository - 52, // 2: gitaly.FindAllTagNamesRequest.repository:type_name -> gitaly.Repository - 52, // 3: gitaly.FindLocalBranchesRequest.repository:type_name -> gitaly.Repository + 53, // 0: gitaly.FindDefaultBranchNameRequest.repository:type_name -> gitaly.Repository + 53, // 1: gitaly.FindAllBranchNamesRequest.repository:type_name -> gitaly.Repository + 53, // 2: gitaly.FindAllTagNamesRequest.repository:type_name -> gitaly.Repository + 53, // 3: gitaly.FindLocalBranchesRequest.repository:type_name -> gitaly.Repository 0, // 4: gitaly.FindLocalBranchesRequest.sort_by:type_name -> gitaly.FindLocalBranchesRequest.SortBy - 53, // 5: gitaly.FindLocalBranchesRequest.pagination_params:type_name -> gitaly.PaginationParameter + 54, // 5: gitaly.FindLocalBranchesRequest.pagination_params:type_name -> gitaly.PaginationParameter 12, // 6: gitaly.FindLocalBranchesResponse.branches:type_name -> gitaly.FindLocalBranchResponse 13, // 7: gitaly.FindLocalBranchResponse.commit_author:type_name -> gitaly.FindLocalBranchCommitAuthor 13, // 8: gitaly.FindLocalBranchResponse.commit_committer:type_name -> gitaly.FindLocalBranchCommitAuthor - 54, // 9: gitaly.FindLocalBranchResponse.commit:type_name -> gitaly.GitCommit - 55, // 10: gitaly.FindLocalBranchCommitAuthor.date:type_name -> google.protobuf.Timestamp - 52, // 11: gitaly.FindAllBranchesRequest.repository:type_name -> gitaly.Repository - 47, // 12: gitaly.FindAllBranchesResponse.branches:type_name -> gitaly.FindAllBranchesResponse.Branch - 52, // 13: gitaly.FindTagRequest.repository:type_name -> gitaly.Repository - 56, // 14: gitaly.FindTagResponse.tag:type_name -> gitaly.Tag - 52, // 15: gitaly.FindAllTagsRequest.repository:type_name -> gitaly.Repository - 48, // 16: gitaly.FindAllTagsRequest.sort_by:type_name -> gitaly.FindAllTagsRequest.SortBy - 53, // 17: gitaly.FindAllTagsRequest.pagination_params:type_name -> gitaly.PaginationParameter - 56, // 18: gitaly.FindAllTagsResponse.tags:type_name -> gitaly.Tag - 52, // 19: gitaly.RefExistsRequest.repository:type_name -> gitaly.Repository - 52, // 20: gitaly.CreateBranchRequest.repository:type_name -> gitaly.Repository - 2, // 21: gitaly.CreateBranchResponse.status:type_name -> gitaly.CreateBranchResponse.Status - 57, // 22: gitaly.CreateBranchResponse.branch:type_name -> gitaly.Branch - 52, // 23: gitaly.DeleteBranchRequest.repository:type_name -> gitaly.Repository - 52, // 24: gitaly.FindBranchRequest.repository:type_name -> gitaly.Repository - 57, // 25: gitaly.FindBranchResponse.branch:type_name -> gitaly.Branch - 52, // 26: gitaly.DeleteRefsRequest.repository:type_name -> gitaly.Repository - 58, // 27: gitaly.DeleteRefsError.invalid_format:type_name -> gitaly.InvalidRefFormatError - 59, // 28: gitaly.DeleteRefsError.references_locked:type_name -> gitaly.ReferencesLockedError - 52, // 29: gitaly.ListBranchNamesContainingCommitRequest.repository:type_name -> gitaly.Repository - 52, // 30: gitaly.ListTagNamesContainingCommitRequest.repository:type_name -> gitaly.Repository - 52, // 31: gitaly.GetTagSignaturesRequest.repository:type_name -> gitaly.Repository - 49, // 32: gitaly.GetTagSignaturesResponse.signatures:type_name -> gitaly.GetTagSignaturesResponse.TagSignature - 52, // 33: gitaly.GetTagMessagesRequest.repository:type_name -> gitaly.Repository - 52, // 34: gitaly.FindAllRemoteBranchesRequest.repository:type_name -> gitaly.Repository - 57, // 35: gitaly.FindAllRemoteBranchesResponse.branches:type_name -> gitaly.Branch - 52, // 36: gitaly.PackRefsRequest.repository:type_name -> gitaly.Repository - 52, // 37: gitaly.ListRefsRequest.repository:type_name -> gitaly.Repository - 50, // 38: gitaly.ListRefsRequest.sort_by:type_name -> gitaly.ListRefsRequest.SortBy - 51, // 39: gitaly.ListRefsResponse.references:type_name -> gitaly.ListRefsResponse.Reference - 52, // 40: gitaly.FindRefsByOIDRequest.repository:type_name -> gitaly.Repository - 54, // 41: gitaly.FindAllBranchesResponse.Branch.target:type_name -> gitaly.GitCommit - 1, // 42: gitaly.FindAllTagsRequest.SortBy.key:type_name -> gitaly.FindAllTagsRequest.SortBy.Key - 60, // 43: gitaly.FindAllTagsRequest.SortBy.direction:type_name -> gitaly.SortDirection - 3, // 44: gitaly.ListRefsRequest.SortBy.key:type_name -> gitaly.ListRefsRequest.SortBy.Key - 60, // 45: gitaly.ListRefsRequest.SortBy.direction:type_name -> gitaly.SortDirection - 4, // 46: gitaly.RefService.FindDefaultBranchName:input_type -> gitaly.FindDefaultBranchNameRequest - 6, // 47: gitaly.RefService.FindAllBranchNames:input_type -> gitaly.FindAllBranchNamesRequest - 8, // 48: gitaly.RefService.FindAllTagNames:input_type -> gitaly.FindAllTagNamesRequest - 10, // 49: gitaly.RefService.FindLocalBranches:input_type -> gitaly.FindLocalBranchesRequest - 14, // 50: gitaly.RefService.FindAllBranches:input_type -> gitaly.FindAllBranchesRequest - 18, // 51: gitaly.RefService.FindAllTags:input_type -> gitaly.FindAllTagsRequest - 16, // 52: gitaly.RefService.FindTag:input_type -> gitaly.FindTagRequest - 39, // 53: gitaly.RefService.FindAllRemoteBranches:input_type -> gitaly.FindAllRemoteBranchesRequest - 20, // 54: gitaly.RefService.RefExists:input_type -> gitaly.RefExistsRequest - 26, // 55: gitaly.RefService.FindBranch:input_type -> gitaly.FindBranchRequest - 28, // 56: gitaly.RefService.DeleteRefs:input_type -> gitaly.DeleteRefsRequest - 31, // 57: gitaly.RefService.ListBranchNamesContainingCommit:input_type -> gitaly.ListBranchNamesContainingCommitRequest - 33, // 58: gitaly.RefService.ListTagNamesContainingCommit:input_type -> gitaly.ListTagNamesContainingCommitRequest - 35, // 59: gitaly.RefService.GetTagSignatures:input_type -> gitaly.GetTagSignaturesRequest - 37, // 60: gitaly.RefService.GetTagMessages:input_type -> gitaly.GetTagMessagesRequest - 41, // 61: gitaly.RefService.PackRefs:input_type -> gitaly.PackRefsRequest - 43, // 62: gitaly.RefService.ListRefs:input_type -> gitaly.ListRefsRequest - 45, // 63: gitaly.RefService.FindRefsByOID:input_type -> gitaly.FindRefsByOIDRequest - 5, // 64: gitaly.RefService.FindDefaultBranchName:output_type -> gitaly.FindDefaultBranchNameResponse - 7, // 65: gitaly.RefService.FindAllBranchNames:output_type -> gitaly.FindAllBranchNamesResponse - 9, // 66: gitaly.RefService.FindAllTagNames:output_type -> gitaly.FindAllTagNamesResponse - 11, // 67: gitaly.RefService.FindLocalBranches:output_type -> gitaly.FindLocalBranchesResponse - 15, // 68: gitaly.RefService.FindAllBranches:output_type -> gitaly.FindAllBranchesResponse - 19, // 69: gitaly.RefService.FindAllTags:output_type -> gitaly.FindAllTagsResponse - 17, // 70: gitaly.RefService.FindTag:output_type -> gitaly.FindTagResponse - 40, // 71: gitaly.RefService.FindAllRemoteBranches:output_type -> gitaly.FindAllRemoteBranchesResponse - 21, // 72: gitaly.RefService.RefExists:output_type -> gitaly.RefExistsResponse - 27, // 73: gitaly.RefService.FindBranch:output_type -> gitaly.FindBranchResponse - 29, // 74: gitaly.RefService.DeleteRefs:output_type -> gitaly.DeleteRefsResponse - 32, // 75: gitaly.RefService.ListBranchNamesContainingCommit:output_type -> gitaly.ListBranchNamesContainingCommitResponse - 34, // 76: gitaly.RefService.ListTagNamesContainingCommit:output_type -> gitaly.ListTagNamesContainingCommitResponse - 36, // 77: gitaly.RefService.GetTagSignatures:output_type -> gitaly.GetTagSignaturesResponse - 38, // 78: gitaly.RefService.GetTagMessages:output_type -> gitaly.GetTagMessagesResponse - 42, // 79: gitaly.RefService.PackRefs:output_type -> gitaly.PackRefsResponse - 44, // 80: gitaly.RefService.ListRefs:output_type -> gitaly.ListRefsResponse - 46, // 81: gitaly.RefService.FindRefsByOID:output_type -> gitaly.FindRefsByOIDResponse - 64, // [64:82] is the sub-list for method output_type - 46, // [46:64] is the sub-list for method input_type - 46, // [46:46] is the sub-list for extension type_name - 46, // [46:46] is the sub-list for extension extendee - 0, // [0:46] is the sub-list for field type_name + 55, // 9: gitaly.FindLocalBranchResponse.commit:type_name -> gitaly.GitCommit + 56, // 10: gitaly.FindLocalBranchCommitAuthor.date:type_name -> google.protobuf.Timestamp + 53, // 11: gitaly.FindAllBranchesRequest.repository:type_name -> gitaly.Repository + 48, // 12: gitaly.FindAllBranchesResponse.branches:type_name -> gitaly.FindAllBranchesResponse.Branch + 53, // 13: gitaly.FindTagRequest.repository:type_name -> gitaly.Repository + 57, // 14: gitaly.FindTagResponse.tag:type_name -> gitaly.Tag + 58, // 15: gitaly.FindTagError.tag_not_found:type_name -> gitaly.ReferenceNotFoundError + 53, // 16: gitaly.FindAllTagsRequest.repository:type_name -> gitaly.Repository + 49, // 17: gitaly.FindAllTagsRequest.sort_by:type_name -> gitaly.FindAllTagsRequest.SortBy + 54, // 18: gitaly.FindAllTagsRequest.pagination_params:type_name -> gitaly.PaginationParameter + 57, // 19: gitaly.FindAllTagsResponse.tags:type_name -> gitaly.Tag + 53, // 20: gitaly.RefExistsRequest.repository:type_name -> gitaly.Repository + 53, // 21: gitaly.CreateBranchRequest.repository:type_name -> gitaly.Repository + 2, // 22: gitaly.CreateBranchResponse.status:type_name -> gitaly.CreateBranchResponse.Status + 59, // 23: gitaly.CreateBranchResponse.branch:type_name -> gitaly.Branch + 53, // 24: gitaly.DeleteBranchRequest.repository:type_name -> gitaly.Repository + 53, // 25: gitaly.FindBranchRequest.repository:type_name -> gitaly.Repository + 59, // 26: gitaly.FindBranchResponse.branch:type_name -> gitaly.Branch + 53, // 27: gitaly.DeleteRefsRequest.repository:type_name -> gitaly.Repository + 60, // 28: gitaly.DeleteRefsError.invalid_format:type_name -> gitaly.InvalidRefFormatError + 61, // 29: gitaly.DeleteRefsError.references_locked:type_name -> gitaly.ReferencesLockedError + 53, // 30: gitaly.ListBranchNamesContainingCommitRequest.repository:type_name -> gitaly.Repository + 53, // 31: gitaly.ListTagNamesContainingCommitRequest.repository:type_name -> gitaly.Repository + 53, // 32: gitaly.GetTagSignaturesRequest.repository:type_name -> gitaly.Repository + 50, // 33: gitaly.GetTagSignaturesResponse.signatures:type_name -> gitaly.GetTagSignaturesResponse.TagSignature + 53, // 34: gitaly.GetTagMessagesRequest.repository:type_name -> gitaly.Repository + 53, // 35: gitaly.FindAllRemoteBranchesRequest.repository:type_name -> gitaly.Repository + 59, // 36: gitaly.FindAllRemoteBranchesResponse.branches:type_name -> gitaly.Branch + 53, // 37: gitaly.PackRefsRequest.repository:type_name -> gitaly.Repository + 53, // 38: gitaly.ListRefsRequest.repository:type_name -> gitaly.Repository + 51, // 39: gitaly.ListRefsRequest.sort_by:type_name -> gitaly.ListRefsRequest.SortBy + 52, // 40: gitaly.ListRefsResponse.references:type_name -> gitaly.ListRefsResponse.Reference + 53, // 41: gitaly.FindRefsByOIDRequest.repository:type_name -> gitaly.Repository + 55, // 42: gitaly.FindAllBranchesResponse.Branch.target:type_name -> gitaly.GitCommit + 1, // 43: gitaly.FindAllTagsRequest.SortBy.key:type_name -> gitaly.FindAllTagsRequest.SortBy.Key + 62, // 44: gitaly.FindAllTagsRequest.SortBy.direction:type_name -> gitaly.SortDirection + 3, // 45: gitaly.ListRefsRequest.SortBy.key:type_name -> gitaly.ListRefsRequest.SortBy.Key + 62, // 46: gitaly.ListRefsRequest.SortBy.direction:type_name -> gitaly.SortDirection + 4, // 47: gitaly.RefService.FindDefaultBranchName:input_type -> gitaly.FindDefaultBranchNameRequest + 6, // 48: gitaly.RefService.FindAllBranchNames:input_type -> gitaly.FindAllBranchNamesRequest + 8, // 49: gitaly.RefService.FindAllTagNames:input_type -> gitaly.FindAllTagNamesRequest + 10, // 50: gitaly.RefService.FindLocalBranches:input_type -> gitaly.FindLocalBranchesRequest + 14, // 51: gitaly.RefService.FindAllBranches:input_type -> gitaly.FindAllBranchesRequest + 19, // 52: gitaly.RefService.FindAllTags:input_type -> gitaly.FindAllTagsRequest + 16, // 53: gitaly.RefService.FindTag:input_type -> gitaly.FindTagRequest + 40, // 54: gitaly.RefService.FindAllRemoteBranches:input_type -> gitaly.FindAllRemoteBranchesRequest + 21, // 55: gitaly.RefService.RefExists:input_type -> gitaly.RefExistsRequest + 27, // 56: gitaly.RefService.FindBranch:input_type -> gitaly.FindBranchRequest + 29, // 57: gitaly.RefService.DeleteRefs:input_type -> gitaly.DeleteRefsRequest + 32, // 58: gitaly.RefService.ListBranchNamesContainingCommit:input_type -> gitaly.ListBranchNamesContainingCommitRequest + 34, // 59: gitaly.RefService.ListTagNamesContainingCommit:input_type -> gitaly.ListTagNamesContainingCommitRequest + 36, // 60: gitaly.RefService.GetTagSignatures:input_type -> gitaly.GetTagSignaturesRequest + 38, // 61: gitaly.RefService.GetTagMessages:input_type -> gitaly.GetTagMessagesRequest + 42, // 62: gitaly.RefService.PackRefs:input_type -> gitaly.PackRefsRequest + 44, // 63: gitaly.RefService.ListRefs:input_type -> gitaly.ListRefsRequest + 46, // 64: gitaly.RefService.FindRefsByOID:input_type -> gitaly.FindRefsByOIDRequest + 5, // 65: gitaly.RefService.FindDefaultBranchName:output_type -> gitaly.FindDefaultBranchNameResponse + 7, // 66: gitaly.RefService.FindAllBranchNames:output_type -> gitaly.FindAllBranchNamesResponse + 9, // 67: gitaly.RefService.FindAllTagNames:output_type -> gitaly.FindAllTagNamesResponse + 11, // 68: gitaly.RefService.FindLocalBranches:output_type -> gitaly.FindLocalBranchesResponse + 15, // 69: gitaly.RefService.FindAllBranches:output_type -> gitaly.FindAllBranchesResponse + 20, // 70: gitaly.RefService.FindAllTags:output_type -> gitaly.FindAllTagsResponse + 17, // 71: gitaly.RefService.FindTag:output_type -> gitaly.FindTagResponse + 41, // 72: gitaly.RefService.FindAllRemoteBranches:output_type -> gitaly.FindAllRemoteBranchesResponse + 22, // 73: gitaly.RefService.RefExists:output_type -> gitaly.RefExistsResponse + 28, // 74: gitaly.RefService.FindBranch:output_type -> gitaly.FindBranchResponse + 30, // 75: gitaly.RefService.DeleteRefs:output_type -> gitaly.DeleteRefsResponse + 33, // 76: gitaly.RefService.ListBranchNamesContainingCommit:output_type -> gitaly.ListBranchNamesContainingCommitResponse + 35, // 77: gitaly.RefService.ListTagNamesContainingCommit:output_type -> gitaly.ListTagNamesContainingCommitResponse + 37, // 78: gitaly.RefService.GetTagSignatures:output_type -> gitaly.GetTagSignaturesResponse + 39, // 79: gitaly.RefService.GetTagMessages:output_type -> gitaly.GetTagMessagesResponse + 43, // 80: gitaly.RefService.PackRefs:output_type -> gitaly.PackRefsResponse + 45, // 81: gitaly.RefService.ListRefs:output_type -> gitaly.ListRefsResponse + 47, // 82: gitaly.RefService.FindRefsByOID:output_type -> gitaly.FindRefsByOIDResponse + 65, // [65:83] is the sub-list for method output_type + 47, // [47:65] is the sub-list for method input_type + 47, // [47:47] is the sub-list for extension type_name + 47, // [47:47] is the sub-list for extension extendee + 0, // [0:47] is the sub-list for field type_name } func init() { file_ref_proto_init() } @@ -3826,7 +3886,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FindAllTagsRequest); i { + switch v := v.(*FindTagError); i { case 0: return &v.state case 1: @@ -3838,7 +3898,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FindAllTagsResponse); i { + switch v := v.(*FindAllTagsRequest); i { case 0: return &v.state case 1: @@ -3850,7 +3910,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RefExistsRequest); i { + switch v := v.(*FindAllTagsResponse); i { case 0: return &v.state case 1: @@ -3862,7 +3922,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RefExistsResponse); i { + switch v := v.(*RefExistsRequest); i { case 0: return &v.state case 1: @@ -3874,7 +3934,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateBranchRequest); i { + switch v := v.(*RefExistsResponse); i { case 0: return &v.state case 1: @@ -3886,7 +3946,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateBranchResponse); i { + switch v := v.(*CreateBranchRequest); i { case 0: return &v.state case 1: @@ -3898,7 +3958,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteBranchRequest); i { + switch v := v.(*CreateBranchResponse); i { case 0: return &v.state case 1: @@ -3910,7 +3970,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteBranchResponse); i { + switch v := v.(*DeleteBranchRequest); i { case 0: return &v.state case 1: @@ -3922,7 +3982,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FindBranchRequest); i { + switch v := v.(*DeleteBranchResponse); i { case 0: return &v.state case 1: @@ -3934,7 +3994,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FindBranchResponse); i { + switch v := v.(*FindBranchRequest); i { case 0: return &v.state case 1: @@ -3946,7 +4006,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteRefsRequest); i { + switch v := v.(*FindBranchResponse); i { case 0: return &v.state case 1: @@ -3958,7 +4018,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteRefsResponse); i { + switch v := v.(*DeleteRefsRequest); i { case 0: return &v.state case 1: @@ -3970,7 +4030,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteRefsError); i { + switch v := v.(*DeleteRefsResponse); i { case 0: return &v.state case 1: @@ -3982,7 +4042,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListBranchNamesContainingCommitRequest); i { + switch v := v.(*DeleteRefsError); i { case 0: return &v.state case 1: @@ -3994,7 +4054,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListBranchNamesContainingCommitResponse); i { + switch v := v.(*ListBranchNamesContainingCommitRequest); i { case 0: return &v.state case 1: @@ -4006,7 +4066,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTagNamesContainingCommitRequest); i { + switch v := v.(*ListBranchNamesContainingCommitResponse); i { case 0: return &v.state case 1: @@ -4018,7 +4078,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTagNamesContainingCommitResponse); i { + switch v := v.(*ListTagNamesContainingCommitRequest); i { case 0: return &v.state case 1: @@ -4030,7 +4090,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTagSignaturesRequest); i { + switch v := v.(*ListTagNamesContainingCommitResponse); i { case 0: return &v.state case 1: @@ -4042,7 +4102,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTagSignaturesResponse); i { + switch v := v.(*GetTagSignaturesRequest); i { case 0: return &v.state case 1: @@ -4054,7 +4114,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTagMessagesRequest); i { + switch v := v.(*GetTagSignaturesResponse); i { case 0: return &v.state case 1: @@ -4066,7 +4126,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTagMessagesResponse); i { + switch v := v.(*GetTagMessagesRequest); i { case 0: return &v.state case 1: @@ -4078,7 +4138,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FindAllRemoteBranchesRequest); i { + switch v := v.(*GetTagMessagesResponse); i { case 0: return &v.state case 1: @@ -4090,7 +4150,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FindAllRemoteBranchesResponse); i { + switch v := v.(*FindAllRemoteBranchesRequest); i { case 0: return &v.state case 1: @@ -4102,7 +4162,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PackRefsRequest); i { + switch v := v.(*FindAllRemoteBranchesResponse); i { case 0: return &v.state case 1: @@ -4114,7 +4174,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PackRefsResponse); i { + switch v := v.(*PackRefsRequest); i { case 0: return &v.state case 1: @@ -4126,7 +4186,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListRefsRequest); i { + switch v := v.(*PackRefsResponse); i { case 0: return &v.state case 1: @@ -4138,7 +4198,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListRefsResponse); i { + switch v := v.(*ListRefsRequest); i { case 0: return &v.state case 1: @@ -4150,7 +4210,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FindRefsByOIDRequest); i { + switch v := v.(*ListRefsResponse); i { case 0: return &v.state case 1: @@ -4162,7 +4222,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FindRefsByOIDResponse); i { + switch v := v.(*FindRefsByOIDRequest); i { case 0: return &v.state case 1: @@ -4174,7 +4234,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FindAllBranchesResponse_Branch); i { + switch v := v.(*FindRefsByOIDResponse); i { case 0: return &v.state case 1: @@ -4186,7 +4246,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FindAllTagsRequest_SortBy); i { + switch v := v.(*FindAllBranchesResponse_Branch); i { case 0: return &v.state case 1: @@ -4198,7 +4258,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTagSignaturesResponse_TagSignature); i { + switch v := v.(*FindAllTagsRequest_SortBy); i { case 0: return &v.state case 1: @@ -4210,7 +4270,7 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListRefsRequest_SortBy); i { + switch v := v.(*GetTagSignaturesResponse_TagSignature); i { case 0: return &v.state case 1: @@ -4222,6 +4282,18 @@ func file_ref_proto_init() { } } file_ref_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListRefsRequest_SortBy); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ref_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListRefsResponse_Reference); i { case 0: return &v.state @@ -4234,7 +4306,7 @@ func file_ref_proto_init() { } } } - file_ref_proto_msgTypes[26].OneofWrappers = []interface{}{ + file_ref_proto_msgTypes[27].OneofWrappers = []interface{}{ (*DeleteRefsError_InvalidFormat)(nil), (*DeleteRefsError_ReferencesLocked)(nil), } @@ -4244,7 +4316,7 @@ func file_ref_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_ref_proto_rawDesc, NumEnums: 4, - NumMessages: 48, + NumMessages: 49, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/go/gitalypb/ref_grpc.pb.go b/proto/go/gitalypb/ref_grpc.pb.go index 0f0884a1c..d84760be1 100644 --- a/proto/go/gitalypb/ref_grpc.pb.go +++ b/proto/go/gitalypb/ref_grpc.pb.go @@ -34,7 +34,9 @@ type RefServiceClient interface { FindAllBranches(ctx context.Context, in *FindAllBranchesRequest, opts ...grpc.CallOption) (RefService_FindAllBranchesClient, error) // Returns a stream of tags repository has. FindAllTags(ctx context.Context, in *FindAllTagsRequest, opts ...grpc.CallOption) (RefService_FindAllTagsClient, error) - // This comment is left unintentionally blank. + // FindTag looks up a tag by its name and returns it to the caller if it exists. This RPC supports + // both lightweight and annotated tags. Note: this RPC returns an `Internal` error if the tag was + // not found. FindTag(ctx context.Context, in *FindTagRequest, opts ...grpc.CallOption) (*FindTagResponse, error) // This comment is left unintentionally blank. FindAllRemoteBranches(ctx context.Context, in *FindAllRemoteBranchesRequest, opts ...grpc.CallOption) (RefService_FindAllRemoteBranchesClient, error) @@ -509,7 +511,9 @@ type RefServiceServer interface { FindAllBranches(*FindAllBranchesRequest, RefService_FindAllBranchesServer) error // Returns a stream of tags repository has. FindAllTags(*FindAllTagsRequest, RefService_FindAllTagsServer) error - // This comment is left unintentionally blank. + // FindTag looks up a tag by its name and returns it to the caller if it exists. This RPC supports + // both lightweight and annotated tags. Note: this RPC returns an `Internal` error if the tag was + // not found. FindTag(context.Context, *FindTagRequest) (*FindTagResponse, error) // This comment is left unintentionally blank. FindAllRemoteBranches(*FindAllRemoteBranchesRequest, RefService_FindAllRemoteBranchesServer) error diff --git a/proto/ref.proto b/proto/ref.proto index 42a0d9659..33729e036 100644 --- a/proto/ref.proto +++ b/proto/ref.proto @@ -55,7 +55,9 @@ service RefService { }; } - // This comment is left unintentionally blank. + // FindTag looks up a tag by its name and returns it to the caller if it exists. This RPC supports + // both lightweight and annotated tags. Note: this RPC returns an `Internal` error if the tag was + // not found. rpc FindTag(FindTagRequest) returns (FindTagResponse) { option (op_type) = { op: ACCESSOR @@ -268,20 +270,29 @@ message FindAllBranchesResponse { repeated Branch branches = 1; } -// This comment is left unintentionally blank. +// FindTagRequest is a request for the FindTag RPC. message FindTagRequest { - // This comment is left unintentionally blank. + // Repository is the repository to look up the tag in. Repository repository = 1 [(target_repository)=true]; - // This comment is left unintentionally blank. + // TagName is the name of the tag that should be looked up. The caller is supposed to pass in the + // tag name only, so if e.g. a tag `refs/tags/v1.0.0` exists, then the caller should pass `v1.0.0` + // as argument. bytes tag_name = 2; } -// This comment is left unintentionally blank. +// FindTagResponse is a response for the FindTag RPC. message FindTagResponse { - // This comment is left unintentionally blank. + // Tag is the tag that was found. Tag tag = 1; } +// FindTagError is an error that will be returned by the FindTag RPC under specific error +// conditions. +message FindTagError { + // TagNotFound indicates that the tag was not found. + ReferenceNotFoundError tag_not_found = 1; +} + // This comment is left unintentionally blank. message FindAllTagsRequest { // SortBy allows to specify desired order of the elements. diff --git a/ruby/proto/gitaly/errors_pb.rb b/ruby/proto/gitaly/errors_pb.rb index 620b645e5..f772b7291 100644 --- a/ruby/proto/gitaly/errors_pb.rb +++ b/ruby/proto/gitaly/errors_pb.rb @@ -31,6 +31,9 @@ Google::Protobuf::DescriptorPool.generated_pool.build do optional :reference_name, :bytes, 1 optional :oid, :string, 2 end + add_message "gitaly.ReferenceNotFoundError" do + optional :reference_name, :bytes, 1 + end add_message "gitaly.ReferenceUpdateError" do optional :reference_name, :bytes, 1 optional :old_oid, :string, 2 @@ -65,6 +68,7 @@ module Gitaly MergeConflictError = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.MergeConflictError").msgclass ReferencesLockedError = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.ReferencesLockedError").msgclass ReferenceExistsError = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.ReferenceExistsError").msgclass + ReferenceNotFoundError = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.ReferenceNotFoundError").msgclass ReferenceUpdateError = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.ReferenceUpdateError").msgclass ResolveRevisionError = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.ResolveRevisionError").msgclass LimitError = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.LimitError").msgclass diff --git a/ruby/proto/gitaly/ref_pb.rb b/ruby/proto/gitaly/ref_pb.rb index bfd341832..72aa78039 100644 --- a/ruby/proto/gitaly/ref_pb.rb +++ b/ruby/proto/gitaly/ref_pb.rb @@ -73,6 +73,9 @@ Google::Protobuf::DescriptorPool.generated_pool.build do add_message "gitaly.FindTagResponse" do optional :tag, :message, 1, "gitaly.Tag" end + add_message "gitaly.FindTagError" do + optional :tag_not_found, :message, 1, "gitaly.ReferenceNotFoundError" + end add_message "gitaly.FindAllTagsRequest" do optional :repository, :message, 1, "gitaly.Repository" optional :sort_by, :message, 2, "gitaly.FindAllTagsRequest.SortBy" @@ -239,6 +242,7 @@ module Gitaly FindAllBranchesResponse::Branch = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.FindAllBranchesResponse.Branch").msgclass FindTagRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.FindTagRequest").msgclass FindTagResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.FindTagResponse").msgclass + FindTagError = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.FindTagError").msgclass FindAllTagsRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.FindAllTagsRequest").msgclass FindAllTagsRequest::SortBy = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.FindAllTagsRequest.SortBy").msgclass FindAllTagsRequest::SortBy::Key = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.FindAllTagsRequest.SortBy.Key").enummodule diff --git a/ruby/proto/gitaly/ref_services_pb.rb b/ruby/proto/gitaly/ref_services_pb.rb index 67f5e76a1..ac905cd7b 100644 --- a/ruby/proto/gitaly/ref_services_pb.rb +++ b/ruby/proto/gitaly/ref_services_pb.rb @@ -27,7 +27,9 @@ module Gitaly rpc :FindAllBranches, ::Gitaly::FindAllBranchesRequest, stream(::Gitaly::FindAllBranchesResponse) # Returns a stream of tags repository has. rpc :FindAllTags, ::Gitaly::FindAllTagsRequest, stream(::Gitaly::FindAllTagsResponse) - # This comment is left unintentionally blank. + # FindTag looks up a tag by its name and returns it to the caller if it exists. This RPC supports + # both lightweight and annotated tags. Note: this RPC returns an `Internal` error if the tag was + # not found. rpc :FindTag, ::Gitaly::FindTagRequest, ::Gitaly::FindTagResponse # This comment is left unintentionally blank. rpc :FindAllRemoteBranches, ::Gitaly::FindAllRemoteBranchesRequest, stream(::Gitaly::FindAllRemoteBranchesResponse) |