Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md4
-rw-r--r--Makefile3
-rw-r--r--cmd/gitaly-hooks/hooks.go65
-rw-r--r--cmd/gitaly-hooks/hooks_test.go65
-rw-r--r--doc/README.md1
-rw-r--r--doc/stream_rpc.md101
-rw-r--r--internal/gitaly/hook/sidechannel.go109
-rw-r--r--internal/gitaly/hook/sidechannel_test.go60
-rw-r--r--internal/gitaly/hook/testdata/.gitkeep0
-rw-r--r--internal/gitaly/service/blob/blobs.go27
-rw-r--r--internal/gitaly/service/blob/blobs_test.go36
-rw-r--r--internal/gitaly/service/conflicts/resolve_conflicts.go17
-rw-r--r--internal/gitaly/service/hook/pack_objects.go100
-rw-r--r--internal/gitaly/service/hook/pack_objects_test.go152
-rw-r--r--internal/gitaly/service/operations/branches.go5
-rw-r--r--internal/gitaly/service/operations/branches_test.go43
-rw-r--r--internal/gitaly/service/operations/cherry_pick.go3
-rw-r--r--internal/gitaly/service/operations/cherry_pick_test.go76
-rw-r--r--internal/gitaly/service/operations/commit_files.go3
-rw-r--r--internal/gitaly/service/operations/commit_files_test.go94
-rw-r--r--internal/gitaly/service/operations/merge.go5
-rw-r--r--internal/gitaly/service/operations/merge_test.go107
-rw-r--r--internal/gitaly/service/operations/rebase.go3
-rw-r--r--internal/gitaly/service/operations/rebase_test.go120
-rw-r--r--internal/gitaly/service/operations/revert.go3
-rw-r--r--internal/gitaly/service/operations/revert_test.go76
-rw-r--r--internal/gitaly/service/operations/server.go9
-rw-r--r--internal/gitaly/service/operations/squash.go9
-rw-r--r--internal/gitaly/service/operations/squash_test.go45
-rw-r--r--internal/gitaly/service/operations/submodules.go3
-rw-r--r--internal/gitaly/service/operations/submodules_test.go62
-rw-r--r--internal/gitaly/service/operations/update_branches_test.go37
-rw-r--r--internal/gitaly/service/ref/refs.go57
-rw-r--r--internal/gitaly/service/ref/refs_test.go54
-rw-r--r--internal/gitaly/service/remote/fetch_internal_remote_test.go1
-rw-r--r--internal/gitaly/service/remote/find_remote_repository.go48
-rw-r--r--internal/gitaly/service/remote/find_remote_repository_test.go65
-rw-r--r--internal/gitaly/service/remote/find_remote_root_ref.go33
-rw-r--r--internal/gitaly/service/remote/find_remote_root_ref_test.go46
-rw-r--r--internal/gitaly/service/remote/remotes.go168
-rw-r--r--internal/gitaly/service/remote/remotes_test.go317
-rw-r--r--internal/gitaly/service/remote/server.go4
-rw-r--r--internal/gitaly/service/remote/testhelper_test.go38
-rw-r--r--internal/gitaly/service/remote/update_remote_mirror.go43
-rw-r--r--internal/gitaly/service/remote/update_remote_mirror_test.go76
-rw-r--r--internal/gitaly/service/repository/config.go1
-rw-r--r--internal/gitaly/service/repository/config_test.go4
-rw-r--r--internal/gitaly/service/repository/fetch_remote.go55
-rw-r--r--internal/gitaly/service/repository/fetch_remote_test.go114
-rw-r--r--internal/gitaly/service/repository/fork_test.go2
-rw-r--r--internal/gitaly/service/repository/squash_in_progress_test.go2
-rw-r--r--internal/gitaly/service/repository/testhelper_test.go1
-rw-r--r--internal/gitaly/service/setup/register.go1
-rw-r--r--internal/metadata/featureflag/feature_flags.go14
-rw-r--r--internal/praefect/coordinator.go2
-rw-r--r--internal/praefect/datastore/listener_postgres.go12
-rw-r--r--internal/praefect/protoregistry/protoregistry_test.go2
-rw-r--r--internal/streamrpc/client.go149
-rw-r--r--internal/streamrpc/common.go82
-rw-r--r--internal/streamrpc/frame_test.go139
-rw-r--r--internal/streamrpc/protocol_test.go117
-rw-r--r--internal/streamrpc/rpc_test.go312
-rw-r--r--internal/streamrpc/server.go166
-rw-r--r--internal/streamrpc/testdata/test.pb.go167
-rw-r--r--internal/streamrpc/testdata/test.proto16
-rw-r--r--internal/streamrpc/testdata/test_grpc.pb.go102
-rw-r--r--proto/blob.proto7
-rw-r--r--proto/go/gitalypb/blob.pb.go236
-rw-r--r--proto/go/gitalypb/hook.pb.go287
-rw-r--r--proto/go/gitalypb/hook_grpc.pb.go43
-rw-r--r--proto/go/gitalypb/operations.pb.go337
-rw-r--r--proto/go/gitalypb/remote.pb.go862
-rw-r--r--proto/go/gitalypb/remote_grpc.pb.go72
-rw-r--r--proto/go/gitalypb/repository-service.pb.go1323
-rw-r--r--proto/go/gitalypb/repository-service_grpc.pb.go27
-rw-r--r--proto/hook.proto15
-rw-r--r--proto/operations.proto8
-rw-r--r--proto/remote.proto60
-rw-r--r--proto/repository-service.proto20
-rw-r--r--ruby/lib/gitaly_server.rb2
-rw-r--r--ruby/lib/gitaly_server/remote_service.rb40
-rw-r--r--ruby/lib/gitaly_server/utils.rb16
-rw-r--r--ruby/lib/gitlab/git.rb2
-rw-r--r--ruby/lib/gitlab/git/gitlab_projects.rb16
-rw-r--r--ruby/lib/gitlab/git/remote_mirror.rb146
-rw-r--r--ruby/lib/gitlab/git/repository.rb31
-rw-r--r--ruby/lib/gitlab/git/repository_mirroring.rb113
-rw-r--r--ruby/lib/gitlab/ref_matcher.rb41
-rw-r--r--ruby/proto/gitaly/blob_pb.rb2
-rw-r--r--ruby/proto/gitaly/hook_pb.rb8
-rw-r--r--ruby/proto/gitaly/hook_services_pb.rb3
-rw-r--r--ruby/proto/gitaly/remote_pb.rb35
-rw-r--r--ruby/proto/gitaly/remote_services_pb.rb2
-rw-r--r--ruby/proto/gitaly/repository-service_pb.rb1
-rw-r--r--ruby/proto/gitaly/repository-service_services_pb.rb9
-rw-r--r--ruby/spec/gitaly/remote_service_spec.rb45
-rw-r--r--ruby/spec/lib/gitaly_server/remote_service_spec.rb21
-rw-r--r--ruby/spec/lib/gitlab/git/gitlab_projects_spec.rb30
-rw-r--r--ruby/spec/lib/gitlab/git/remote_mirror_spec.rb121
-rw-r--r--ruby/spec/lib/gitlab/git/repository_mirroring_spec.rb68
-rw-r--r--ruby/spec/lib/gitlab/git/repository_spec.rb38
-rw-r--r--ruby/spec/lib/gitlab/ref_matcher_spec.rb100
102 files changed, 2474 insertions, 5566 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4989420e1..20b8052e2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
# Gitaly changelog
+## 14.2.1 (2021-08-23)
+
+No changes.
+
## 14.2.0 (2021-08-20)
### Added (8 changes)
diff --git a/Makefile b/Makefile
index e9ee98d2c..2439c3205 100644
--- a/Makefile
+++ b/Makefile
@@ -394,8 +394,7 @@ proto: ${PROTOC} ${PROTOC_GEN_GO} ${PROTOC_GEN_GO_GRPC} ${SOURCE_DIR}/.ruby-bund
${SOURCE_DIR}/internal/praefect/mock/mock.proto \
${SOURCE_DIR}/internal/middleware/cache/testdata/stream.proto \
${SOURCE_DIR}/internal/helper/chunk/testdata/test.proto \
- ${SOURCE_DIR}/internal/middleware/limithandler/testdata/test.proto \
- ${SOURCE_DIR}/internal/streamrpc/testdata/test.proto
+ ${SOURCE_DIR}/internal/middleware/limithandler/testdata/test.proto
${PROTOC} ${SHARED_PROTOC_OPTS} -I ${SOURCE_DIR}/proto --go_out=${SOURCE_DIR}/proto --go-grpc_out=${SOURCE_DIR}/proto ${SOURCE_DIR}/proto/go/internal/linter/testdata/*.proto
.PHONY: lint-proto
diff --git a/cmd/gitaly-hooks/hooks.go b/cmd/gitaly-hooks/hooks.go
index af26438fb..9e177b03f 100644
--- a/cmd/gitaly-hooks/hooks.go
+++ b/cmd/gitaly-hooks/hooks.go
@@ -6,6 +6,7 @@ import (
"fmt"
"io"
"log"
+ "net"
"os"
"strings"
@@ -13,10 +14,12 @@ import (
gitalyauth "gitlab.com/gitlab-org/gitaly/v14/auth"
"gitlab.com/gitlab-org/gitaly/v14/client"
"gitlab.com/gitlab-org/gitaly/v14/internal/git"
+ "gitlab.com/gitlab-org/gitaly/v14/internal/git/pktline"
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/config"
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/config/prometheus"
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/hook"
"gitlab.com/gitlab-org/gitaly/v14/internal/gitlab"
+ "gitlab.com/gitlab-org/gitaly/v14/internal/helper"
"gitlab.com/gitlab-org/gitaly/v14/internal/helper/env"
gitalylog "gitlab.com/gitlab-org/gitaly/v14/internal/log"
"gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag"
@@ -339,8 +342,20 @@ func packObjectsHook(ctx context.Context, payload git.HooksPayload, hookClient g
fixedArgs = append(fixedArgs, fixFilterQuoteBug(a))
}
- if err := handlePackObjects(ctx, hookClient, payload.Repo, fixedArgs); err != nil {
- logger.Logger().WithFields(logrus.Fields{"args": args}).WithError(err).Error("PackObjectsHook RPC failed")
+ var rpc string
+ var err error
+ if featureflag.PackObjectsHookWithSidechannel.IsEnabled(helper.OutgoingToIncoming(ctx)) {
+ rpc = "PackObjectsHookWithSidechannel"
+ err = handlePackObjectsWithSidechannel(ctx, hookClient, payload.Repo, fixedArgs)
+ } else {
+ rpc = "PackObjectsHook"
+ err = handlePackObjects(ctx, hookClient, payload.Repo, fixedArgs)
+ }
+ if err != nil {
+ logger.Logger().WithFields(logrus.Fields{
+ "args": args,
+ "rpc": rpc,
+ }).WithError(err).Error("RPC failed")
return 1, nil
}
@@ -406,3 +421,49 @@ type nopExitStatus struct {
}
func (nopExitStatus) GetExitStatus() *gitalypb.ExitStatus { return nil }
+
+func handlePackObjectsWithSidechannel(ctx context.Context, hookClient gitalypb.HookServiceClient, repo *gitalypb.Repository, args []string) error {
+ ctx, wt, err := hook.SetupSidechannel(ctx, func(c *net.UnixConn) error {
+ // We don't have to worry about concurrent reads and writes and
+ // deadlocks, because we're connected to git-upload-pack which follows
+ // the sequence: (1) write to stdin of pack-objects, (2) close stdin of
+ // pack-objects, (3) concurrently read from stdout and stderr of
+ // pack-objects.
+ if _, err := io.Copy(c, os.Stdin); err != nil {
+ return fmt.Errorf("copy stdin: %w", err)
+ }
+ if err := c.CloseWrite(); err != nil {
+ return fmt.Errorf("close write: %w", err)
+ }
+
+ if err := pktline.EachSidebandPacket(c, func(band byte, data []byte) error {
+ var err error
+ switch band {
+ case 1:
+ _, err = os.Stdout.Write(data)
+ case 2:
+ _, err = os.Stderr.Write(data)
+ default:
+ err = fmt.Errorf("unexpected side band: %d", band)
+ }
+ return err
+ }); err != nil {
+ return fmt.Errorf("demux response: %w", err)
+ }
+
+ return nil
+ })
+ if err != nil {
+ return fmt.Errorf("SetupSidechannel: %w", err)
+ }
+ defer wt.Close()
+
+ if _, err := hookClient.PackObjectsHookWithSidechannel(
+ ctx,
+ &gitalypb.PackObjectsHookWithSidechannelRequest{Repository: repo, Args: args},
+ ); err != nil {
+ return fmt.Errorf("call PackObjectsHookWithSidechannel: %w", err)
+ }
+
+ return wt.Wait()
+}
diff --git a/cmd/gitaly-hooks/hooks_test.go b/cmd/gitaly-hooks/hooks_test.go
index 1218b6017..60f24f227 100644
--- a/cmd/gitaly-hooks/hooks_test.go
+++ b/cmd/gitaly-hooks/hooks_test.go
@@ -14,6 +14,7 @@ import (
"strings"
"testing"
+ "github.com/sirupsen/logrus/hooks/test"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"gitlab.com/gitlab-org/gitaly/v14/internal/command"
@@ -48,19 +49,19 @@ type proxyValues struct {
var enabledFeatureFlag = featureflag.FeatureFlag{Name: "enabled-feature-flag", OnByDefault: false}
var disabledFeatureFlag = featureflag.FeatureFlag{Name: "disabled-feature-flag", OnByDefault: true}
-func rawFeatureFlags() featureflag.Raw {
- ctx := featureflag.IncomingCtxWithFeatureFlag(context.Background(), enabledFeatureFlag)
+func rawFeatureFlags(ctx context.Context) featureflag.Raw {
+ ctx = featureflag.IncomingCtxWithFeatureFlag(ctx, enabledFeatureFlag)
ctx = featureflag.IncomingCtxWithDisabledFeatureFlag(ctx, disabledFeatureFlag)
return featureflag.RawFromContext(ctx)
}
// envForHooks generates a set of environment variables for gitaly hooks
-func envForHooks(t testing.TB, cfg config.Cfg, repo *gitalypb.Repository, glHookValues glHookValues, proxyValues proxyValues, gitPushOptions ...string) []string {
+func envForHooks(t testing.TB, ctx context.Context, cfg config.Cfg, repo *gitalypb.Repository, glHookValues glHookValues, proxyValues proxyValues, gitPushOptions ...string) []string {
payload, err := git.NewHooksPayload(cfg, repo, nil, &git.ReceiveHooksPayload{
UserID: glHookValues.GLID,
Username: glHookValues.GLUsername,
Protocol: glHookValues.GLProtocol,
- }, git.AllHooks, rawFeatureFlags()).Env()
+ }, git.AllHooks, rawFeatureFlags(ctx)).Env()
require.NoError(t, err)
env := append(os.Environ(), []string{
@@ -190,6 +191,7 @@ func testHooksPrePostReceive(t *testing.T, cfg config.Cfg, repo *gitalypb.Reposi
cmd.Stdin = stdin
cmd.Env = envForHooks(
t,
+ context.Background(),
cfg,
repo,
glHookValues{
@@ -280,7 +282,7 @@ func testHooksUpdate(t *testing.T, cfg config.Cfg, glValues glHookValues) {
updateHookPath, err := filepath.Abs("../../ruby/git-hooks/update")
require.NoError(t, err)
cmd := exec.Command(updateHookPath, refval, oldval, newval)
- cmd.Env = envForHooks(t, cfg, repo, glValues, proxyValues{})
+ cmd.Env = envForHooks(t, context.Background(), cfg, repo, glValues, proxyValues{})
cmd.Dir = repoPath
tempDir := testhelper.TempDir(t)
@@ -415,11 +417,11 @@ func TestHooksPostReceiveFailed(t *testing.T) {
Protocol: glProtocol,
},
git.PostReceiveHook,
- rawFeatureFlags(),
+ rawFeatureFlags(context.Background()),
).Env()
require.NoError(t, err)
- env := envForHooks(t, cfg, repo, glHookValues{}, proxyValues{})
+ env := envForHooks(t, context.Background(), cfg, repo, glHookValues{}, proxyValues{})
env = append(env, hooksPayload)
cmd := exec.Command(postReceiveHookPath)
@@ -479,7 +481,7 @@ func TestHooksNotAllowed(t *testing.T) {
cmd.Stderr = &stderr
cmd.Stdout = &stdout
cmd.Stdin = strings.NewReader(changes)
- cmd.Env = envForHooks(t, cfg, repo,
+ cmd.Env = envForHooks(t, context.Background(), cfg, repo,
glHookValues{
GLID: glID,
GLUsername: glUsername,
@@ -577,8 +579,8 @@ func TestCheckBadCreds(t *testing.T) {
require.Regexp(t, `Checking GitLab API access: .* level=error msg="Internal API error" .* error="authorization failed" method=GET status=401 url="http://127.0.0.1:[0-9]+/api/v4/internal/check"\nFAIL`, stdout.String())
}
-func runHookServiceServer(t *testing.T, cfg config.Cfg) {
- runHookServiceWithGitlabClient(t, cfg, gitlab.NewMockClient())
+func runHookServiceServer(t *testing.T, cfg config.Cfg, serverOpts ...testserver.GitalyServerOpt) {
+ runHookServiceWithGitlabClient(t, cfg, gitlab.NewMockClient(), serverOpts...)
}
type featureFlagAsserter struct {
@@ -617,12 +619,17 @@ func (svc featureFlagAsserter) PackObjectsHook(stream gitalypb.HookService_PackO
return svc.wrapped.PackObjectsHook(stream)
}
-func runHookServiceWithGitlabClient(t *testing.T, cfg config.Cfg, gitlabClient gitlab.Client) {
+func (svc featureFlagAsserter) PackObjectsHookWithSidechannel(ctx context.Context, req *gitalypb.PackObjectsHookWithSidechannelRequest) (*gitalypb.PackObjectsHookWithSidechannelResponse, error) {
+ svc.assertFlags(ctx)
+ return svc.wrapped.PackObjectsHookWithSidechannel(ctx, req)
+}
+
+func runHookServiceWithGitlabClient(t *testing.T, cfg config.Cfg, gitlabClient gitlab.Client, serverOpts ...testserver.GitalyServerOpt) {
testserver.RunGitalyServer(t, cfg, nil, func(srv *grpc.Server, deps *service.Dependencies) {
gitalypb.RegisterHookServiceServer(srv, featureFlagAsserter{
t: t, wrapped: hook.NewServer(deps.GetCfg(), deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache()),
})
- }, testserver.WithGitLabClient(gitlabClient))
+ }, append(serverOpts, testserver.WithGitLabClient(gitlabClient))...)
}
func requireContainsOnce(t *testing.T, s string, contains string) {
@@ -661,8 +668,6 @@ func TestGitalyHooksPackObjects(t *testing.T) {
testhelper.BuildGitalyHooks(t, cfg)
testhelper.BuildGitalySSH(t, cfg)
- env := envForHooks(t, cfg, repo, glHookValues{}, proxyValues{})
-
baseArgs := []string{
cfg.Git.BinPath,
"clone",
@@ -675,26 +680,48 @@ func TestGitalyHooksPackObjects(t *testing.T) {
testCases := []struct {
desc string
+ ctx context.Context
extraArgs []string
+ method string
}{
- {desc: "regular clone"},
- {desc: "shallow clone", extraArgs: []string{"--depth=1"}},
- {desc: "partial clone", extraArgs: []string{"--filter=blob:none"}},
+ {desc: "regular clone", method: "PackObjectsHook"},
+ {desc: "shallow clone", extraArgs: []string{"--depth=1"}, method: "PackObjectsHook"},
+ {desc: "partial clone", extraArgs: []string{"--filter=blob:none"}, method: "PackObjectsHook"},
+ {
+ desc: "regular clone PackObjectsHookWithSidechannel",
+ ctx: featureflag.IncomingCtxWithFeatureFlag(context.Background(), featureflag.PackObjectsHookWithSidechannel),
+ method: "PackObjectsHookWithSidechannel",
+ },
}
for _, tc := range testCases {
t.Run(tc.desc, func(t *testing.T) {
- runHookServiceServer(t, cfg)
+ ctx := context.Background()
+ if tc.ctx != nil {
+ ctx = tc.ctx
+ }
+
+ logger, hook := test.NewNullLogger()
+ runHookServiceServer(t, cfg, testserver.WithLogger(logger))
tempDir := testhelper.TempDir(t)
args := append(baseArgs[1:], tc.extraArgs...)
args = append(args, repoPath, tempDir)
cmd := exec.Command(baseArgs[0], args...)
- cmd.Env = env
+ cmd.Env = envForHooks(t, ctx, cfg, repo, glHookValues{}, proxyValues{})
cmd.Stderr = os.Stderr
require.NoError(t, cmd.Run())
+
+ foundMethod := false
+ for _, e := range hook.AllEntries() {
+ if e.Data["grpc.service"] == "gitaly.HookService" {
+ require.Equal(t, tc.method, e.Data["grpc.method"])
+ foundMethod = true
+ }
+ }
+ require.True(t, foundMethod)
})
}
}
diff --git a/doc/README.md b/doc/README.md
index fd96df56a..96fffbad1 100644
--- a/doc/README.md
+++ b/doc/README.md
@@ -38,7 +38,6 @@ For configuration please read [praefects configuration documentation](doc/config
- [Tips for reading Git source code](reading_git_source.md)
- [Serverside Git Usage](serverside_git_usage.md)
- [Object Pools](object_pools.md)
-- [StreamRPC](stream_rpc.md)
#### RFCs
diff --git a/doc/stream_rpc.md b/doc/stream_rpc.md
deleted file mode 100644
index f78c6723f..000000000
--- a/doc/stream_rpc.md
+++ /dev/null
@@ -1,101 +0,0 @@
-# StreamRPC
-
-StreamRPC is a remote procedure call (RPC) protocol implemented by
-Gitaly. It is used for RPC's that transfer a high volume of byte stream
-data, such as the server side of `git fetch`.
-
-For background on why we created StreamRPC, see
-https://gitlab.com/groups/gitlab-com/gl-infra/-/epics/463.
-
-## Design goals
-
-1. Give RPC handlers direct access to the underlying network socket or
-TLS stream
-1. Interoperate with existing Gitaly gRPC middlewares (logging,
-authentication, metrics etc.)
-1. Allow for efficient proxying in Praefect
-
-## Semantics
-
-A StreamRPC call has two phases: the handshake phase and the stream
-phase. The structure of the handshake phase is described by the
-StreamRPC protocol. The stream phase has no inherent structure as far
-as StreamRPC is concerned; it is up to the RPC client and RPC handler
-what they do with the stream.
-
-The handshake phase consists of two steps:
-
-1. Client sends request
-1. Server sends response
-
-To allow for a clean transition from the handshake phase to the stream
-phase, the handshake phase uses frames with length prefixes. Length
-prefixes make it possible to implement the handshake without buffered
-IO. When the transition to the stream phase happens, we do not have to
-hand over buffered data.
-
-All length prefixes in the handshake phase are big-endian uint32
-values (4 bytes). Length prefixes do not include the length of the
-prefix itself, so a blob `foobar` would be encoded as
-`\x00\x00\x00\x06foobar`.
-
-### Request
-
-The request consists of a length prefix and a JSON object.
-
-The JSON object has three fields:
-
-1. `Method` (`string`): this is a gRPC style method name, including the
-gRPC service name.
-1. `Metadata` (`map[string][]string`): this contains gRPC metadata, which
-can be compared to HTTP headers. It is used for authentication,
-correlation ID's, etc.
-1. `Message` (`string`): this field contains a base64-encoded (RFC 4648)
-Protobuf message. This is here because Praefect, and some of our
-middlewares, try to inspect the first request of each RPC to see what
-repository etc. it targets. By having this request as part of the
-protocol, we can support Praefect and gRPC middlewares in a natural
-way.
-
-### Response
-
-The response is a length-prefixed empty string OR a JSON object.
-
-The server accepts the request and transitions to the stream phase if
-and only if the frame is empty. That is, the accepting response is
-`\x00\x00\x00\x00`.
-
-In case of a rejection, the server returns a JSON object with an error
-message in the `Error` field.
-
-If the server rejects the request it will close the connection.
-
-## Relation to gRPC
-
-StreamRPC is designed to be embedded into a gRPC service (Gitaly).
-StreamRPC RPC's are defined using Protobuf just like regular Gitaly
-gRPC RPC's. From the point of view of gRPC middleware, StreamRPC RPC's
-are unary methods which return an empty response message.
-
-```protobuf
-import "google/protobuf/empty.proto";
-
-service ExampleService {
- rpc ExampleStream(ExampleStreamRequest) returns (google.protobuf.Empty) {
- option (op_type) = {
- op: ACCESSOR
- };
- }
-}
-
-message ExampleStreamRequest {
- Repository repository = 1 [(target_repository)=true];
-}
-```
-
-The server handler may return an error after the stream phase, which
-will be logged on the server, but this error cannot be transmitted to
-the client. This is because the stream phase lasts until the
-connection is closed. There is no way for the server to transmit the
-error "after the stream phase", because the connection is then already
-closed.
diff --git a/internal/gitaly/hook/sidechannel.go b/internal/gitaly/hook/sidechannel.go
new file mode 100644
index 000000000..18381237c
--- /dev/null
+++ b/internal/gitaly/hook/sidechannel.go
@@ -0,0 +1,109 @@
+package hook
+
+import (
+ "context"
+ "fmt"
+ "io/ioutil"
+ "net"
+ "os"
+ "path"
+ "time"
+
+ gitaly_metadata "gitlab.com/gitlab-org/gitaly/v14/internal/metadata"
+ "google.golang.org/grpc/metadata"
+)
+
+const (
+ sidechannelHeader = "gitaly-sidechannel-socket"
+ sidechannelSocket = "sidechannel"
+)
+
+type errInvalidSidechannelAddress struct{ string }
+
+func (e *errInvalidSidechannelAddress) Error() string {
+ return fmt.Sprintf("invalid side channel address: %q", e.string)
+}
+
+// GetSidechannel looks for a sidechannel address in an incoming context
+// and establishes a connection if it finds an address.
+func GetSidechannel(ctx context.Context) (net.Conn, error) {
+ address := gitaly_metadata.GetValue(ctx, sidechannelHeader)
+ if path.Base(address) != sidechannelSocket {
+ return nil, &errInvalidSidechannelAddress{address}
+ }
+
+ return net.DialTimeout("unix", address, time.Second)
+}
+
+// SetupSidechannel creates a sidechannel listener in a tempdir and
+// launches a goroutine that will run the callback if the listener
+// receives a connection. The address of the listener is stored in the
+// returned context, so that the caller can propagate it to a server. The
+// caller must Close the SidechannelWaiter to prevent resource leaks.
+func SetupSidechannel(ctx context.Context, callback func(*net.UnixConn) error) (context.Context, *SidechannelWaiter, error) {
+ socketDir, err := ioutil.TempDir("", "gitaly")
+ if err != nil {
+ return nil, nil, err
+ }
+
+ address := path.Join(socketDir, sidechannelSocket)
+ l, err := net.ListenUnix("unix", &net.UnixAddr{Net: "unix", Name: address})
+ if err != nil {
+ return nil, nil, err
+ }
+
+ wt := &SidechannelWaiter{
+ errC: make(chan error),
+ socketDir: socketDir,
+ listener: l,
+ }
+ go wt.run(callback)
+
+ ctx = metadata.AppendToOutgoingContext(ctx, sidechannelHeader, address)
+ return ctx, wt, nil
+}
+
+// SidechannelWaiter provides cleanup and error propagation for a
+// sidechannel callback.
+type SidechannelWaiter struct {
+ errC chan error
+ socketDir string
+ listener *net.UnixListener
+}
+
+func (wt *SidechannelWaiter) run(callback func(*net.UnixConn) error) {
+ defer close(wt.errC)
+
+ wt.errC <- func() error {
+ c, err := wt.listener.AcceptUnix()
+ if err != nil {
+ return err
+ }
+ defer c.Close()
+
+ return callback(c)
+ }()
+}
+
+// Close cleans up sidechannel resources. If the callback is already
+// running, Close will block until the callback is done.
+func (wt *SidechannelWaiter) Close() error {
+ // Run all cleanup actions _before_ checking errors, so that we cannot
+ // forget one.
+ cleanupErrors := []error{
+ wt.listener.Close(),
+ os.RemoveAll(wt.socketDir),
+ wt.Wait(),
+ }
+
+ for _, err := range cleanupErrors {
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+// Wait waits for the callback to run and returns its error value.
+func (wt *SidechannelWaiter) Wait() error { return <-wt.errC }
diff --git a/internal/gitaly/hook/sidechannel_test.go b/internal/gitaly/hook/sidechannel_test.go
new file mode 100644
index 000000000..36dbf326e
--- /dev/null
+++ b/internal/gitaly/hook/sidechannel_test.go
@@ -0,0 +1,60 @@
+package hook
+
+import (
+ "context"
+ "io"
+ "io/ioutil"
+ "net"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ "gitlab.com/gitlab-org/gitaly/v14/internal/helper"
+ "google.golang.org/grpc/metadata"
+)
+
+func TestSidechannel(t *testing.T) {
+ // Client side
+ ctxOut, wt, err := SetupSidechannel(
+ context.Background(),
+ func(c *net.UnixConn) error {
+ _, err := io.WriteString(c, "ping")
+ return err
+ },
+ )
+ require.NoError(t, err)
+ defer wt.Close()
+
+ // Server side
+ ctxIn := helper.OutgoingToIncoming(ctxOut)
+ c, err := GetSidechannel(ctxIn)
+ require.NoError(t, err)
+ defer c.Close()
+
+ buf, err := ioutil.ReadAll(c)
+ require.NoError(t, err)
+ require.Equal(t, "ping", string(buf))
+
+ // Client side
+ require.NoError(t, wt.Wait())
+}
+
+func TestGetSidechannel(t *testing.T) {
+ testCases := []string{
+ "foobar",
+ "sc.foo/../../bar",
+ "foo/../../bar",
+ "/etc/passwd",
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc, func(t *testing.T) {
+ ctx := metadata.NewIncomingContext(
+ context.Background(),
+ map[string][]string{sidechannelHeader: []string{tc}},
+ )
+ _, err := GetSidechannel(ctx)
+ require.Error(t, err)
+ require.Equal(t, &errInvalidSidechannelAddress{tc}, err)
+ })
+ }
+}
diff --git a/internal/gitaly/hook/testdata/.gitkeep b/internal/gitaly/hook/testdata/.gitkeep
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/internal/gitaly/hook/testdata/.gitkeep
diff --git a/internal/gitaly/service/blob/blobs.go b/internal/gitaly/service/blob/blobs.go
index 3e6b434dd..cb6dcfc53 100644
--- a/internal/gitaly/service/blob/blobs.go
+++ b/internal/gitaly/service/blob/blobs.go
@@ -76,11 +76,16 @@ func (s *server) ListBlobs(req *gitalypb.ListBlobsRequest, stream gitalypb.BlobS
})
if err := processBlobs(ctx, catfileProcess, catfileInfoIter, req.GetLimit(), req.GetBytesLimit(),
- func(oid string, size int64, contents []byte) error {
+ func(oid string, size int64, contents []byte, path []byte) error {
+ if !req.GetWithPaths() {
+ path = nil
+ }
+
return chunker.Send(&gitalypb.ListBlobsResponse_Blob{
Oid: oid,
Size: size,
Data: contents,
+ Path: path,
})
},
); err != nil {
@@ -100,7 +105,7 @@ func processBlobs(
catfileInfoIter gitpipe.CatfileInfoIterator,
blobsLimit uint32,
bytesLimit int64,
- callback func(oid string, size int64, contents []byte) error,
+ callback func(oid string, size int64, contents []byte, path []byte) error,
) error {
// If we have a zero bytes limit, then the caller didn't request any blob contents at all.
// We can thus skip reading blob contents completely.
@@ -109,7 +114,12 @@ func processBlobs(
for catfileInfoIter.Next() {
blob := catfileInfoIter.Result()
- if err := callback(blob.ObjectInfo.Oid.String(), blob.ObjectInfo.Size, nil); err != nil {
+ if err := callback(
+ blob.ObjectInfo.Oid.String(),
+ blob.ObjectInfo.Size,
+ nil,
+ blob.ObjectName,
+ ); err != nil {
return helper.ErrInternal(fmt.Errorf("sending blob chunk: %w", err))
}
@@ -140,7 +150,7 @@ func processBlobs(
headerSent = true
}
- if err := callback(oid, size, p); err != nil {
+ if err := callback(oid, size, p, blob.ObjectName); err != nil {
return helper.ErrInternal(fmt.Errorf("sending blob chunk: %w", err))
}
@@ -168,7 +178,12 @@ func processBlobs(
// itself didn't contain any data. Let's be prepared and send out the blob
// header manually in that case.
if !headerSent {
- if err := callback(blob.ObjectInfo.Oid.String(), blob.ObjectInfo.Size, nil); err != nil {
+ if err := callback(
+ blob.ObjectInfo.Oid.String(),
+ blob.ObjectInfo.Size,
+ nil,
+ blob.ObjectName,
+ ); err != nil {
return helper.ErrInternal(fmt.Errorf("sending blob chunk: %w", err))
}
}
@@ -234,7 +249,7 @@ func (s *server) ListAllBlobs(req *gitalypb.ListAllBlobsRequest, stream gitalypb
})
if err := processBlobs(ctx, catfileProcess, catfileInfoIter, req.GetLimit(), req.GetBytesLimit(),
- func(oid string, size int64, contents []byte) error {
+ func(oid string, size int64, contents []byte, path []byte) error {
return chunker.Send(&gitalypb.ListAllBlobsResponse_Blob{
Oid: oid,
Size: size,
diff --git a/internal/gitaly/service/blob/blobs_test.go b/internal/gitaly/service/blob/blobs_test.go
index 36118f6fd..5100564a5 100644
--- a/internal/gitaly/service/blob/blobs_test.go
+++ b/internal/gitaly/service/blob/blobs_test.go
@@ -50,6 +50,7 @@ func TestListBlobs(t *testing.T) {
revisions []string
limit uint32
bytesLimit int64
+ withPaths bool
expectedErr error
expectedBlobs []*gitalypb.ListBlobsResponse_Blob
}{
@@ -75,6 +76,18 @@ func TestListBlobs(t *testing.T) {
},
},
{
+ desc: "single blob with paths",
+ revisions: []string{
+ lfsPointer1,
+ },
+ withPaths: true,
+ // When iterating blobs directly, we cannot deduce a path and thus don't get
+ // any as response.
+ expectedBlobs: []*gitalypb.ListBlobsResponse_Blob{
+ {Oid: lfsPointer1, Size: lfsPointers[lfsPointer1].Size},
+ },
+ },
+ {
desc: "multiple blobs",
revisions: []string{
lfsPointer1,
@@ -97,6 +110,16 @@ func TestListBlobs(t *testing.T) {
},
},
{
+ desc: "tree with paths",
+ revisions: []string{
+ "b95c0fad32f4361845f91d9ce4c1721b52b82793",
+ },
+ withPaths: true,
+ expectedBlobs: []*gitalypb.ListBlobsResponse_Blob{
+ {Oid: "93e123ac8a3e6a0b600953d7598af629dec7b735", Size: 59, Path: []byte("branch-test.txt")},
+ },
+ },
+ {
desc: "revision range",
revisions: []string{
"master",
@@ -127,6 +150,18 @@ func TestListBlobs(t *testing.T) {
},
},
{
+ desc: "revision with limit and path",
+ revisions: []string{
+ "master",
+ },
+ limit: 2,
+ withPaths: true,
+ expectedBlobs: []*gitalypb.ListBlobsResponse_Blob{
+ {Oid: gitattributesOID, Size: gitattributesSize, Path: []byte(".gitattributes")},
+ {Oid: gitignoreOID, Size: gitignoreSize, Path: []byte(".gitignore")},
+ },
+ },
+ {
desc: "revision with limit and bytes limit",
revisions: []string{
"master",
@@ -225,6 +260,7 @@ func TestListBlobs(t *testing.T) {
Revisions: tc.revisions,
Limit: tc.limit,
BytesLimit: tc.bytesLimit,
+ WithPaths: tc.withPaths,
})
require.NoError(t, err)
diff --git a/internal/gitaly/service/conflicts/resolve_conflicts.go b/internal/gitaly/service/conflicts/resolve_conflicts.go
index 267a3116c..ecc6ae983 100644
--- a/internal/gitaly/service/conflicts/resolve_conflicts.go
+++ b/internal/gitaly/service/conflicts/resolve_conflicts.go
@@ -20,7 +20,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/git/repository"
"gitlab.com/gitlab-org/gitaly/v14/internal/git2go"
"gitlab.com/gitlab-org/gitaly/v14/internal/helper"
- "gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
@@ -145,19 +144,11 @@ func (s *server) resolveConflicts(header *gitalypb.ResolveConflictsRequestHeader
return err
}
- var quarantineRepo *localrepo.Repo
- var quarantineDir *quarantine.Dir
- if featureflag.QuarantinedResolveConflicts.IsEnabled(ctx) {
- var err error
- quarantineDir, err = quarantine.New(ctx, header.GetRepository(), s.locator)
- if err != nil {
- return helper.ErrInternalf("creating object quarantine: %w", err)
- }
-
- quarantineRepo = s.localrepo(quarantineDir.QuarantinedRepo())
- } else {
- quarantineRepo = s.localrepo(header.GetRepository())
+ quarantineDir, err := quarantine.New(ctx, header.GetRepository(), s.locator)
+ if err != nil {
+ return helper.ErrInternalf("creating object quarantine: %w", err)
}
+ quarantineRepo := s.localrepo(quarantineDir.QuarantinedRepo())
if err := s.repoWithBranchCommit(ctx,
quarantineRepo,
diff --git a/internal/gitaly/service/hook/pack_objects.go b/internal/gitaly/service/hook/pack_objects.go
index 7d6cedb05..3272c0eea 100644
--- a/internal/gitaly/service/hook/pack_objects.go
+++ b/internal/gitaly/service/hook/pack_objects.go
@@ -19,10 +19,12 @@ import (
"github.com/sirupsen/logrus"
"gitlab.com/gitlab-org/gitaly/v14/internal/git"
"gitlab.com/gitlab-org/gitaly/v14/internal/git/pktline"
+ "gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/hook"
"gitlab.com/gitlab-org/gitaly/v14/internal/helper"
"gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
"gitlab.com/gitlab-org/gitaly/v14/streamio"
"google.golang.org/protobuf/encoding/protojson"
+ "google.golang.org/protobuf/proto"
)
var (
@@ -41,10 +43,6 @@ var (
)
func (s *server) PackObjectsHook(stream gitalypb.HookService_PackObjectsHookServer) error {
- if s.packObjectsCache == nil {
- return helper.ErrInternalf("packObjectsCache is not available")
- }
-
firstRequest, err := stream.Recv()
if err != nil {
return helper.ErrInternal(err)
@@ -59,7 +57,32 @@ func (s *server) PackObjectsHook(stream gitalypb.HookService_PackObjectsHookServ
return helper.ErrInvalidArgumentf("invalid pack-objects command: %v: %w", firstRequest.Args, err)
}
- if err := s.packObjectsHook(stream, firstRequest, args); err != nil {
+ stdin := streamio.NewReader(func() ([]byte, error) {
+ resp, err := stream.Recv()
+ return resp.GetStdin(), err
+ })
+
+ output := func(r io.Reader) (int64, error) {
+ var n int64
+ err := pktline.EachSidebandPacket(r, func(band byte, data []byte) error {
+ resp := &gitalypb.PackObjectsHookResponse{}
+
+ switch band {
+ case bandStdout:
+ resp.Stdout = data
+ case bandStderr:
+ resp.Stderr = data
+ default:
+ return fmt.Errorf("invalid side band: %d", band)
+ }
+
+ n += int64(len(data))
+ return stream.Send(resp)
+ })
+ return n, err
+ }
+
+ if err := s.packObjectsHook(stream.Context(), firstRequest.Repository, firstRequest, args, stdin, output); err != nil {
return helper.ErrInternal(err)
}
@@ -71,10 +94,8 @@ const (
bandStderr = 2
)
-func (s *server) packObjectsHook(stream gitalypb.HookService_PackObjectsHookServer, firstRequest *gitalypb.PackObjectsHookRequest, args *packObjectsArgs) error {
- ctx := stream.Context()
-
- data, err := protojson.Marshal(firstRequest)
+func (s *server) packObjectsHook(ctx context.Context, repo *gitalypb.Repository, reqHash proto.Message, args *packObjectsArgs, stdinReader io.Reader, output func(io.Reader) (int64, error)) error {
+ data, err := protojson.Marshal(reqHash)
if err != nil {
return err
}
@@ -84,7 +105,7 @@ func (s *server) packObjectsHook(stream gitalypb.HookService_PackObjectsHookServ
return err
}
- stdin, err := bufferStdin(stream, h)
+ stdin, err := bufferStdin(stdinReader, h)
if err != nil {
return err
}
@@ -104,7 +125,7 @@ func (s *server) packObjectsHook(stream gitalypb.HookService_PackObjectsHookServ
key := hex.EncodeToString(h.Sum(nil))
r, created, err := s.packObjectsCache.FindOrCreate(key, func(w io.Writer) error {
- return s.runPackObjects(ctx, w, firstRequest.Repository, args, stdin, key)
+ return s.runPackObjects(ctx, w, repo, args, stdin, key)
})
if err != nil {
return err
@@ -127,21 +148,8 @@ func (s *server) packObjectsHook(stream gitalypb.HookService_PackObjectsHookServ
packObjectsServedBytes.Add(float64(servedBytes))
}()
- if err := pktline.EachSidebandPacket(r, func(band byte, data []byte) error {
- resp := &gitalypb.PackObjectsHookResponse{}
-
- switch band {
- case bandStdout:
- resp.Stdout = data
- case bandStderr:
- resp.Stderr = data
- default:
- return fmt.Errorf("invalid side band: %d", band)
- }
-
- servedBytes += int64(len(data))
- return stream.Send(resp)
- }); err != nil {
+ servedBytes, err = output(r)
+ if err != nil {
return err
}
@@ -298,7 +306,7 @@ func (p *packObjectsArgs) subcmd() git.SubCmd {
return sc
}
-func bufferStdin(stream gitalypb.HookService_PackObjectsHookServer, h hash.Hash) (_ io.ReadCloser, err error) {
+func bufferStdin(r io.Reader, h hash.Hash) (_ io.ReadCloser, err error) {
f, err := ioutil.TempFile("", "PackObjectsHook-stdin")
if err != nil {
return nil, err
@@ -313,15 +321,7 @@ func bufferStdin(stream gitalypb.HookService_PackObjectsHookServer, h hash.Hash)
return nil, err
}
- stdin := io.TeeReader(
- streamio.NewReader(func() ([]byte, error) {
- resp, err := stream.Recv()
- return resp.GetStdin(), err
- }),
- h,
- )
-
- _, err = io.Copy(f, stdin)
+ _, err = io.Copy(f, io.TeeReader(r, h))
if err != nil {
return nil, err
}
@@ -343,3 +343,31 @@ func (cw *countingWriter) Write(p []byte) (int, error) {
cw.N += int64(n)
return n, err
}
+
+func (s *server) PackObjectsHookWithSidechannel(ctx context.Context, req *gitalypb.PackObjectsHookWithSidechannelRequest) (*gitalypb.PackObjectsHookWithSidechannelResponse, error) {
+ if req.GetRepository() == nil {
+ return nil, helper.ErrInvalidArgument(errors.New("repository is empty"))
+ }
+
+ args, err := parsePackObjectsArgs(req.Args)
+ if err != nil {
+ return nil, helper.ErrInvalidArgumentf("invalid pack-objects command: %v: %w", req.Args, err)
+ }
+
+ c, err := hook.GetSidechannel(ctx)
+ if err != nil {
+ return nil, err
+ }
+ defer c.Close()
+
+ output := func(r io.Reader) (int64, error) { return io.Copy(c, r) }
+ if err := s.packObjectsHook(ctx, req.Repository, req, args, c, output); err != nil {
+ return nil, err
+ }
+
+ if err := c.Close(); err != nil {
+ return nil, err
+ }
+
+ return &gitalypb.PackObjectsHookWithSidechannelResponse{}, nil
+}
diff --git a/internal/gitaly/service/hook/pack_objects_test.go b/internal/gitaly/service/hook/pack_objects_test.go
index a10f1466e..b7587e086 100644
--- a/internal/gitaly/service/hook/pack_objects_test.go
+++ b/internal/gitaly/service/hook/pack_objects_test.go
@@ -4,6 +4,7 @@ import (
"bytes"
"context"
"io"
+ "net"
"strings"
"testing"
"time"
@@ -12,7 +13,9 @@ import (
"github.com/sirupsen/logrus/hooks/test"
"github.com/stretchr/testify/require"
"gitlab.com/gitlab-org/gitaly/v14/internal/git/gittest"
+ "gitlab.com/gitlab-org/gitaly/v14/internal/git/pktline"
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/config"
+ hookPkg "gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/hook"
"gitlab.com/gitlab-org/gitaly/v14/internal/streamcache"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper/testcfg"
@@ -303,3 +306,152 @@ func TestServer_PackObjectsHook_usesCache(t *testing.T) {
require.NoError(t, entries[i].Err)
}
}
+
+func TestServer_PackObjectsHookWithSidechannel(t *testing.T) {
+ cfg, repo, repoPath := cfgWithCache(t)
+
+ testCases := []struct {
+ desc string
+ stdin string
+ args []string
+ }{
+ {
+ desc: "clone 1 branch",
+ stdin: "3dd08961455abf80ef9115f4afdc1c6f968b503c\n--not\n\n",
+ args: []string{"pack-objects", "--revs", "--thin", "--stdout", "--progress", "--delta-base-offset"},
+ },
+ {
+ desc: "shallow clone 1 branch",
+ stdin: "--shallow 1e292f8fedd741b75372e19097c76d327140c312\n1e292f8fedd741b75372e19097c76d327140c312\n--not\n\n",
+ args: []string{"--shallow-file", "", "pack-objects", "--revs", "--thin", "--stdout", "--shallow", "--progress", "--delta-base-offset", "--include-tag"},
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.desc, func(t *testing.T) {
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+
+ logger, hook := test.NewNullLogger()
+ serverSocketPath := runHooksServer(t, cfg, nil, testserver.WithLogger(logger))
+
+ var packets []string
+ ctx, wt, err := hookPkg.SetupSidechannel(
+ ctx,
+ func(c *net.UnixConn) error {
+ if _, err := io.WriteString(c, tc.stdin); err != nil {
+ return err
+ }
+ if err := c.CloseWrite(); err != nil {
+ return err
+ }
+
+ scanner := pktline.NewScanner(c)
+ for scanner.Scan() {
+ packets = append(packets, scanner.Text())
+ }
+ return scanner.Err()
+ },
+ )
+ require.NoError(t, err)
+ defer wt.Close()
+
+ client, conn := newHooksClient(t, serverSocketPath)
+ defer conn.Close()
+
+ _, err = client.PackObjectsHookWithSidechannel(ctx, &gitalypb.PackObjectsHookWithSidechannelRequest{
+ Repository: repo,
+ Args: tc.args,
+ })
+ require.NoError(t, err)
+
+ require.NoError(t, wt.Wait())
+ require.NotEmpty(t, packets)
+
+ var packdata []byte
+ for _, pkt := range packets {
+ require.Greater(t, len(pkt), 4)
+
+ switch band := pkt[4]; band {
+ case 1:
+ packdata = append(packdata, pkt[5:]...)
+ case 2:
+ default:
+ t.Fatalf("unexpected band: %d", band)
+ }
+ }
+
+ gittest.ExecStream(
+ t,
+ cfg,
+ bytes.NewReader(packdata),
+ "-C", repoPath, "index-pack", "--stdin", "--fix-thin",
+ )
+
+ for _, msg := range []string{"served bytes", "generated bytes"} {
+ t.Run(msg, func(t *testing.T) {
+ var entry *logrus.Entry
+ for _, e := range hook.AllEntries() {
+ if e.Message == msg {
+ entry = e
+ }
+ }
+
+ require.NotNil(t, entry)
+ require.NotEmpty(t, entry.Data["cache_key"])
+ require.Greater(t, entry.Data["bytes"], int64(0))
+ })
+ }
+
+ t.Run("pack file compression statistic", func(t *testing.T) {
+ var entry *logrus.Entry
+ for _, e := range hook.AllEntries() {
+ if e.Message == "pack file compression statistic" {
+ entry = e
+ }
+ }
+
+ require.NotNil(t, entry)
+ total := entry.Data["pack.stat"].(string)
+ require.True(t, strings.HasPrefix(total, "Total "))
+ require.False(t, strings.Contains(total, "\n"))
+ })
+ })
+ }
+}
+
+func TestServer_PackObjectsHookWithSidechannel_invalidArgument(t *testing.T) {
+ cfg, repo, _ := testcfg.BuildWithRepo(t)
+ serverSocketPath := runHooksServer(t, cfg, nil)
+
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+
+ testCases := []struct {
+ desc string
+ req *gitalypb.PackObjectsHookWithSidechannelRequest
+ }{
+ {
+ desc: "empty",
+ req: &gitalypb.PackObjectsHookWithSidechannelRequest{},
+ },
+ {
+ desc: "repo, no args",
+ req: &gitalypb.PackObjectsHookWithSidechannelRequest{Repository: repo},
+ },
+ {
+ desc: "repo, bad args",
+ req: &gitalypb.PackObjectsHookWithSidechannelRequest{Repository: repo, Args: []string{"rm", "-rf"}},
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.desc, func(t *testing.T) {
+ client, conn := newHooksClient(t, serverSocketPath)
+ defer conn.Close()
+
+ _, err := client.PackObjectsHookWithSidechannel(ctx, tc.req)
+ testhelper.RequireGrpcError(t, err, codes.InvalidArgument)
+ })
+ }
+}
diff --git a/internal/gitaly/service/operations/branches.go b/internal/gitaly/service/operations/branches.go
index 2fb9a2e03..b0dacfb46 100644
--- a/internal/gitaly/service/operations/branches.go
+++ b/internal/gitaly/service/operations/branches.go
@@ -6,7 +6,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/git"
"gitlab.com/gitlab-org/gitaly/v14/internal/git/updateref"
- "gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
@@ -25,7 +24,7 @@ func (s *Server) UserCreateBranch(ctx context.Context, req *gitalypb.UserCreateB
return nil, status.Errorf(codes.InvalidArgument, "empty start point")
}
- quarantineDir, quarantineRepo, err := s.quarantinedRepo(ctx, req.GetRepository(), featureflag.Quarantine)
+ quarantineDir, quarantineRepo, err := s.quarantinedRepo(ctx, req.GetRepository())
if err != nil {
return nil, err
}
@@ -117,7 +116,7 @@ func (s *Server) UserUpdateBranch(ctx context.Context, req *gitalypb.UserUpdateB
referenceName := git.NewReferenceNameFromBranchName(string(req.BranchName))
- quarantineDir, _, err := s.quarantinedRepo(ctx, req.GetRepository(), featureflag.Quarantine)
+ quarantineDir, _, err := s.quarantinedRepo(ctx, req.GetRepository())
if err != nil {
return nil, err
}
diff --git a/internal/gitaly/service/operations/branches_test.go b/internal/gitaly/service/operations/branches_test.go
index b99235da7..19854e913 100644
--- a/internal/gitaly/service/operations/branches_test.go
+++ b/internal/gitaly/service/operations/branches_test.go
@@ -13,7 +13,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/service"
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/service/hook"
"gitlab.com/gitlab-org/gitaly/v14/internal/helper"
- "gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper/testassert"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper/testcfg"
@@ -40,12 +39,9 @@ func (s *testTransactionServer) VoteTransaction(ctx context.Context, in *gitalyp
func TestSuccessfulCreateBranchRequest(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testSuccessfulCreateBranchRequest)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testSuccessfulCreateBranchRequest(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -122,12 +118,9 @@ func testSuccessfulCreateBranchRequest(t *testing.T, ctx context.Context) {
func TestUserCreateBranchWithTransaction(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testUserCreateBranchWithTransaction)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testUserCreateBranchWithTransaction(t *testing.T, ctx context.Context) {
cfg, repo, repoPath := testcfg.BuildWithRepo(t)
transactionServer := &testTransactionServer{}
@@ -200,12 +193,9 @@ func testUserCreateBranchWithTransaction(t *testing.T, ctx context.Context) {
func TestSuccessfulGitHooksForUserCreateBranchRequest(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testSuccessfulGitHooksForUserCreateBranchRequest)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testSuccessfulGitHooksForUserCreateBranchRequest(t *testing.T, ctx context.Context) {
ctx, cfg, repo, repoPath, client := setupOperationsService(t, ctx)
branchName := "new-branch"
@@ -235,12 +225,9 @@ func testSuccessfulGitHooksForUserCreateBranchRequest(t *testing.T, ctx context.
func TestSuccessfulCreateBranchRequestWithStartPointRefPrefix(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testSuccessfulCreateBranchRequestWithStartPointRefPrefix)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testSuccessfulCreateBranchRequestWithStartPointRefPrefix(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -313,12 +300,9 @@ func testSuccessfulCreateBranchRequestWithStartPointRefPrefix(t *testing.T, ctx
func TestFailedUserCreateBranchDueToHooks(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testFailedUserCreateBranchDueToHooks)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testFailedUserCreateBranchDueToHooks(t *testing.T, ctx context.Context) {
ctx, _, repo, repoPath, client := setupOperationsService(t, ctx)
request := &gitalypb.UserCreateBranchRequest{
@@ -343,12 +327,9 @@ func testFailedUserCreateBranchDueToHooks(t *testing.T, ctx context.Context) {
func TestFailedUserCreateBranchRequest(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testFailedUserCreateBranchRequest)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testFailedUserCreateBranchRequest(t *testing.T, ctx context.Context) {
ctx, _, repo, _, client := setupOperationsService(t, ctx)
testCases := []struct {
diff --git a/internal/gitaly/service/operations/cherry_pick.go b/internal/gitaly/service/operations/cherry_pick.go
index d043f19dc..bdeaa6fd4 100644
--- a/internal/gitaly/service/operations/cherry_pick.go
+++ b/internal/gitaly/service/operations/cherry_pick.go
@@ -10,7 +10,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/git/updateref"
"gitlab.com/gitlab-org/gitaly/v14/internal/git2go"
"gitlab.com/gitlab-org/gitaly/v14/internal/helper"
- "gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
@@ -21,7 +20,7 @@ func (s *Server) UserCherryPick(ctx context.Context, req *gitalypb.UserCherryPic
return nil, status.Errorf(codes.InvalidArgument, "UserCherryPick: %v", err)
}
- quarantineDir, quarantineRepo, err := s.quarantinedRepo(ctx, req.GetRepository(), featureflag.Quarantine)
+ quarantineDir, quarantineRepo, err := s.quarantinedRepo(ctx, req.GetRepository())
if err != nil {
return nil, err
}
diff --git a/internal/gitaly/service/operations/cherry_pick_test.go b/internal/gitaly/service/operations/cherry_pick_test.go
index e86165cd0..e7e08b5d9 100644
--- a/internal/gitaly/service/operations/cherry_pick_test.go
+++ b/internal/gitaly/service/operations/cherry_pick_test.go
@@ -1,7 +1,6 @@
package operations
import (
- "context"
"fmt"
"strings"
"testing"
@@ -10,7 +9,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/git"
"gitlab.com/gitlab-org/gitaly/v14/internal/git/gittest"
"gitlab.com/gitlab-org/gitaly/v14/internal/git/localrepo"
- "gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper/testassert"
"gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
@@ -21,12 +19,9 @@ import (
func TestServer_UserCherryPick_successful(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testServerUserCherryPickSuccessful)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testServerUserCherryPickSuccessful(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -180,12 +175,9 @@ func testServerUserCherryPickSuccessful(t *testing.T, ctx context.Context) {
func TestServer_UserCherryPick_successfulGitHooks(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testServerUserCherryPickSuccessfulGitHooks)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testServerUserCherryPickSuccessfulGitHooks(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -223,12 +215,9 @@ func testServerUserCherryPickSuccessfulGitHooks(t *testing.T, ctx context.Contex
func TestServer_UserCherryPick_stableID(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testServerUserCherryPickStableID)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testServerUserCherryPickStableID(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -284,12 +273,9 @@ func testServerUserCherryPickStableID(t *testing.T, ctx context.Context) {
func TestServer_UserCherryPick_failedValidations(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testServerUserCherryPickFailedValidations)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testServerUserCherryPickFailedValidations(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, _, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -361,12 +347,9 @@ func testServerUserCherryPickFailedValidations(t *testing.T, ctx context.Context
func TestServer_UserCherryPick_failedWithPreReceiveError(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testServerUserCherryPickFailedWithPreReceiveError)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testServerUserCherryPickFailedWithPreReceiveError(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -401,12 +384,9 @@ func testServerUserCherryPickFailedWithPreReceiveError(t *testing.T, ctx context
func TestServer_UserCherryPick_failedWithCreateTreeError(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testServerUserCherryPickFailedWithCreateTreeError)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testServerUserCherryPickFailedWithCreateTreeError(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -435,12 +415,9 @@ func testServerUserCherryPickFailedWithCreateTreeError(t *testing.T, ctx context
func TestServer_UserCherryPick_failedWithCommitError(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testServerUserCherryPickFailedWithCommitError)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testServerUserCherryPickFailedWithCommitError(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -470,12 +447,9 @@ func testServerUserCherryPickFailedWithCommitError(t *testing.T, ctx context.Con
func TestServer_UserCherryPick_failedWithConflict(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testServerUserCherryPickFailedWithConflict)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testServerUserCherryPickFailedWithConflict(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -504,12 +478,9 @@ func testServerUserCherryPickFailedWithConflict(t *testing.T, ctx context.Contex
func TestServer_UserCherryPick_successfulWithGivenCommits(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testServerUserCherryPickSuccessfulWithGivenCommits)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testServerUserCherryPickSuccessfulWithGivenCommits(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -564,12 +535,9 @@ func testServerUserCherryPickSuccessfulWithGivenCommits(t *testing.T, ctx contex
func TestServer_UserCherryPick_quarantine(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testServerUserCherryPickQuarantine)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testServerUserCherryPickQuarantine(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -598,7 +566,5 @@ func testServerUserCherryPickQuarantine(t *testing.T, ctx context.Context) {
exists, err := repo.HasRevision(ctx, oid.Revision()+"^{commit}")
require.NoError(t, err)
- // The new commit will be in the target repository in case quarantines are disabled.
- // Otherwise, it should've been discarded.
- require.Equal(t, !featureflag.Quarantine.IsEnabled(ctx), exists)
+ require.False(t, exists, "quarantined commit should have been discarded")
}
diff --git a/internal/gitaly/service/operations/commit_files.go b/internal/gitaly/service/operations/commit_files.go
index f38955e0c..7a4525ce4 100644
--- a/internal/gitaly/service/operations/commit_files.go
+++ b/internal/gitaly/service/operations/commit_files.go
@@ -18,7 +18,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/git2go"
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/storage"
"gitlab.com/gitlab-org/gitaly/v14/internal/helper"
- "gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
@@ -119,7 +118,7 @@ func validatePath(rootPath, relPath string) (string, error) {
}
func (s *Server) userCommitFiles(ctx context.Context, header *gitalypb.UserCommitFilesRequestHeader, stream gitalypb.OperationService_UserCommitFilesServer) error {
- quarantineDir, quarantineRepo, err := s.quarantinedRepo(ctx, header.GetRepository(), featureflag.Quarantine)
+ quarantineDir, quarantineRepo, err := s.quarantinedRepo(ctx, header.GetRepository())
if err != nil {
return err
}
diff --git a/internal/gitaly/service/operations/commit_files_test.go b/internal/gitaly/service/operations/commit_files_test.go
index 14a8985ed..0613e829a 100644
--- a/internal/gitaly/service/operations/commit_files_test.go
+++ b/internal/gitaly/service/operations/commit_files_test.go
@@ -16,7 +16,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/git/gittest"
"gitlab.com/gitlab-org/gitaly/v14/internal/git/localrepo"
"gitlab.com/gitlab-org/gitaly/v14/internal/helper/text"
- "gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper/testassert"
"gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
@@ -33,12 +32,9 @@ var (
func TestUserCommitFiles(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testUserCommitFiles)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testUserCommitFiles(t *testing.T, ctx context.Context) {
ctx, cfg, _, _, client := setupOperationsService(t, ctx)
const (
@@ -948,12 +944,9 @@ func testUserCommitFiles(t *testing.T, ctx context.Context) {
func TestUserCommitFilesStableCommitID(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testUserCommitFilesStableCommitID)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testUserCommitFilesStableCommitID(t *testing.T, ctx context.Context) {
ctx, cfg, _, _, client := setupOperationsService(t, ctx)
repoProto, repoPath := gittest.InitRepo(t, cfg, cfg.Storages[0])
@@ -1011,12 +1004,9 @@ func testUserCommitFilesStableCommitID(t *testing.T, ctx context.Context) {
func TestUserCommitFilesQuarantine(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testUserCommitFilesQuarantine)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testUserCommitFilesQuarantine(t *testing.T, ctx context.Context) {
ctx, cfg, _, _, client := setupOperationsService(t, ctx)
repoProto, repoPath := gittest.InitRepo(t, cfg, cfg.Storages[0])
@@ -1047,20 +1037,15 @@ func testUserCommitFilesQuarantine(t *testing.T, ctx context.Context) {
exists, err := repo.HasRevision(ctx, oid.Revision()+"^{commit}")
require.NoError(t, err)
- // The new commit will be in the target repository in case quarantines are disabled.
- // Otherwise, it should've been discarded.
- require.Equal(t, !featureflag.Quarantine.IsEnabled(ctx), exists)
+ require.False(t, exists, "quarantined commit should have been discarded")
}
func TestSuccessfulUserCommitFilesRequest(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testSuccessfulUserCommitFilesRequest)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testSuccessfulUserCommitFilesRequest(t *testing.T, ctx context.Context) {
ctx, cfg, repo, repoPath, client := setupOperationsService(t, ctx)
newRepo, newRepoPath := gittest.InitRepo(t, cfg, cfg.Storages[0])
@@ -1169,12 +1154,9 @@ func testSuccessfulUserCommitFilesRequest(t *testing.T, ctx context.Context) {
func TestSuccessfulUserCommitFilesRequestMove(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testSuccessfulUserCommitFilesRequestMove)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testSuccessfulUserCommitFilesRequestMove(t *testing.T, ctx context.Context) {
ctx, cfg, _, _, client := setupOperationsService(t, ctx)
branchName := "master"
@@ -1230,12 +1212,9 @@ func testSuccessfulUserCommitFilesRequestMove(t *testing.T, ctx context.Context)
func TestSuccessfulUserCommitFilesRequestForceCommit(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testSuccessfulUserCommitFilesRequestForceCommit)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testSuccessfulUserCommitFilesRequestForceCommit(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -1280,12 +1259,9 @@ func testSuccessfulUserCommitFilesRequestForceCommit(t *testing.T, ctx context.C
func TestSuccessfulUserCommitFilesRequestStartSha(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testSuccessfulUserCommitFilesRequestStartSha)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testSuccessfulUserCommitFilesRequestStartSha(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, _, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -1318,21 +1294,17 @@ func testSuccessfulUserCommitFilesRequestStartSha(t *testing.T, ctx context.Cont
func TestSuccessfulUserCommitFilesRequestStartShaRemoteRepository(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testSuccessfulUserCommitFilesRemoteRepositoryRequest(func(header *gitalypb.UserCommitFilesRequest) {
+ testSuccessfulUserCommitFilesRemoteRepositoryRequest(func(header *gitalypb.UserCommitFilesRequest) {
setStartSha(header, "1e292f8fedd741b75372e19097c76d327140c312")
- }))
+ })
}
func TestSuccessfulUserCommitFilesRequestStartBranchRemoteRepository(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testSuccessfulUserCommitFilesRemoteRepositoryRequest(func(header *gitalypb.UserCommitFilesRequest) {
+ testSuccessfulUserCommitFilesRemoteRepositoryRequest(func(header *gitalypb.UserCommitFilesRequest) {
setStartBranchName(header, []byte("master"))
- }))
+ })
}
func testSuccessfulUserCommitFilesRemoteRepositoryRequest(setHeader func(header *gitalypb.UserCommitFilesRequest)) func(*testing.T, context.Context) {
@@ -1376,12 +1348,9 @@ func testSuccessfulUserCommitFilesRemoteRepositoryRequest(setHeader func(header
func TestSuccessfulUserCommitFilesRequestWithSpecialCharactersInSignature(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testSuccessfulUserCommitFilesRequestWithSpecialCharactersInSignature)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testSuccessfulUserCommitFilesRequestWithSpecialCharactersInSignature(t *testing.T, ctx context.Context) {
ctx, cfg, _, _, client := setupOperationsService(t, ctx)
repoProto, _ := gittest.InitRepo(t, cfg, cfg.Storages[0])
@@ -1432,12 +1401,9 @@ func testSuccessfulUserCommitFilesRequestWithSpecialCharactersInSignature(t *tes
func TestFailedUserCommitFilesRequestDueToHooks(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testFailedUserCommitFilesRequestDueToHooks)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testFailedUserCommitFilesRequestDueToHooks(t *testing.T, ctx context.Context) {
ctx, _, repoProto, repoPath, client := setupOperationsService(t, ctx)
branchName := "feature"
@@ -1469,12 +1435,9 @@ func testFailedUserCommitFilesRequestDueToHooks(t *testing.T, ctx context.Contex
func TestFailedUserCommitFilesRequestDueToIndexError(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testFailedUserCommitFilesRequestDueToIndexError)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testFailedUserCommitFilesRequestDueToIndexError(t *testing.T, ctx context.Context) {
ctx, _, repo, _, client := setupOperationsService(t, ctx)
testCases := []struct {
@@ -1537,12 +1500,9 @@ func testFailedUserCommitFilesRequestDueToIndexError(t *testing.T, ctx context.C
func TestFailedUserCommitFilesRequest(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testFailedUserCommitFilesRequest)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testFailedUserCommitFilesRequest(t *testing.T, ctx context.Context) {
ctx, _, repo, _, client := setupOperationsService(t, ctx)
branchName := "feature"
diff --git a/internal/gitaly/service/operations/merge.go b/internal/gitaly/service/operations/merge.go
index 7d894fb2b..49ab228e8 100644
--- a/internal/gitaly/service/operations/merge.go
+++ b/internal/gitaly/service/operations/merge.go
@@ -12,7 +12,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/git/updateref"
"gitlab.com/gitlab-org/gitaly/v14/internal/git2go"
"gitlab.com/gitlab-org/gitaly/v14/internal/helper"
- "gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
)
@@ -48,7 +47,7 @@ func (s *Server) UserMergeBranch(stream gitalypb.OperationService_UserMergeBranc
return helper.ErrInvalidArgument(err)
}
- quarantineDir, quarantineRepo, err := s.quarantinedRepo(ctx, firstRequest.GetRepository(), featureflag.Quarantine)
+ quarantineDir, quarantineRepo, err := s.quarantinedRepo(ctx, firstRequest.GetRepository())
if err != nil {
return err
}
@@ -171,7 +170,7 @@ func (s *Server) UserFFBranch(ctx context.Context, in *gitalypb.UserFFBranchRequ
// While we're creating a quarantine directory, we know that it won't ever have any new
// objects given that we're doing a fast-forward merge. We still want to create one such
// that Rails can efficiently compute new objects.
- quarantineDir, quarantineRepo, err := s.quarantinedRepo(ctx, in.GetRepository(), featureflag.Quarantine)
+ quarantineDir, quarantineRepo, err := s.quarantinedRepo(ctx, in.GetRepository())
if err != nil {
return nil, err
}
diff --git a/internal/gitaly/service/operations/merge_test.go b/internal/gitaly/service/operations/merge_test.go
index 6392f8f26..7647069d6 100644
--- a/internal/gitaly/service/operations/merge_test.go
+++ b/internal/gitaly/service/operations/merge_test.go
@@ -1,7 +1,6 @@
package operations
import (
- "context"
"fmt"
"io/ioutil"
"os"
@@ -18,7 +17,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/config"
"gitlab.com/gitlab-org/gitaly/v14/internal/helper"
"gitlab.com/gitlab-org/gitaly/v14/internal/helper/text"
- "gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper/testassert"
"gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
@@ -36,12 +34,9 @@ var (
func TestSuccessfulMerge(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testSuccessfulMerge)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testSuccessfulMerge(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -79,14 +74,8 @@ func testSuccessfulMerge(t *testing.T, ctx context.Context) {
firstResponse, err := mergeBidi.Recv()
require.NoError(t, err, "receive first response")
- // If we've got a quarantine directory, then we shouldn't be able to read the commit before
- // we have applied the merge.
_, err = repo.ReadCommit(ctx, git.Revision(firstResponse.CommitId))
- if featureflag.Quarantine.IsEnabled(ctx) {
- require.EqualError(t, err, localrepo.ErrObjectNotFound.Error())
- } else {
- require.NoError(t, err, "look up git commit before merge is applied")
- }
+ require.Equal(t, localrepo.ErrObjectNotFound, err, "commit should not exist in the normal repo given that it is quarantined")
require.NoError(t, mergeBidi.Send(&gitalypb.UserMergeBranchRequest{Apply: true}), "apply merge")
@@ -129,12 +118,9 @@ func testSuccessfulMerge(t *testing.T, ctx context.Context) {
func TestUserMergeBranch_quarantine(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testUserMergeBranchQuarantine)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testUserMergeBranchQuarantine(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -172,20 +158,15 @@ func testUserMergeBranchQuarantine(t *testing.T, ctx context.Context) {
exists, err := repo.HasRevision(ctx, oid.Revision()+"^{commit}")
require.NoError(t, err)
- // The new commit will be in the target repository in case quarantines are disabled.
- // Otherwise, it should've been discarded.
- require.Equal(t, !featureflag.Quarantine.IsEnabled(ctx), exists)
+ require.False(t, exists, "quarantined commit should have been discarded")
}
func TestSuccessfulMerge_stableMergeIDs(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testSuccessfulMergeStableMergeIDs)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testSuccessfulMergeStableMergeIDs(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -254,12 +235,9 @@ func testSuccessfulMergeStableMergeIDs(t *testing.T, ctx context.Context) {
func TestAbortedMerge(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testAbortedMerge)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testAbortedMerge(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -322,12 +300,9 @@ func testAbortedMerge(t *testing.T, ctx context.Context) {
func TestFailedMergeConcurrentUpdate(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testFailedMergeConcurrentUpdate)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testFailedMergeConcurrentUpdate(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -370,12 +345,9 @@ func testFailedMergeConcurrentUpdate(t *testing.T, ctx context.Context) {
func TestUserMergeBranch_ambiguousReference(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testUserMergeBranchAmbiguousReference)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testUserMergeBranchAmbiguousReference(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -438,12 +410,9 @@ func testUserMergeBranchAmbiguousReference(t *testing.T, ctx context.Context) {
func TestFailedMergeDueToHooks(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testFailedMergeDueToHooks)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testFailedMergeDueToHooks(t *testing.T, ctx context.Context) {
ctx, cfg, repo, repoPath, client := setupOperationsService(t, ctx)
gittest.Exec(t, cfg, "-C", repoPath, "branch", mergeBranchName, mergeBranchHeadBefore)
@@ -492,12 +461,9 @@ func testFailedMergeDueToHooks(t *testing.T, ctx context.Context) {
func TestUserMergeBranch_conflict(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testUserMergeBranchConflict)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testUserMergeBranchConflict(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
const mergeIntoBranch = "mergeIntoBranch"
@@ -537,12 +503,9 @@ func testUserMergeBranchConflict(t *testing.T, ctx context.Context) {
func TestSuccessfulUserFFBranchRequest(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testSuccessfulUserFFBranchRequest)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testSuccessfulUserFFBranchRequest(t *testing.T, ctx context.Context) {
ctx, cfg, repo, repoPath, client := setupOperationsService(t, ctx)
commitID := "cfe32cf61b73a0d5e9f13e774abde7ff789b1660"
@@ -573,12 +536,9 @@ func testSuccessfulUserFFBranchRequest(t *testing.T, ctx context.Context) {
func TestFailedUserFFBranchRequest(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testFailedUserFFBranchRequest)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testFailedUserFFBranchRequest(t *testing.T, ctx context.Context) {
ctx, cfg, repo, repoPath, client := setupOperationsService(t, ctx)
commitID := "cfe32cf61b73a0d5e9f13e774abde7ff789b1660"
@@ -665,12 +625,9 @@ func testFailedUserFFBranchRequest(t *testing.T, ctx context.Context) {
func TestFailedUserFFBranchDueToHooks(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testFailedUserFFBranchDueToHooks)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testFailedUserFFBranchDueToHooks(t *testing.T, ctx context.Context) {
ctx, cfg, repo, repoPath, client := setupOperationsService(t, ctx)
commitID := "cfe32cf61b73a0d5e9f13e774abde7ff789b1660"
@@ -700,12 +657,9 @@ func testFailedUserFFBranchDueToHooks(t *testing.T, ctx context.Context) {
func TestUserFFBranch_ambiguousReference(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testUserFFBranchAmbiguousReference)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testUserFFBranchAmbiguousReference(t *testing.T, ctx context.Context) {
ctx, cfg, repo, repoPath, client := setupOperationsService(t, ctx)
branchName := "test-ff-target-branch"
@@ -748,8 +702,9 @@ func testUserFFBranchAmbiguousReference(t *testing.T, ctx context.Context) {
func TestSuccessfulUserMergeToRefRequest(t *testing.T) {
t.Parallel()
- ctx, cleanup := testhelper.Context()
- defer cleanup()
+
+ ctx, cancel := testhelper.Context()
+ defer cancel()
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
@@ -854,6 +809,7 @@ func TestSuccessfulUserMergeToRefRequest(t *testing.T) {
func TestConflictsOnUserMergeToRefRequest(t *testing.T) {
t.Parallel()
+
ctx, cleanup := testhelper.Context()
defer cleanup()
@@ -991,6 +947,7 @@ func buildUserMergeToRefRequest(t testing.TB, cfg config.Cfg, repo *gitalypb.Rep
func TestUserMergeToRef_stableMergeID(t *testing.T) {
t.Parallel()
+
ctx, cleanup := testhelper.Context()
defer cleanup()
@@ -1043,6 +1000,7 @@ func TestUserMergeToRef_stableMergeID(t *testing.T) {
func TestFailedUserMergeToRefRequest(t *testing.T) {
t.Parallel()
+
ctx, cleanup := testhelper.Context()
defer cleanup()
@@ -1139,6 +1097,7 @@ func TestFailedUserMergeToRefRequest(t *testing.T) {
func TestUserMergeToRefIgnoreHooksRequest(t *testing.T) {
t.Parallel()
+
ctx, cleanup := testhelper.Context()
defer cleanup()
diff --git a/internal/gitaly/service/operations/rebase.go b/internal/gitaly/service/operations/rebase.go
index 632a5c34d..3e0baad93 100644
--- a/internal/gitaly/service/operations/rebase.go
+++ b/internal/gitaly/service/operations/rebase.go
@@ -11,7 +11,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/git/updateref"
"gitlab.com/gitlab-org/gitaly/v14/internal/git2go"
"gitlab.com/gitlab-org/gitaly/v14/internal/helper"
- "gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
@@ -34,7 +33,7 @@ func (s *Server) UserRebaseConfirmable(stream gitalypb.OperationService_UserReba
ctx := stream.Context()
- quarantineDir, quarantineRepo, err := s.quarantinedRepo(ctx, header.GetRepository(), featureflag.Quarantine)
+ quarantineDir, quarantineRepo, err := s.quarantinedRepo(ctx, header.GetRepository())
if err != nil {
return helper.ErrInternalf("creating repo quarantine: %w", err)
}
diff --git a/internal/gitaly/service/operations/rebase_test.go b/internal/gitaly/service/operations/rebase_test.go
index 15d3182ad..31dc79d7c 100644
--- a/internal/gitaly/service/operations/rebase_test.go
+++ b/internal/gitaly/service/operations/rebase_test.go
@@ -17,7 +17,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/config"
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/transaction"
"gitlab.com/gitlab-org/gitaly/v14/internal/helper"
- "gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper/testassert"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper/testcfg"
@@ -37,12 +36,9 @@ var (
func TestSuccessfulUserRebaseConfirmableRequest(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testSuccessfulUserRebaseConfirmableRequest)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testSuccessfulUserRebaseConfirmableRequest(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
pushOptions := []string{"ci.skip", "test=value"}
@@ -68,11 +64,7 @@ func testSuccessfulUserRebaseConfirmableRequest(t *testing.T, ctx context.Contex
require.NoError(t, err, "receive first response")
_, err = repo.ReadCommit(ctx, git.Revision(firstResponse.GetRebaseSha()))
- if featureflag.Quarantine.IsEnabled(ctx) {
- require.Equal(t, localrepo.ErrObjectNotFound, err)
- } else {
- require.NoError(t, err, "look up git commit before rebase is applied")
- }
+ require.Equal(t, localrepo.ErrObjectNotFound, err, "commit should not exist in the normal repo given that it is quarantined")
applyRequest := buildApplyRequest(true)
require.NoError(t, rebaseStream.Send(applyRequest), "apply rebase")
@@ -104,12 +96,9 @@ func testSuccessfulUserRebaseConfirmableRequest(t *testing.T, ctx context.Contex
func TestUserRebaseConfirmableTransaction(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testUserRebaseConfirmableTransaction)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testUserRebaseConfirmableTransaction(t *testing.T, ctx context.Context) {
var voteCount int
txManager := &transaction.MockManager{
VoteFn: func(context.Context, txinfo.Transaction, voting.Vote) error {
@@ -203,12 +192,9 @@ func testUserRebaseConfirmableTransaction(t *testing.T, ctx context.Context) {
func TestUserRebaseConfirmableStableCommitIDs(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testUserRebaseConfirmableStableCommitIDs)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testUserRebaseConfirmableStableCommitIDs(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
cfg.Gitlab.URL = setupAndStartGitlabServer(t, gittest.GlID, "project-1", cfg)
@@ -278,12 +264,9 @@ func testUserRebaseConfirmableStableCommitIDs(t *testing.T, ctx context.Context)
func TestFailedRebaseUserRebaseConfirmableRequestDueToInvalidHeader(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testFailedRebaseUserRebaseConfirmableRequestDueToInvalidHeader)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testFailedRebaseUserRebaseConfirmableRequestDueToInvalidHeader(t *testing.T, ctx context.Context) {
ctx, cfg, repo, repoPath, client := setupOperationsService(t, ctx)
repoCopy, _ := gittest.CloneRepo(t, cfg, cfg.Storages[0])
@@ -342,12 +325,9 @@ func testFailedRebaseUserRebaseConfirmableRequestDueToInvalidHeader(t *testing.T
func TestAbortedUserRebaseConfirmable(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testAbortedUserRebaseConfirmable)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testAbortedUserRebaseConfirmable(t *testing.T, ctx context.Context) {
ctx, cfg, _, _, client := setupOperationsService(t, ctx)
testCases := []struct {
@@ -405,12 +385,9 @@ func testAbortedUserRebaseConfirmable(t *testing.T, ctx context.Context) {
func TestFailedUserRebaseConfirmableDueToApplyBeingFalse(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testFailedUserRebaseConfirmableDueToApplyBeingFalse)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testFailedUserRebaseConfirmableDueToApplyBeingFalse(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -429,11 +406,7 @@ func testFailedUserRebaseConfirmableDueToApplyBeingFalse(t *testing.T, ctx conte
require.NoError(t, err, "receive first response")
_, err = repo.ReadCommit(ctx, git.Revision(firstResponse.GetRebaseSha()))
- if featureflag.Quarantine.IsEnabled(ctx) {
- require.Equal(t, localrepo.ErrObjectNotFound, err)
- } else {
- require.NoError(t, err, "look up git commit before rebase is applied")
- }
+ require.Equal(t, localrepo.ErrObjectNotFound, err, "commit should not exist in the normal repo given that it is quarantined")
applyRequest := buildApplyRequest(false)
require.NoError(t, rebaseStream.Send(applyRequest), "apply rebase")
@@ -444,11 +417,7 @@ func testFailedUserRebaseConfirmableDueToApplyBeingFalse(t *testing.T, ctx conte
require.False(t, secondResponse.GetRebaseApplied(), "the second rebase is not applied")
_, err = repo.ReadCommit(ctx, git.Revision(firstResponse.GetRebaseSha()))
- if featureflag.Quarantine.IsEnabled(ctx) {
- require.Equal(t, localrepo.ErrObjectNotFound, err)
- } else {
- require.NoError(t, err, "look up git commit before rebase is applied")
- }
+ require.Equal(t, localrepo.ErrObjectNotFound, err, "commit should have been discarded")
newBranchSha := getBranchSha(t, cfg, repoPath, rebaseBranchName)
require.Equal(t, branchSha, newBranchSha, "branch should not change when the rebase is not applied")
@@ -458,12 +427,9 @@ func testFailedUserRebaseConfirmableDueToApplyBeingFalse(t *testing.T, ctx conte
func TestFailedUserRebaseConfirmableRequestDueToPreReceiveError(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testFailedUserRebaseConfirmableRequestDueToPreReceiveError)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testFailedUserRebaseConfirmableRequestDueToPreReceiveError(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -487,11 +453,7 @@ func testFailedUserRebaseConfirmableRequestDueToPreReceiveError(t *testing.T, ct
require.NoError(t, err, "receive first response")
_, err = repo.ReadCommit(ctx, git.Revision(firstResponse.GetRebaseSha()))
- if featureflag.Quarantine.IsEnabled(ctx) {
- require.Equal(t, localrepo.ErrObjectNotFound, err)
- } else {
- require.NoError(t, err, "look up git commit before rebase is applied")
- }
+ require.Equal(t, localrepo.ErrObjectNotFound, err, "commit should not exist in the normal repo given that it is quarantined")
applyRequest := buildApplyRequest(true)
require.NoError(t, rebaseStream.Send(applyRequest), "apply rebase")
@@ -505,11 +467,7 @@ func testFailedUserRebaseConfirmableRequestDueToPreReceiveError(t *testing.T, ct
require.Equal(t, io.EOF, err)
_, err = repo.ReadCommit(ctx, git.Revision(firstResponse.GetRebaseSha()))
- if featureflag.Quarantine.IsEnabled(ctx) {
- require.Equal(t, localrepo.ErrObjectNotFound, err)
- } else {
- require.NoError(t, err, "look up git commit after rebase is applied")
- }
+ require.Equal(t, localrepo.ErrObjectNotFound, err, "commit should have been discarded")
newBranchSha := getBranchSha(t, cfg, repoPath, rebaseBranchName)
require.Equal(t, branchSha, newBranchSha, "branch should not change when the rebase fails due to PreReceiveError")
@@ -521,12 +479,9 @@ func testFailedUserRebaseConfirmableRequestDueToPreReceiveError(t *testing.T, ct
func TestFailedUserRebaseConfirmableDueToGitError(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testFailedUserRebaseConfirmableDueToGitError)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testFailedUserRebaseConfirmableDueToGitError(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repoCopyProto, _ := gittest.CloneRepo(t, cfg, cfg.Storages[0])
@@ -559,12 +514,9 @@ func getBranchSha(t *testing.T, cfg config.Cfg, repoPath string, branchName stri
func TestRebaseRequestWithDeletedFile(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testRebaseRequestWithDeletedFile)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testRebaseRequestWithDeletedFile(t *testing.T, ctx context.Context) {
ctx, cfg, _, _, client := setupOperationsService(t, ctx)
repoProto, repoPath := gittest.CloneRepo(t, cfg, cfg.Storages[0], gittest.CloneRepoOpts{
WithWorktree: true,
@@ -594,11 +546,7 @@ func testRebaseRequestWithDeletedFile(t *testing.T, ctx context.Context) {
require.NoError(t, err, "receive first response")
_, err = repo.ReadCommit(ctx, git.Revision(firstResponse.GetRebaseSha()))
- if featureflag.Quarantine.IsEnabled(ctx) {
- require.Equal(t, err, localrepo.ErrObjectNotFound)
- } else {
- require.NoError(t, err, "look up git commit before rebase is applied")
- }
+ require.Equal(t, localrepo.ErrObjectNotFound, err, "commit should not exist in the normal repo given that it is quarantined")
applyRequest := buildApplyRequest(true)
require.NoError(t, rebaseStream.Send(applyRequest), "apply rebase")
@@ -623,12 +571,9 @@ func testRebaseRequestWithDeletedFile(t *testing.T, ctx context.Context) {
func TestRebaseOntoRemoteBranch(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testRebaseOntoRemoteBranch)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testRebaseOntoRemoteBranch(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -661,11 +606,7 @@ func testRebaseOntoRemoteBranch(t *testing.T, ctx context.Context) {
require.NoError(t, err, "receive first response")
_, err = repo.ReadCommit(ctx, git.Revision(remoteBranchHash))
- if featureflag.Quarantine.IsEnabled(ctx) {
- require.Equal(t, localrepo.ErrObjectNotFound, err)
- } else {
- require.NoError(t, err, "remote commit does now exist in local repository")
- }
+ require.Equal(t, localrepo.ErrObjectNotFound, err, "commit should not exist in the normal repo given that it is quarantined")
applyRequest := buildApplyRequest(true)
require.NoError(t, rebaseStream.Send(applyRequest), "apply rebase")
@@ -690,12 +631,9 @@ func testRebaseOntoRemoteBranch(t *testing.T, ctx context.Context) {
func TestRebaseFailedWithCode(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testRebaseFailedWithCode)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testRebaseFailedWithCode(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
branchSha := getBranchSha(t, cfg, repoPath, rebaseBranchName)
diff --git a/internal/gitaly/service/operations/revert.go b/internal/gitaly/service/operations/revert.go
index 04597ef43..d5c1e17f8 100644
--- a/internal/gitaly/service/operations/revert.go
+++ b/internal/gitaly/service/operations/revert.go
@@ -11,7 +11,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/git/updateref"
"gitlab.com/gitlab-org/gitaly/v14/internal/git2go"
"gitlab.com/gitlab-org/gitaly/v14/internal/helper"
- "gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
)
@@ -20,7 +19,7 @@ func (s *Server) UserRevert(ctx context.Context, req *gitalypb.UserRevertRequest
return nil, helper.ErrInvalidArgument(err)
}
- quarantineDir, quarantineRepo, err := s.quarantinedRepo(ctx, req.GetRepository(), featureflag.Quarantine)
+ quarantineDir, quarantineRepo, err := s.quarantinedRepo(ctx, req.GetRepository())
if err != nil {
return nil, err
}
diff --git a/internal/gitaly/service/operations/revert_test.go b/internal/gitaly/service/operations/revert_test.go
index de930566d..ab432d818 100644
--- a/internal/gitaly/service/operations/revert_test.go
+++ b/internal/gitaly/service/operations/revert_test.go
@@ -1,7 +1,6 @@
package operations
import (
- "context"
"fmt"
"strings"
"testing"
@@ -10,7 +9,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/git"
"gitlab.com/gitlab-org/gitaly/v14/internal/git/gittest"
"gitlab.com/gitlab-org/gitaly/v14/internal/git/localrepo"
- "gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper"
"gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
"google.golang.org/grpc/codes"
@@ -20,12 +18,9 @@ import (
func TestServer_UserRevert_successful(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testServerUserRevertSuccessful)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testServerUserRevertSuccessful(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -182,12 +177,9 @@ func testServerUserRevertSuccessful(t *testing.T, ctx context.Context) {
func TestServer_UserRevert_quarantine(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testServerUserRevertQuarantine)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testServerUserRevertQuarantine(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -216,20 +208,15 @@ func testServerUserRevertQuarantine(t *testing.T, ctx context.Context) {
exists, err := repo.HasRevision(ctx, oid.Revision()+"^{commit}")
require.NoError(t, err)
- // The new commit will be in the target repository in case quarantines are disabled.
- // Otherwise, it should've been discarded.
- require.Equal(t, !featureflag.Quarantine.IsEnabled(ctx), exists)
+ require.False(t, exists, "quarantined commit should have been discarded")
}
func TestServer_UserRevert_stableID(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testServerUserRevertStableID)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testServerUserRevertStableID(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, _, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -283,12 +270,9 @@ func testServerUserRevertStableID(t *testing.T, ctx context.Context) {
func TestServer_UserRevert_successfulIntoEmptyRepo(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testServerUserRevertSuccessfulIntoEmptyRepo)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testServerUserRevertSuccessfulIntoEmptyRepo(t *testing.T, ctx context.Context) {
ctx, cfg, startRepoProto, _, client := setupOperationsService(t, ctx)
startRepo := localrepo.NewTestRepo(t, cfg, startRepoProto)
@@ -334,12 +318,9 @@ func testServerUserRevertSuccessfulIntoEmptyRepo(t *testing.T, ctx context.Conte
func TestServer_UserRevert_successfulGitHooks(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testServerUserRevertSuccessfulGitHooks)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testServerUserRevertSuccessfulGitHooks(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -377,12 +358,9 @@ func testServerUserRevertSuccessfulGitHooks(t *testing.T, ctx context.Context) {
func TestServer_UserRevert_failuedDueToValidations(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testServerUserRevertFailuedDueToValidations)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testServerUserRevertFailuedDueToValidations(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, _, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -454,12 +432,9 @@ func testServerUserRevertFailuedDueToValidations(t *testing.T, ctx context.Conte
func TestServer_UserRevert_failedDueToPreReceiveError(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testServerUserRevertFailedDueToPreReceiveError)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testServerUserRevertFailedDueToPreReceiveError(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -494,12 +469,9 @@ func testServerUserRevertFailedDueToPreReceiveError(t *testing.T, ctx context.Co
func TestServer_UserRevert_failedDueToCreateTreeErrorConflict(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testServerUserRevertFailedDueToCreateTreeErrorConflict)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testServerUserRevertFailedDueToCreateTreeErrorConflict(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -528,12 +500,9 @@ func testServerUserRevertFailedDueToCreateTreeErrorConflict(t *testing.T, ctx co
func TestServer_UserRevert_failedDueToCreateTreeErrorEmpty(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testServerUserRevertFailedDueToCreateTreeErrorEmpty)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testServerUserRevertFailedDueToCreateTreeErrorEmpty(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -566,12 +535,9 @@ func testServerUserRevertFailedDueToCreateTreeErrorEmpty(t *testing.T, ctx conte
func TestServer_UserRevert_failedDueToCommitError(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testServerUserRevertFailedDueToCommitError)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testServerUserRevertFailedDueToCommitError(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
diff --git a/internal/gitaly/service/operations/server.go b/internal/gitaly/service/operations/server.go
index 24f959198..7ffe24f2d 100644
--- a/internal/gitaly/service/operations/server.go
+++ b/internal/gitaly/service/operations/server.go
@@ -16,7 +16,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/rubyserver"
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/storage"
"gitlab.com/gitlab-org/gitaly/v14/internal/helper"
- "gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
)
@@ -61,14 +60,8 @@ func (s *Server) localrepo(repo repository.GitRepo) *localrepo.Repo {
}
func (s *Server) quarantinedRepo(
- ctx context.Context, repo *gitalypb.Repository, flags ...featureflag.FeatureFlag,
+ ctx context.Context, repo *gitalypb.Repository,
) (*quarantine.Dir, *localrepo.Repo, error) {
- for _, flag := range flags {
- if flag.IsDisabled(ctx) {
- return nil, s.localrepo(repo), nil
- }
- }
-
quarantineDir, err := quarantine.New(ctx, repo, s.locator)
if err != nil {
return nil, nil, helper.ErrInternalf("creating object quarantine: %w", err)
diff --git a/internal/gitaly/service/operations/squash.go b/internal/gitaly/service/operations/squash.go
index 1fbee78b6..0790fa0ce 100644
--- a/internal/gitaly/service/operations/squash.go
+++ b/internal/gitaly/service/operations/squash.go
@@ -5,7 +5,6 @@ import (
"context"
"errors"
"fmt"
- "strings"
"github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus"
"gitlab.com/gitlab-org/gitaly/v14/internal/git"
@@ -25,10 +24,6 @@ func (s *Server) UserSquash(ctx context.Context, req *gitalypb.UserSquashRequest
return nil, helper.ErrInvalidArgumentf("UserSquash: %v", err)
}
- if strings.Contains(req.GetSquashId(), "/") {
- return nil, helper.ErrInvalidArgument(errors.New("worktree id can't contain slashes"))
- }
-
sha, err := s.userSquash(ctx, req)
if err != nil {
var gitErr gitError
@@ -63,10 +58,6 @@ func validateUserSquashRequest(req *gitalypb.UserSquashRequest) error {
return errors.New("empty user email")
}
- if req.GetSquashId() == "" {
- return errors.New("empty SquashId")
- }
-
if req.GetStartSha() == "" {
return errors.New("empty StartSha")
}
diff --git a/internal/gitaly/service/operations/squash_test.go b/internal/gitaly/service/operations/squash_test.go
index b87d348b9..784b905a9 100644
--- a/internal/gitaly/service/operations/squash_test.go
+++ b/internal/gitaly/service/operations/squash_test.go
@@ -62,7 +62,6 @@ func TestUserSquash_successful(t *testing.T) {
request := &gitalypb.UserSquashRequest{
Repository: repoProto,
User: gittest.TestUser,
- SquashId: "1",
Author: author,
CommitMessage: commitMessage,
StartSha: tc.startOID,
@@ -104,7 +103,6 @@ func TestUserSquash_stableID(t *testing.T) {
response, err := client.UserSquash(ctx, &gitalypb.UserSquashRequest{
Repository: repoProto,
User: gittest.TestUser,
- SquashId: "1",
Author: author,
CommitMessage: []byte("Squashed commit"),
StartSha: startSha,
@@ -165,7 +163,6 @@ func TestUserSquash_threeWayMerge(t *testing.T) {
request := &gitalypb.UserSquashRequest{
Repository: repoProto,
User: gittest.TestUser,
- SquashId: "1",
Author: author,
CommitMessage: commitMessage,
// The diff between two of these commits results in some changes to files/ruby/popen.rb
@@ -202,7 +199,6 @@ func TestUserSquash_splitIndex(t *testing.T) {
request := &gitalypb.UserSquashRequest{
Repository: repo,
User: gittest.TestUser,
- SquashId: "1",
Author: author,
CommitMessage: commitMessage,
StartSha: startSha,
@@ -255,7 +251,6 @@ func TestUserSquash_renames(t *testing.T) {
request := &gitalypb.UserSquashRequest{
Repository: repoProto,
User: gittest.TestUser,
- SquashId: "1",
Author: author,
CommitMessage: commitMessage,
StartSha: startCommitID,
@@ -291,7 +286,6 @@ func TestUserSquash_missingFileOnTargetBranch(t *testing.T) {
request := &gitalypb.UserSquashRequest{
Repository: repo,
User: gittest.TestUser,
- SquashId: "1",
Author: author,
CommitMessage: commitMessage,
StartSha: conflictingStartSha,
@@ -390,7 +384,6 @@ func TestUserSquash_emptyCommit(t *testing.T) {
response, err := client.UserSquash(ctx, &gitalypb.UserSquashRequest{
Repository: repoProto,
User: gittest.TestUser,
- SquashId: "1",
Author: author,
CommitMessage: []byte("squashed"),
StartSha: tc.theirs.String(),
@@ -429,7 +422,6 @@ func TestUserSquash_validation(t *testing.T) {
request: &gitalypb.UserSquashRequest{
Repository: nil,
User: gittest.TestUser,
- SquashId: "1",
Author: gittest.TestUser,
CommitMessage: commitMessage,
StartSha: startSha,
@@ -442,20 +434,6 @@ func TestUserSquash_validation(t *testing.T) {
request: &gitalypb.UserSquashRequest{
Repository: repo,
User: nil,
- SquashId: "1",
- Author: gittest.TestUser,
- CommitMessage: commitMessage,
- StartSha: startSha,
- EndSha: endSha,
- },
- code: codes.InvalidArgument,
- },
- {
- desc: "empty SquashId",
- request: &gitalypb.UserSquashRequest{
- Repository: repo,
- User: gittest.TestUser,
- SquashId: "",
Author: gittest.TestUser,
CommitMessage: commitMessage,
StartSha: startSha,
@@ -468,7 +446,6 @@ func TestUserSquash_validation(t *testing.T) {
request: &gitalypb.UserSquashRequest{
Repository: repo,
User: gittest.TestUser,
- SquashId: "1",
Author: gittest.TestUser,
CommitMessage: commitMessage,
StartSha: "",
@@ -481,7 +458,6 @@ func TestUserSquash_validation(t *testing.T) {
request: &gitalypb.UserSquashRequest{
Repository: repo,
User: gittest.TestUser,
- SquashId: "1",
Author: gittest.TestUser,
CommitMessage: commitMessage,
StartSha: startSha,
@@ -494,7 +470,6 @@ func TestUserSquash_validation(t *testing.T) {
request: &gitalypb.UserSquashRequest{
Repository: repo,
User: gittest.TestUser,
- SquashId: "1",
Author: nil,
CommitMessage: commitMessage,
StartSha: startSha,
@@ -507,7 +482,6 @@ func TestUserSquash_validation(t *testing.T) {
request: &gitalypb.UserSquashRequest{
Repository: repo,
User: gittest.TestUser,
- SquashId: "1",
Author: gittest.TestUser,
CommitMessage: nil,
StartSha: startSha,
@@ -515,19 +489,6 @@ func TestUserSquash_validation(t *testing.T) {
},
code: codes.InvalidArgument,
},
- {
- desc: "worktree id can't contain slashes",
- request: &gitalypb.UserSquashRequest{
- Repository: repo,
- User: gittest.TestUser,
- SquashId: "1/2",
- Author: gittest.TestUser,
- CommitMessage: commitMessage,
- StartSha: startSha,
- EndSha: endSha,
- },
- code: codes.InvalidArgument,
- },
}
for _, testCase := range testCases {
@@ -564,7 +525,6 @@ func TestUserSquash_conflicts(t *testing.T) {
response, err := client.UserSquash(ctx, &gitalypb.UserSquashRequest{
Repository: repo,
- SquashId: "1",
User: gittest.TestUser,
Author: gittest.TestUser,
CommitMessage: commitMessage,
@@ -600,7 +560,6 @@ func TestUserSquash_ancestry(t *testing.T) {
response, err := client.UserSquash(ctx, &gitalypb.UserSquashRequest{
Repository: repo,
- SquashId: "1",
User: gittest.TestUser,
Author: gittest.TestUser,
CommitMessage: commitMessage,
@@ -632,7 +591,6 @@ func TestUserSquash_gitError(t *testing.T) {
desc: "not existing start SHA",
request: &gitalypb.UserSquashRequest{
Repository: repo,
- SquashId: "1",
User: gittest.TestUser,
Author: gittest.TestUser,
CommitMessage: commitMessage,
@@ -647,7 +605,6 @@ func TestUserSquash_gitError(t *testing.T) {
desc: "not existing end SHA",
request: &gitalypb.UserSquashRequest{
Repository: repo,
- SquashId: "1",
User: gittest.TestUser,
Author: gittest.TestUser,
CommitMessage: commitMessage,
@@ -662,7 +619,6 @@ func TestUserSquash_gitError(t *testing.T) {
desc: "user has no name set",
request: &gitalypb.UserSquashRequest{
Repository: repo,
- SquashId: "1",
User: &gitalypb.User{Email: gittest.TestUser.Email},
Author: gittest.TestUser,
CommitMessage: commitMessage,
@@ -675,7 +631,6 @@ func TestUserSquash_gitError(t *testing.T) {
desc: "author has no name set",
request: &gitalypb.UserSquashRequest{
Repository: repo,
- SquashId: "1",
User: gittest.TestUser,
Author: &gitalypb.User{Email: gittest.TestUser.Email},
CommitMessage: commitMessage,
diff --git a/internal/gitaly/service/operations/submodules.go b/internal/gitaly/service/operations/submodules.go
index d7ed6f3c1..11aae0f32 100644
--- a/internal/gitaly/service/operations/submodules.go
+++ b/internal/gitaly/service/operations/submodules.go
@@ -12,7 +12,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/git/updateref"
"gitlab.com/gitlab-org/gitaly/v14/internal/git2go"
"gitlab.com/gitlab-org/gitaly/v14/internal/helper"
- "gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
@@ -61,7 +60,7 @@ func validateUserUpdateSubmoduleRequest(req *gitalypb.UserUpdateSubmoduleRequest
}
func (s *Server) userUpdateSubmodule(ctx context.Context, req *gitalypb.UserUpdateSubmoduleRequest) (*gitalypb.UserUpdateSubmoduleResponse, error) {
- quarantineDir, quarantineRepo, err := s.quarantinedRepo(ctx, req.GetRepository(), featureflag.Quarantine)
+ quarantineDir, quarantineRepo, err := s.quarantinedRepo(ctx, req.GetRepository())
if err != nil {
return nil, err
}
diff --git a/internal/gitaly/service/operations/submodules_test.go b/internal/gitaly/service/operations/submodules_test.go
index 51009204d..9c8c7c7fa 100644
--- a/internal/gitaly/service/operations/submodules_test.go
+++ b/internal/gitaly/service/operations/submodules_test.go
@@ -2,7 +2,6 @@ package operations
import (
"bytes"
- "context"
"fmt"
"strings"
"testing"
@@ -12,7 +11,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/git/gittest"
"gitlab.com/gitlab-org/gitaly/v14/internal/git/localrepo"
"gitlab.com/gitlab-org/gitaly/v14/internal/git/lstree"
- "gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper"
"gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
"google.golang.org/grpc/codes"
@@ -22,12 +20,9 @@ import (
func TestSuccessfulUserUpdateSubmoduleRequest(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testSuccessfulUserUpdateSubmoduleRequest)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testSuccessfulUserUpdateSubmoduleRequest(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -109,12 +104,9 @@ func testSuccessfulUserUpdateSubmoduleRequest(t *testing.T, ctx context.Context)
func TestUserUpdateSubmoduleStableID(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testUserUpdateSubmoduleStableID)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testUserUpdateSubmoduleStableID(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, _, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -160,12 +152,9 @@ func testUserUpdateSubmoduleStableID(t *testing.T, ctx context.Context) {
func TestUserUpdateSubmoduleQuarantine(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testUserUpdateSubmoduleQuarantine)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testUserUpdateSubmoduleQuarantine(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -192,20 +181,15 @@ func testUserUpdateSubmoduleQuarantine(t *testing.T, ctx context.Context) {
exists, err := repo.HasRevision(ctx, oid.Revision()+"^{commit}")
require.NoError(t, err)
- // The new commit will be in the target repository in case quarantines are disabled.
- // Otherwise, it should've been discarded.
- require.Equal(t, !featureflag.Quarantine.IsEnabled(ctx), exists)
+ require.False(t, exists, "quarantined commit should have been discarded")
}
func TestFailedUserUpdateSubmoduleRequestDueToValidations(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testFailedUserUpdateSubmoduleRequestDueToValidations)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testFailedUserUpdateSubmoduleRequestDueToValidations(t *testing.T, ctx context.Context) {
ctx, _, repo, _, client := setupOperationsService(t, ctx)
testCases := []struct {
@@ -323,12 +307,9 @@ func testFailedUserUpdateSubmoduleRequestDueToValidations(t *testing.T, ctx cont
func TestFailedUserUpdateSubmoduleRequestDueToInvalidBranch(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testFailedUserUpdateSubmoduleRequestDueToInvalidBranch)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testFailedUserUpdateSubmoduleRequestDueToInvalidBranch(t *testing.T, ctx context.Context) {
ctx, _, repo, _, client := setupOperationsService(t, ctx)
request := &gitalypb.UserUpdateSubmoduleRequest{
@@ -348,12 +329,9 @@ func testFailedUserUpdateSubmoduleRequestDueToInvalidBranch(t *testing.T, ctx co
func TestFailedUserUpdateSubmoduleRequestDueToInvalidSubmodule(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testFailedUserUpdateSubmoduleRequestDueToInvalidSubmodule)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testFailedUserUpdateSubmoduleRequestDueToInvalidSubmodule(t *testing.T, ctx context.Context) {
ctx, _, repo, _, client := setupOperationsService(t, ctx)
request := &gitalypb.UserUpdateSubmoduleRequest{
@@ -373,12 +351,9 @@ func testFailedUserUpdateSubmoduleRequestDueToInvalidSubmodule(t *testing.T, ctx
func TestFailedUserUpdateSubmoduleRequestDueToSameReference(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testFailedUserUpdateSubmoduleRequestDueToSameReference)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testFailedUserUpdateSubmoduleRequestDueToSameReference(t *testing.T, ctx context.Context) {
ctx, _, repo, _, client := setupOperationsService(t, ctx)
request := &gitalypb.UserUpdateSubmoduleRequest{
@@ -401,12 +376,9 @@ func testFailedUserUpdateSubmoduleRequestDueToSameReference(t *testing.T, ctx co
func TestFailedUserUpdateSubmoduleRequestDueToRepositoryEmpty(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testFailedUserUpdateSubmoduleRequestDueToRepositoryEmpty)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testFailedUserUpdateSubmoduleRequestDueToRepositoryEmpty(t *testing.T, ctx context.Context) {
ctx, cfg, _, _, client := setupOperationsService(t, ctx)
repo, _ := gittest.InitRepo(t, cfg, cfg.Storages[0])
diff --git a/internal/gitaly/service/operations/update_branches_test.go b/internal/gitaly/service/operations/update_branches_test.go
index 48e5be18d..72bc5bd4c 100644
--- a/internal/gitaly/service/operations/update_branches_test.go
+++ b/internal/gitaly/service/operations/update_branches_test.go
@@ -1,7 +1,6 @@
package operations
import (
- "context"
"crypto/sha1"
"fmt"
"testing"
@@ -10,7 +9,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/git"
"gitlab.com/gitlab-org/gitaly/v14/internal/git/gittest"
"gitlab.com/gitlab-org/gitaly/v14/internal/git/localrepo"
- "gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper/testassert"
"gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
@@ -27,12 +25,9 @@ var (
func TestSuccessfulUserUpdateBranchRequest(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testSuccessfulUserUpdateBranchRequest)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testSuccessfulUserUpdateBranchRequest(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -107,12 +102,9 @@ func testSuccessfulUserUpdateBranchRequest(t *testing.T, ctx context.Context) {
func TestSuccessfulUserUpdateBranchRequestToDelete(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testSuccessfulUserUpdateBranchRequestToDelete)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testSuccessfulUserUpdateBranchRequestToDelete(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -181,12 +173,9 @@ func testSuccessfulUserUpdateBranchRequestToDelete(t *testing.T, ctx context.Con
func TestSuccessfulGitHooksForUserUpdateBranchRequest(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testSuccessfulGitHooksForUserUpdateBranchRequest)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testSuccessfulGitHooksForUserUpdateBranchRequest(t *testing.T, ctx context.Context) {
ctx, cfg, _, _, client := setupOperationsService(t, ctx)
for _, hookName := range GitlabHooks {
@@ -218,12 +207,9 @@ func testSuccessfulGitHooksForUserUpdateBranchRequest(t *testing.T, ctx context.
func TestFailedUserUpdateBranchDueToHooks(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testFailedUserUpdateBranchDueToHooks)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testFailedUserUpdateBranchDueToHooks(t *testing.T, ctx context.Context) {
ctx, _, repoProto, repoPath, client := setupOperationsService(t, ctx)
request := &gitalypb.UserUpdateBranchRequest{
@@ -255,12 +241,9 @@ func testFailedUserUpdateBranchDueToHooks(t *testing.T, ctx context.Context) {
func TestFailedUserUpdateBranchRequest(t *testing.T) {
t.Parallel()
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.Quarantine,
- }).Run(t, testFailedUserUpdateBranchRequest)
-}
+ ctx, cancel := testhelper.Context()
+ defer cancel()
-func testFailedUserUpdateBranchRequest(t *testing.T, ctx context.Context) {
ctx, cfg, repoProto, _, client := setupOperationsService(t, ctx)
revDoesntExist := fmt.Sprintf("%x", sha1.Sum([]byte("we need a non existent sha")))
diff --git a/internal/gitaly/service/ref/refs.go b/internal/gitaly/service/ref/refs.go
index 2cb1ca589..91b8c8569 100644
--- a/internal/gitaly/service/ref/refs.go
+++ b/internal/gitaly/service/ref/refs.go
@@ -19,7 +19,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/helper"
"gitlab.com/gitlab-org/gitaly/v14/internal/helper/chunk"
"gitlab.com/gitlab-org/gitaly/v14/internal/helper/lines"
- "gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
"google.golang.org/protobuf/proto"
)
@@ -89,52 +88,6 @@ func (t *tagSender) Send() error {
})
}
-func (s *server) parseAndReturnTags(ctx context.Context, repo git.RepositoryExecutor, sortField string, stream gitalypb.RefService_FindAllTagsServer) error {
- flags := []git.Option{
- git.ValueFlag{Name: "--format", Value: tagFormat},
- }
- if sortField != "" {
- flags = append(flags, git.ValueFlag{Name: "--sort", Value: sortField})
- }
- tagsCmd, err := repo.Exec(ctx, git.SubCmd{
- Name: "for-each-ref",
- Flags: flags,
- Args: []string{"refs/tags/"},
- })
- if err != nil {
- return fmt.Errorf("for-each-ref error: %v", err)
- }
-
- c, err := s.catfileCache.BatchProcess(ctx, repo)
- if err != nil {
- return fmt.Errorf("error creating catfile: %v", err)
- }
-
- tagChunker := chunk.New(&tagSender{stream: stream})
-
- scanner := bufio.NewScanner(tagsCmd)
- for scanner.Scan() {
- tag, err := parseTagLine(ctx, c, scanner.Text())
- if err != nil {
- return fmt.Errorf("parsing tag: %v", err)
- }
-
- if err := tagChunker.Send(tag); err != nil {
- return fmt.Errorf("sending to chunker: %v", err)
- }
- }
-
- if err := tagsCmd.Wait(); err != nil {
- return fmt.Errorf("tag command: %v", err)
- }
-
- if err := tagChunker.Flush(); err != nil {
- return fmt.Errorf("flushing chunker: %v", err)
- }
-
- return nil
-}
-
func (s *server) FindAllTags(in *gitalypb.FindAllTagsRequest, stream gitalypb.RefService_FindAllTagsServer) error {
ctx := stream.Context()
@@ -149,14 +102,8 @@ func (s *server) FindAllTags(in *gitalypb.FindAllTagsRequest, stream gitalypb.Re
repo := s.localrepo(in.GetRepository())
- if featureflag.FindAllTagsPipeline.IsEnabled(ctx) {
- if err := s.findAllTags(ctx, repo, sortField, stream); err != nil {
- return helper.ErrInternal(err)
- }
- } else {
- if err := s.parseAndReturnTags(ctx, repo, sortField, stream); err != nil {
- return helper.ErrInternal(err)
- }
+ if err := s.findAllTags(ctx, repo, sortField, stream); err != nil {
+ return helper.ErrInternal(err)
}
return nil
diff --git a/internal/gitaly/service/ref/refs_test.go b/internal/gitaly/service/ref/refs_test.go
index 31cec9b7a..cddc69ddf 100644
--- a/internal/gitaly/service/ref/refs_test.go
+++ b/internal/gitaly/service/ref/refs_test.go
@@ -19,7 +19,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/git/localrepo"
"gitlab.com/gitlab-org/gitaly/v14/internal/git/updateref"
"gitlab.com/gitlab-org/gitaly/v14/internal/helper"
- "gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper/testassert"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper/testcfg"
@@ -422,17 +421,14 @@ func TestInvalidRepoFindDefaultBranchNameRequest(t *testing.T) {
}
func TestSuccessfulFindAllTagsRequest(t *testing.T) {
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.FindAllTagsPipeline,
- }).Run(t, testSuccessfulFindAllTagsRequest)
-}
-
-func testSuccessfulFindAllTagsRequest(t *testing.T, ctx context.Context) {
cfg, client := setupRefServiceWithoutRepo(t)
repoProto, repoPath := gittest.CloneRepo(t, cfg, cfg.Storages[0])
repo := localrepo.NewTestRepo(t, cfg, repoProto)
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+
// reconstruct the v1.1.2 tag from patches to test truncated tag message
// with partial PGP block
truncatedPGPTagMsg := testhelper.MustReadFile(t, "testdata/truncated_pgp_msg.patch")
@@ -622,14 +618,11 @@ func testSuccessfulFindAllTagsRequest(t *testing.T, ctx context.Context) {
}
func TestFindAllTagsNestedTags(t *testing.T) {
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.FindAllTagsPipeline,
- }).Run(t, testFindAllTagsNestedTags)
-}
-
-func testFindAllTagsNestedTags(t *testing.T, ctx context.Context) {
cfg, client := setupRefServiceWithoutRepo(t)
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+
repoProto, repoPath := gittest.InitRepo(t, cfg, cfg.Storages[0])
commitID := gittest.WriteCommit(t, cfg, repoPath,
@@ -759,14 +752,11 @@ func TestFindAllTags_duplicateAnnotatedTags(t *testing.T) {
}
func TestFindAllTagNestedTags(t *testing.T) {
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.FindAllTagsPipeline,
- }).Run(t, testFindAllTagNestedTags)
-}
-
-func testFindAllTagNestedTags(t *testing.T, ctx context.Context) {
cfg, client := setupRefServiceWithoutRepo(t)
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+
repoProto, repoPath := gittest.CloneRepo(t, cfg, cfg.Storages[0])
repo := localrepo.NewTestRepo(t, cfg, repoProto)
@@ -833,13 +823,7 @@ func testFindAllTagNestedTags(t *testing.T, ctx context.Context) {
},
}
- // With the non-pipeline code, we used to manually peel tags
- // recursively until we hit a non-tag object. This was hugely
- // expensive: git can do this for us via `^{}`, which
- // opportunistically peels any tag objects for us. This is a lot
- // more efficient, and thus we don't have the previous limitations
- // anymore with the new code which does use this.
- if info.Type == "commit" && (depth < catfile.MaxTagReferenceDepth || featureflag.FindAllTagsPipeline.IsEnabled(ctx)) {
+ if info.Type == "commit" {
commit, err := catfile.GetCommit(ctx, batch, git.Revision(tc.originalOid))
require.NoError(t, err)
expectedTag.TargetCommit = commit
@@ -872,14 +856,11 @@ func testFindAllTagNestedTags(t *testing.T, ctx context.Context) {
}
func TestInvalidFindAllTagsRequest(t *testing.T) {
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.FindAllTagsPipeline,
- }).Run(t, testInvalidFindAllTagsRequest)
-}
-
-func testInvalidFindAllTagsRequest(t *testing.T, ctx context.Context) {
_, client := setupRefServiceWithoutRepo(t)
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+
testCases := []struct {
desc string
request *gitalypb.FindAllTagsRequest
@@ -915,14 +896,11 @@ func testInvalidFindAllTagsRequest(t *testing.T, ctx context.Context) {
}
func TestFindAllTagsSorted(t *testing.T) {
- testhelper.NewFeatureSets([]featureflag.FeatureFlag{
- featureflag.FindAllTagsPipeline,
- }).Run(t, testFindAllTagsSorted)
-}
-
-func testFindAllTagsSorted(t *testing.T, ctx context.Context) {
cfg, client := setupRefServiceWithoutRepo(t)
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+
repoProto, _ := gittest.CloneRepo(t, cfg, cfg.Storages[0])
repo := localrepo.New(git.NewExecCommandFactory(cfg), catfile.NewCache(cfg), repoProto, cfg)
diff --git a/internal/gitaly/service/remote/fetch_internal_remote_test.go b/internal/gitaly/service/remote/fetch_internal_remote_test.go
index 7d6d2cd7e..999153da7 100644
--- a/internal/gitaly/service/remote/fetch_internal_remote_test.go
+++ b/internal/gitaly/service/remote/fetch_internal_remote_test.go
@@ -183,7 +183,6 @@ func TestSuccessfulFetchInternalRemote(t *testing.T) {
localAddr := testserver.RunGitalyServer(t, localCfg, nil, func(srv *grpc.Server, deps *service.Dependencies) {
gitalypb.RegisterRemoteServiceServer(srv, NewServer(
deps.GetCfg(),
- deps.GetRubyServer(),
deps.GetLocator(),
deps.GetGitCmdFactory(),
deps.GetCatfileCache(),
diff --git a/internal/gitaly/service/remote/find_remote_repository.go b/internal/gitaly/service/remote/find_remote_repository.go
new file mode 100644
index 000000000..fa78d023a
--- /dev/null
+++ b/internal/gitaly/service/remote/find_remote_repository.go
@@ -0,0 +1,48 @@
+package remote
+
+import (
+ "bytes"
+ "context"
+ "io/ioutil"
+
+ "gitlab.com/gitlab-org/gitaly/v14/internal/git"
+ "gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
+ "google.golang.org/grpc/codes"
+ "google.golang.org/grpc/status"
+)
+
+func (s *server) FindRemoteRepository(ctx context.Context, req *gitalypb.FindRemoteRepositoryRequest) (*gitalypb.FindRemoteRepositoryResponse, error) {
+ if req.GetRemote() == "" {
+ return nil, status.Error(codes.InvalidArgument, "FindRemoteRepository: empty remote can't be checked.")
+ }
+
+ cmd, err := s.gitCmdFactory.NewWithoutRepo(ctx,
+ git.SubCmd{
+ Name: "ls-remote",
+ Args: []string{
+ req.GetRemote(),
+ "HEAD",
+ },
+ },
+ )
+
+ if err != nil {
+ return nil, status.Errorf(codes.Internal, "error executing git command: %s", err)
+ }
+
+ output, err := ioutil.ReadAll(cmd)
+ if err != nil {
+ return nil, status.Errorf(codes.Internal, "unable to read stdout: %s", err)
+ }
+ if err := cmd.Wait(); err != nil {
+ return &gitalypb.FindRemoteRepositoryResponse{Exists: false}, nil
+ }
+
+ // The output of a successful command is structured like
+ // Regexp would've read better, but this is faster
+ // 58fbff2e0d3b620f591a748c158799ead87b51cd HEAD
+ fields := bytes.Fields(output)
+ match := len(fields) == 2 && len(fields[0]) == 40 && string(fields[1]) == "HEAD"
+
+ return &gitalypb.FindRemoteRepositoryResponse{Exists: match}, nil
+}
diff --git a/internal/gitaly/service/remote/find_remote_repository_test.go b/internal/gitaly/service/remote/find_remote_repository_test.go
new file mode 100644
index 000000000..d19f6dc4d
--- /dev/null
+++ b/internal/gitaly/service/remote/find_remote_repository_test.go
@@ -0,0 +1,65 @@
+package remote
+
+import (
+ "bytes"
+ "io"
+ "net/http"
+ "net/http/httptest"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ "gitlab.com/gitlab-org/gitaly/v14/internal/testhelper"
+ "gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
+ "google.golang.org/grpc/codes"
+)
+
+func TestFindRemoteRepository(t *testing.T) {
+ t.Parallel()
+ _, repo, _, client := setupRemoteService(t)
+
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ infoRefs := testhelper.MustReadFile(t, "testdata/lsremotedata.txt")
+ w.Header().Set("Content-Type", "application/x-git-upload-pack-advertisement")
+ _, err := io.Copy(w, bytes.NewReader(infoRefs))
+ require.NoError(t, err)
+ }))
+ defer ts.Close()
+
+ resp, err := client.FindRemoteRepository(ctx, &gitalypb.FindRemoteRepositoryRequest{Remote: ts.URL, StorageName: repo.GetStorageName()})
+ require.NoError(t, err)
+
+ require.True(t, resp.Exists)
+}
+
+func TestFailedFindRemoteRepository(t *testing.T) {
+ t.Parallel()
+ _, repo, _, client := setupRemoteService(t)
+
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+
+ testCases := []struct {
+ description string
+ remote string
+ exists bool
+ code codes.Code
+ }{
+ {"non existing remote", "http://example.com/test.git", false, codes.OK},
+ {"empty remote", "", false, codes.InvalidArgument},
+ }
+
+ for _, tc := range testCases {
+ resp, err := client.FindRemoteRepository(ctx, &gitalypb.FindRemoteRepositoryRequest{Remote: tc.remote, StorageName: repo.GetStorageName()})
+ if tc.code == codes.OK {
+ require.NoError(t, err)
+ } else {
+ testhelper.RequireGrpcError(t, err, tc.code)
+ continue
+ }
+
+ require.Equal(t, tc.exists, resp.GetExists(), tc.description)
+ }
+}
diff --git a/internal/gitaly/service/remote/find_remote_root_ref.go b/internal/gitaly/service/remote/find_remote_root_ref.go
index dc4302783..fb2f0adf0 100644
--- a/internal/gitaly/service/remote/find_remote_root_ref.go
+++ b/internal/gitaly/service/remote/find_remote_root_ref.go
@@ -16,28 +16,22 @@ import (
const headPrefix = "HEAD branch: "
func (s *server) findRemoteRootRef(ctx context.Context, request *gitalypb.FindRemoteRootRefRequest) (string, error) {
- remoteName := request.Remote // nolint:staticcheck
- var config []git.ConfigPair
-
- if request.RemoteUrl != "" {
- remoteName = "inmemory"
- config = []git.ConfigPair{
- {Key: "remote.inmemory.url", Value: request.RemoteUrl},
- }
+ config := []git.ConfigPair{
+ {Key: "remote.inmemory.url", Value: request.RemoteUrl},
+ }
- if authHeader := request.GetHttpAuthorizationHeader(); authHeader != "" {
- config = append(config, git.ConfigPair{
- Key: fmt.Sprintf("http.%s.extraHeader", request.RemoteUrl),
- Value: "Authorization: " + authHeader,
- })
- }
+ if authHeader := request.GetHttpAuthorizationHeader(); authHeader != "" {
+ config = append(config, git.ConfigPair{
+ Key: fmt.Sprintf("http.%s.extraHeader", request.RemoteUrl),
+ Value: "Authorization: " + authHeader,
+ })
}
cmd, err := s.gitCmdFactory.New(ctx, request.Repository,
git.SubSubCmd{
Name: "remote",
Action: "show",
- Args: []string{remoteName},
+ Args: []string{"inmemory"},
},
git.WithRefTxHook(ctx, request.Repository, s.cfg),
git.WithConfigEnv(config...),
@@ -72,13 +66,8 @@ func (s *server) findRemoteRootRef(ctx context.Context, request *gitalypb.FindRe
// FindRemoteRootRef queries the remote to determine its HEAD
func (s *server) FindRemoteRootRef(ctx context.Context, in *gitalypb.FindRemoteRootRefRequest) (*gitalypb.FindRemoteRootRefResponse, error) {
- //nolint:staticcheck // GetRemote() is deprecated
- if in.GetRemote() == "" && in.GetRemoteUrl() == "" {
- return nil, status.Error(codes.InvalidArgument, "got neither remote name nor URL")
- }
- //nolint:staticcheck // GetRemote() is deprecated
- if in.GetRemote() != "" && in.GetRemoteUrl() != "" {
- return nil, status.Error(codes.InvalidArgument, "got remote name and URL")
+ if in.GetRemoteUrl() == "" {
+ return nil, status.Error(codes.InvalidArgument, "missing remote URL")
}
if in.Repository == nil {
return nil, status.Error(codes.InvalidArgument, "missing repository")
diff --git a/internal/gitaly/service/remote/find_remote_root_ref_test.go b/internal/gitaly/service/remote/find_remote_root_ref_test.go
index 0e352b85d..fbb080042 100644
--- a/internal/gitaly/service/remote/find_remote_root_ref_test.go
+++ b/internal/gitaly/service/remote/find_remote_root_ref_test.go
@@ -24,10 +24,6 @@ func TestFindRemoteRootRefSuccess(t *testing.T) {
request *gitalypb.FindRemoteRootRefRequest
}{
{
- desc: "with remote name",
- request: &gitalypb.FindRemoteRootRefRequest{Repository: repo, Remote: "origin"},
- },
- {
desc: "with remote URL",
request: &gitalypb.FindRemoteRootRefRequest{Repository: repo, RemoteUrl: originURL},
},
@@ -66,14 +62,12 @@ func TestFindRemoteRootRefWithUnbornRemoteHead(t *testing.T) {
ctx, cancel := testhelper.Context()
defer cancel()
- for _, request := range []*gitalypb.FindRemoteRootRefRequest{
- &gitalypb.FindRemoteRootRefRequest{Repository: remoteRepo, Remote: "foo"},
- &gitalypb.FindRemoteRootRefRequest{Repository: remoteRepo, RemoteUrl: "file://" + clientRepoPath},
- } {
- response, err := client.FindRemoteRootRef(ctx, request)
- testassert.GrpcEqualErr(t, status.Error(codes.NotFound, "no remote HEAD found"), err)
- require.Nil(t, response)
- }
+ response, err := client.FindRemoteRootRef(ctx, &gitalypb.FindRemoteRootRefRequest{
+ Repository: remoteRepo,
+ RemoteUrl: "file://" + clientRepoPath},
+ )
+ testassert.GrpcEqualErr(t, status.Error(codes.NotFound, "no remote HEAD found"), err)
+ require.Nil(t, response)
}
func TestFindRemoteRootRefFailedDueToValidation(t *testing.T) {
@@ -91,7 +85,7 @@ func TestFindRemoteRootRefFailedDueToValidation(t *testing.T) {
desc: "Invalid repository",
request: &gitalypb.FindRemoteRootRefRequest{
Repository: invalidRepo,
- Remote: "remote-name",
+ RemoteUrl: "remote-url",
},
expectedErr: []error{
status.Error(codes.InvalidArgument, "GetStorageByName: no such storage: \"fake\""),
@@ -101,7 +95,7 @@ func TestFindRemoteRootRefFailedDueToValidation(t *testing.T) {
{
desc: "Repository is nil",
request: &gitalypb.FindRemoteRootRefRequest{
- Remote: "remote-name",
+ RemoteUrl: "remote-url",
},
expectedErr: []error{
status.Error(codes.InvalidArgument, "missing repository"),
@@ -109,23 +103,12 @@ func TestFindRemoteRootRefFailedDueToValidation(t *testing.T) {
},
},
{
- desc: "Remote name and URL is empty",
- request: &gitalypb.FindRemoteRootRefRequest{
- Repository: repo,
- },
- expectedErr: []error{
- status.Error(codes.InvalidArgument, "got neither remote name nor URL"),
- },
- },
- {
- desc: "Remote name and URL is set",
+ desc: "Remote URL is empty",
request: &gitalypb.FindRemoteRootRefRequest{
Repository: repo,
- Remote: "remote-name",
- RemoteUrl: "remote-url",
},
expectedErr: []error{
- status.Error(codes.InvalidArgument, "got remote name and URL"),
+ status.Error(codes.InvalidArgument, "missing remote URL"),
},
},
}
@@ -149,15 +132,6 @@ func TestFindRemoteRootRefFailedDueToInvalidRemote(t *testing.T) {
t.Parallel()
_, repo, _, client := setupRemoteService(t)
- t.Run("invalid remote name", func(t *testing.T) {
- request := &gitalypb.FindRemoteRootRefRequest{Repository: repo, Remote: "invalid"}
- ctx, cancel := testhelper.Context()
- defer cancel()
-
- _, err := client.FindRemoteRootRef(ctx, request)
- testhelper.RequireGrpcError(t, err, codes.Internal)
- })
-
t.Run("invalid remote URL", func(t *testing.T) {
fakeRepoDir := testhelper.TempDir(t)
diff --git a/internal/gitaly/service/remote/remotes.go b/internal/gitaly/service/remote/remotes.go
deleted file mode 100644
index cc2392521..000000000
--- a/internal/gitaly/service/remote/remotes.go
+++ /dev/null
@@ -1,168 +0,0 @@
-package remote
-
-import (
- "bytes"
- "context"
- "fmt"
- "io"
- "io/ioutil"
- "strings"
-
- "gitlab.com/gitlab-org/gitaly/v14/internal/git"
- "gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/rubyserver"
- "gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/transaction"
- "gitlab.com/gitlab-org/gitaly/v14/internal/helper"
- "gitlab.com/gitlab-org/gitaly/v14/internal/transaction/txinfo"
- "gitlab.com/gitlab-org/gitaly/v14/internal/transaction/voting"
- "gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/status"
-)
-
-// AddRemote adds a remote to the repository
-func (s *server) AddRemote(ctx context.Context, req *gitalypb.AddRemoteRequest) (*gitalypb.AddRemoteResponse, error) {
- if err := validateAddRemoteRequest(req); err != nil {
- return nil, status.Errorf(codes.InvalidArgument, "AddRemote: %v", err)
- }
-
- client, err := s.ruby.RemoteServiceClient(ctx)
- if err != nil {
- return nil, err
- }
-
- clientCtx, err := rubyserver.SetHeaders(ctx, s.locator, req.GetRepository())
- if err != nil {
- return nil, err
- }
-
- if err := s.voteOnRemote(ctx, req.GetRepository(), req.GetName()); err != nil {
- return nil, helper.ErrInternalf("preimage vote on remote: %v", err)
- }
-
- response, err := client.AddRemote(clientCtx, req)
- if err != nil {
- return nil, err
- }
-
- if err := s.voteOnRemote(ctx, req.GetRepository(), req.GetName()); err != nil {
- return nil, helper.ErrInternalf("postimage vote on remote: %v", err)
- }
-
- return response, nil
-}
-
-func validateAddRemoteRequest(req *gitalypb.AddRemoteRequest) error {
- if strings.TrimSpace(req.GetName()) == "" {
- return fmt.Errorf("empty remote name")
- }
- if req.GetUrl() == "" {
- return fmt.Errorf("empty remote url")
- }
-
- return nil
-}
-
-// RemoveRemote removes the given remote
-func (s *server) RemoveRemote(ctx context.Context, req *gitalypb.RemoveRemoteRequest) (*gitalypb.RemoveRemoteResponse, error) {
- if err := validateRemoveRemoteRequest(req); err != nil {
- return nil, status.Errorf(codes.InvalidArgument, "RemoveRemote: %v", err)
- }
-
- remote := s.localrepo(req.GetRepository()).Remote()
-
- hasRemote, err := remote.Exists(ctx, req.Name)
- if err != nil {
- return nil, err
- }
- if !hasRemote {
- return &gitalypb.RemoveRemoteResponse{Result: false}, nil
- }
-
- if err := s.voteOnRemote(ctx, req.GetRepository(), req.GetName()); err != nil {
- return nil, helper.ErrInternalf("preimage vote on remote: %v", err)
- }
-
- if err := remote.Remove(ctx, req.Name); err != nil {
- return nil, err
- }
-
- if err := s.voteOnRemote(ctx, req.GetRepository(), req.GetName()); err != nil {
- return nil, helper.ErrInternalf("postimage vote on remote: %v", err)
- }
-
- return &gitalypb.RemoveRemoteResponse{Result: true}, nil
-}
-
-func (s *server) FindRemoteRepository(ctx context.Context, req *gitalypb.FindRemoteRepositoryRequest) (*gitalypb.FindRemoteRepositoryResponse, error) {
- if req.GetRemote() == "" {
- return nil, status.Error(codes.InvalidArgument, "FindRemoteRepository: empty remote can't be checked.")
- }
-
- cmd, err := s.gitCmdFactory.NewWithoutRepo(ctx,
- git.SubCmd{
- Name: "ls-remote",
- Args: []string{
- req.GetRemote(),
- "HEAD",
- },
- },
- )
-
- if err != nil {
- return nil, status.Errorf(codes.Internal, "error executing git command: %s", err)
- }
-
- output, err := ioutil.ReadAll(cmd)
- if err != nil {
- return nil, status.Errorf(codes.Internal, "unable to read stdout: %s", err)
- }
- if err := cmd.Wait(); err != nil {
- return &gitalypb.FindRemoteRepositoryResponse{Exists: false}, nil
- }
-
- // The output of a successful command is structured like
- // Regexp would've read better, but this is faster
- // 58fbff2e0d3b620f591a748c158799ead87b51cd HEAD
- fields := bytes.Fields(output)
- match := len(fields) == 2 && len(fields[0]) == 40 && string(fields[1]) == "HEAD"
-
- return &gitalypb.FindRemoteRepositoryResponse{Exists: match}, nil
-}
-
-func validateRemoveRemoteRequest(req *gitalypb.RemoveRemoteRequest) error {
- if req.GetName() == "" {
- return fmt.Errorf("empty remote name")
- }
-
- return nil
-}
-
-func (s *server) voteOnRemote(ctx context.Context, repo *gitalypb.Repository, remoteName string) error {
- return transaction.RunOnContext(ctx, func(tx txinfo.Transaction) error {
- localrepo := s.localrepo(repo)
-
- configEntries, err := localrepo.Config().GetRegexp(ctx, "remote\\."+remoteName+"\\.", git.ConfigGetRegexpOpts{})
- if err != nil {
- return fmt.Errorf("get remote configuration: %w", err)
- }
-
- hash := voting.NewVoteHash()
- for _, configEntry := range configEntries {
- config := fmt.Sprintf("%s\t%s\n", configEntry.Key, configEntry.Value)
- if _, err := io.WriteString(hash, config); err != nil {
- return fmt.Errorf("hash remote config entry: %w", err)
- }
- }
-
- vote, err := hash.Vote()
- if err != nil {
- return fmt.Errorf("compute remote config vote: %w", err)
- }
-
- if err := s.txManager.Vote(ctx, tx, vote); err != nil {
- return fmt.Errorf("vote: %w", err)
- }
-
- return nil
- })
-}
diff --git a/internal/gitaly/service/remote/remotes_test.go b/internal/gitaly/service/remote/remotes_test.go
deleted file mode 100644
index 158692729..000000000
--- a/internal/gitaly/service/remote/remotes_test.go
+++ /dev/null
@@ -1,317 +0,0 @@
-package remote
-
-import (
- "bytes"
- "context"
- "fmt"
- "io"
- "net/http"
- "net/http/httptest"
- "testing"
-
- "github.com/stretchr/testify/require"
- "gitlab.com/gitlab-org/gitaly/v14/internal/git/gittest"
- "gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/config"
- "gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/rubyserver"
- "gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/transaction"
- "gitlab.com/gitlab-org/gitaly/v14/internal/helper"
- "gitlab.com/gitlab-org/gitaly/v14/internal/helper/text"
- "gitlab.com/gitlab-org/gitaly/v14/internal/testhelper"
- "gitlab.com/gitlab-org/gitaly/v14/internal/testhelper/testserver"
- "gitlab.com/gitlab-org/gitaly/v14/internal/transaction/txinfo"
- "gitlab.com/gitlab-org/gitaly/v14/internal/transaction/voting"
- "gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
- "google.golang.org/grpc/codes"
-)
-
-func testSuccessfulAddRemote(t *testing.T, cfg config.Cfg, rubySrv *rubyserver.Server) {
- _, repo, repoPath, client := setupRemoteServiceWithRuby(t, cfg, rubySrv)
-
- ctx, cancel := testhelper.Context()
- defer cancel()
-
- testCases := []struct {
- description string
- remoteName string
- url string
- mirrorRefmaps []string
- resolvedMirrorRefmaps []string
- }{
- {
- description: "creates a new remote",
- remoteName: "my-remote",
- url: "http://my-repo.git",
- },
- {
- description: "if a remote with the same name exists, it updates it",
- remoteName: "my-remote",
- url: "johndoe@host:my-new-repo.git",
- },
- {
- description: "doesn't set the remote as mirror if mirror_refmaps is not `present`",
- remoteName: "my-non-mirror-remote",
- url: "johndoe@host:my-new-repo.git",
- mirrorRefmaps: []string{""},
- },
- {
- description: "sets the remote as mirror if a mirror_refmap is present",
- remoteName: "my-mirror-remote",
- url: "http://my-mirror-repo.git",
- mirrorRefmaps: []string{"all_refs"},
- resolvedMirrorRefmaps: []string{"+refs/*:refs/*"},
- },
- {
- description: "sets the remote as mirror with multiple mirror_refmaps",
- remoteName: "my-other-mirror-remote",
- url: "http://my-non-mirror-repo.git",
- mirrorRefmaps: []string{"all_refs", "+refs/pull/*/head:refs/merge-requests/*/head"},
- resolvedMirrorRefmaps: []string{"+refs/*:refs/*", "+refs/pull/*/head:refs/merge-requests/*/head"},
- },
- }
-
- for _, tc := range testCases {
- t.Run(tc.description, func(t *testing.T) {
- request := &gitalypb.AddRemoteRequest{
- Repository: repo,
- Name: tc.remoteName,
- Url: tc.url,
- MirrorRefmaps: tc.mirrorRefmaps,
- }
-
- _, err := client.AddRemote(ctx, request)
- require.NoError(t, err)
-
- remotes := gittest.Exec(t, cfg, "-C", repoPath, "remote", "-v")
-
- require.Contains(t, string(remotes), fmt.Sprintf("%s\t%s (fetch)", tc.remoteName, tc.url))
- require.Contains(t, string(remotes), fmt.Sprintf("%s\t%s (push)", tc.remoteName, tc.url))
-
- mirrorConfigRegexp := fmt.Sprintf("remote.%s", tc.remoteName)
- mirrorConfig := string(gittest.Exec(t, cfg, "-C", repoPath, "config", "--get-regexp", mirrorConfigRegexp))
- if len(tc.resolvedMirrorRefmaps) > 0 {
- for _, resolvedMirrorRefmap := range tc.resolvedMirrorRefmaps {
- require.Contains(t, mirrorConfig, resolvedMirrorRefmap)
- }
- require.Contains(t, mirrorConfig, "mirror true")
- require.Contains(t, mirrorConfig, "prune true")
- } else {
- require.NotContains(t, mirrorConfig, "mirror true")
- }
- })
- }
-}
-
-func testAddRemoteTransactional(t *testing.T, cfg config.Cfg, rubySrv *rubyserver.Server) {
- var votes []voting.Vote
- txManager := transaction.MockManager{
- VoteFn: func(_ context.Context, _ txinfo.Transaction, vote voting.Vote) error {
- votes = append(votes, vote)
- return nil
- },
- }
-
- _, repo, repoPath, client := setupRemoteServiceWithRuby(t, cfg, rubySrv, testserver.WithTransactionManager(&txManager))
-
- ctx, cancel := testhelper.Context()
- defer cancel()
- ctx, err := txinfo.InjectTransaction(ctx, 1, "node", true)
- require.NoError(t, err)
- ctx = helper.IncomingToOutgoing(ctx)
-
- preimageURL := text.ChompBytes(gittest.Exec(t, cfg, "-C", repoPath, "remote", "get-url", "origin"))
-
- _, err = client.AddRemote(ctx, &gitalypb.AddRemoteRequest{
- Repository: repo,
- Name: "origin",
- Url: "foo/bar",
- })
- require.NoError(t, err)
-
- preimageVote := fmt.Sprintf("remote.origin.url\t%s\n", preimageURL)
- require.Equal(t, []voting.Vote{
- voting.VoteFromData([]byte(preimageVote)),
- voting.VoteFromData([]byte("remote.origin.url\tfoo/bar\n")),
- }, votes)
-}
-
-func TestFailedAddRemoteDueToValidation(t *testing.T) {
- t.Parallel()
- _, repo, _, client := setupRemoteService(t)
-
- ctx, cancel := testhelper.Context()
- defer cancel()
-
- testCases := []struct {
- description string
- remoteName string
- url string
- }{
- {
- description: "Remote name empty",
- url: "http://my-repo.git",
- },
- {
- description: "Remote name blank",
- remoteName: " ",
- url: "http://my-repo.git",
- },
- {
- description: "URL empty",
- remoteName: "my-remote",
- },
- }
-
- for _, tc := range testCases {
- t.Run(tc.description, func(t *testing.T) {
- request := &gitalypb.AddRemoteRequest{
- Repository: repo,
- Name: tc.remoteName,
- Url: tc.url,
- }
-
- _, err := client.AddRemote(ctx, request)
- testhelper.RequireGrpcError(t, err, codes.InvalidArgument)
- })
- }
-}
-
-func TestSuccessfulRemoveRemote(t *testing.T) {
- t.Parallel()
- cfg, repo, repoPath, client := setupRemoteService(t)
-
- ctx, cancel := testhelper.Context()
- defer cancel()
-
- gittest.Exec(t, cfg, "-C", repoPath, "remote", "add", "my-remote", "http://my-repo.git")
-
- testCases := []struct {
- description string
- remoteName string
- result bool
- }{
- {
- description: "removes the remote",
- remoteName: "my-remote",
- result: true,
- },
- {
- description: "returns false if the remote doesn't exist",
- remoteName: "not-a-real-remote",
- result: false,
- },
- }
-
- for _, tc := range testCases {
- t.Run(tc.description, func(t *testing.T) {
- request := &gitalypb.RemoveRemoteRequest{
- Repository: repo,
- Name: tc.remoteName,
- }
-
- r, err := client.RemoveRemote(ctx, request)
- require.NoError(t, err)
- require.Equal(t, tc.result, r.GetResult())
-
- remotes := gittest.Exec(t, cfg, "-C", repoPath, "remote")
-
- require.NotContains(t, string(remotes), tc.remoteName)
- })
- }
-}
-
-func TestFailedRemoveRemoteDueToValidation(t *testing.T) {
- t.Parallel()
- _, repo, _, client := setupRemoteService(t)
-
- ctx, cancel := testhelper.Context()
- defer cancel()
-
- request := &gitalypb.RemoveRemoteRequest{Repository: repo} // Remote name empty
-
- _, err := client.RemoveRemote(ctx, request)
- testhelper.RequireGrpcError(t, err, codes.InvalidArgument)
-}
-
-func TestRemoveRemoteTransactional(t *testing.T) {
- t.Parallel()
- var votes []voting.Vote
- txManager := transaction.MockManager{
- VoteFn: func(_ context.Context, _ txinfo.Transaction, vote voting.Vote) error {
- votes = append(votes, vote)
- return nil
- },
- }
-
- cfg, repo, repoPath, client := setupRemoteService(t, testserver.WithTransactionManager(&txManager))
-
- ctx, cancel := testhelper.Context()
- defer cancel()
- ctx, err := txinfo.InjectTransaction(ctx, 1, "node", true)
- require.NoError(t, err)
- ctx = helper.IncomingToOutgoing(ctx)
-
- preimageURL := text.ChompBytes(gittest.Exec(t, cfg, "-C", repoPath, "remote", "get-url", "origin"))
-
- _, err = client.RemoveRemote(ctx, &gitalypb.RemoveRemoteRequest{
- Repository: repo,
- Name: "origin",
- })
- require.NoError(t, err)
-
- preimageVote := fmt.Sprintf("remote.origin.url\t%s\n", preimageURL)
- require.Equal(t, []voting.Vote{
- voting.VoteFromData([]byte(preimageVote)),
- voting.VoteFromData([]byte{}),
- }, votes)
-}
-
-func TestFindRemoteRepository(t *testing.T) {
- t.Parallel()
- _, repo, _, client := setupRemoteService(t)
-
- ctx, cancel := testhelper.Context()
- defer cancel()
-
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- infoRefs := testhelper.MustReadFile(t, "testdata/lsremotedata.txt")
- w.Header().Set("Content-Type", "application/x-git-upload-pack-advertisement")
- _, err := io.Copy(w, bytes.NewReader(infoRefs))
- require.NoError(t, err)
- }))
- defer ts.Close()
-
- resp, err := client.FindRemoteRepository(ctx, &gitalypb.FindRemoteRepositoryRequest{Remote: ts.URL, StorageName: repo.GetStorageName()})
- require.NoError(t, err)
-
- require.True(t, resp.Exists)
-}
-
-func TestFailedFindRemoteRepository(t *testing.T) {
- t.Parallel()
- _, repo, _, client := setupRemoteService(t)
-
- ctx, cancel := testhelper.Context()
- defer cancel()
-
- testCases := []struct {
- description string
- remote string
- exists bool
- code codes.Code
- }{
- {"non existing remote", "http://example.com/test.git", false, codes.OK},
- {"empty remote", "", false, codes.InvalidArgument},
- }
-
- for _, tc := range testCases {
- resp, err := client.FindRemoteRepository(ctx, &gitalypb.FindRemoteRepositoryRequest{Remote: tc.remote, StorageName: repo.GetStorageName()})
- if tc.code == codes.OK {
- require.NoError(t, err)
- } else {
- testhelper.RequireGrpcError(t, err, tc.code)
- continue
- }
-
- require.Equal(t, tc.exists, resp.GetExists(), tc.description)
- }
-}
diff --git a/internal/gitaly/service/remote/server.go b/internal/gitaly/service/remote/server.go
index 37b43caa3..d466af948 100644
--- a/internal/gitaly/service/remote/server.go
+++ b/internal/gitaly/service/remote/server.go
@@ -7,7 +7,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/git/localrepo"
"gitlab.com/gitlab-org/gitaly/v14/internal/git/repository"
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/config"
- "gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/rubyserver"
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/storage"
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/transaction"
"gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
@@ -16,7 +15,6 @@ import (
type server struct {
gitalypb.UnimplementedRemoteServiceServer
cfg config.Cfg
- ruby *rubyserver.Server
locator storage.Locator
gitCmdFactory git.CommandFactory
catfileCache catfile.Cache
@@ -28,7 +26,6 @@ type server struct {
// NewServer creates a new instance of a grpc RemoteServiceServer
func NewServer(
cfg config.Cfg,
- rs *rubyserver.Server,
locator storage.Locator,
gitCmdFactory git.CommandFactory,
catfileCache catfile.Cache,
@@ -36,7 +33,6 @@ func NewServer(
) gitalypb.RemoteServiceServer {
return &server{
cfg: cfg,
- ruby: rs,
locator: locator,
gitCmdFactory: gitCmdFactory,
catfileCache: catfileCache,
diff --git a/internal/gitaly/service/remote/testhelper_test.go b/internal/gitaly/service/remote/testhelper_test.go
index b4ae8265c..35285044f 100644
--- a/internal/gitaly/service/remote/testhelper_test.go
+++ b/internal/gitaly/service/remote/testhelper_test.go
@@ -2,14 +2,10 @@ package remote
import (
"os"
- "reflect"
- "runtime"
"testing"
- "github.com/stretchr/testify/require"
"gitlab.com/gitlab-org/gitaly/v14/internal/git/gittest"
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/config"
- "gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/rubyserver"
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/service"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper/testcfg"
@@ -31,35 +27,16 @@ func testMain(m *testing.M) int {
return m.Run()
}
-func TestWithRubySidecar(t *testing.T) {
- t.Parallel()
- cfg := testcfg.Build(t)
-
- rubySrv := rubyserver.New(cfg)
- require.NoError(t, rubySrv.Start())
- t.Cleanup(rubySrv.Stop)
-
- fs := []func(t *testing.T, cfg config.Cfg, rubySrv *rubyserver.Server){
- testSuccessfulAddRemote,
- testAddRemoteTransactional,
- }
-
- for _, f := range fs {
- t.Run(runtime.FuncForPC(reflect.ValueOf(f).Pointer()).Name(), func(t *testing.T) {
- f(t, cfg, rubySrv)
- })
- }
-}
-
-func setupRemoteServiceWithRuby(t *testing.T, cfg config.Cfg, rubySrv *rubyserver.Server, opts ...testserver.GitalyServerOpt) (config.Cfg, *gitalypb.Repository, string, gitalypb.RemoteServiceClient) {
+func setupRemoteService(t *testing.T, opts ...testserver.GitalyServerOpt) (config.Cfg, *gitalypb.Repository, string, gitalypb.RemoteServiceClient) {
t.Helper()
+ cfg := testcfg.Build(t)
+
repo, repoPath := gittest.CloneRepo(t, cfg, cfg.Storages[0])
- addr := testserver.RunGitalyServer(t, cfg, rubySrv, func(srv *grpc.Server, deps *service.Dependencies) {
+ addr := testserver.RunGitalyServer(t, cfg, nil, func(srv *grpc.Server, deps *service.Dependencies) {
gitalypb.RegisterRemoteServiceServer(srv, NewServer(
deps.GetCfg(),
- deps.GetRubyServer(),
deps.GetLocator(),
deps.GetGitCmdFactory(),
deps.GetCatfileCache(),
@@ -74,13 +51,6 @@ func setupRemoteServiceWithRuby(t *testing.T, cfg config.Cfg, rubySrv *rubyserve
return cfg, repo, repoPath, client
}
-func setupRemoteService(t *testing.T, opts ...testserver.GitalyServerOpt) (config.Cfg, *gitalypb.Repository, string, gitalypb.RemoteServiceClient) {
- t.Helper()
-
- cfg := testcfg.Build(t)
- return setupRemoteServiceWithRuby(t, cfg, nil, opts...)
-}
-
func newRemoteClient(t *testing.T, serverSocketPath string) (gitalypb.RemoteServiceClient, *grpc.ClientConn) {
t.Helper()
diff --git a/internal/gitaly/service/remote/update_remote_mirror.go b/internal/gitaly/service/remote/update_remote_mirror.go
index bc7ed1dd2..7a1b231c6 100644
--- a/internal/gitaly/service/remote/update_remote_mirror.go
+++ b/internal/gitaly/service/remote/update_remote_mirror.go
@@ -64,26 +64,23 @@ func (s *server) updateRemoteMirror(stream gitalypb.RemoteService_UpdateRemoteMi
}
repo := s.localrepo(firstRequest.GetRepository())
- remoteName := firstRequest.GetRefName()
- var remoteConfig []git.ConfigPair
+ remote := firstRequest.GetRemote()
- if remote := firstRequest.GetRemote(); remote != nil {
- remoteSuffix, err := text.RandomHex(8)
- if err != nil {
- return fmt.Errorf("generating remote suffix: %w", err)
- }
- remoteName = "inmemory-" + remoteSuffix
+ remoteSuffix, err := text.RandomHex(8)
+ if err != nil {
+ return fmt.Errorf("generating remote suffix: %w", err)
+ }
+ remoteName := "inmemory-" + remoteSuffix
+
+ remoteConfig := []git.ConfigPair{
+ {Key: fmt.Sprintf("remote.%s.url", remoteName), Value: remote.GetUrl()},
+ }
+ if authHeader := remote.GetHttpAuthorizationHeader(); authHeader != "" {
remoteConfig = append(remoteConfig, git.ConfigPair{
- Key: fmt.Sprintf("remote.%s.url", remoteName), Value: remote.GetUrl(),
+ Key: fmt.Sprintf("http.%s.extraHeader", remote.GetUrl()),
+ Value: "Authorization: " + authHeader,
})
-
- if authHeader := remote.GetHttpAuthorizationHeader(); authHeader != "" {
- remoteConfig = append(remoteConfig, git.ConfigPair{
- Key: fmt.Sprintf("http.%s.extraHeader", remote.GetUrl()),
- Value: "Authorization: " + authHeader,
- })
- }
}
sshCommand, clean, err := git.BuildSSHInvocation(ctx, firstRequest.GetSshKey(), firstRequest.GetKnownHosts())
@@ -250,18 +247,12 @@ func validateUpdateRemoteMirrorRequest(ctx context.Context, req *gitalypb.Update
return fmt.Errorf("empty Repository")
}
- if req.GetRefName() == "" && req.GetRemote() == nil {
- return fmt.Errorf("empty RefName")
+ if req.GetRemote() == nil {
+ return fmt.Errorf("missing Remote")
}
- if req.GetRefName() != "" && req.GetRemote() != nil {
- return fmt.Errorf("both remote name and remote parameters set")
- }
-
- if remote := req.GetRemote(); remote != nil {
- if remote.GetUrl() == "" {
- return fmt.Errorf("remote is missing URL")
- }
+ if req.GetRemote().GetUrl() == "" {
+ return fmt.Errorf("remote is missing URL")
}
return nil
diff --git a/internal/gitaly/service/remote/update_remote_mirror_test.go b/internal/gitaly/service/remote/update_remote_mirror_test.go
index be327a06f..c40f44576 100644
--- a/internal/gitaly/service/remote/update_remote_mirror_test.go
+++ b/internal/gitaly/service/remote/update_remote_mirror_test.go
@@ -315,14 +315,25 @@ func TestUpdateRemoteMirror(t *testing.T) {
CommandFactory: original,
newFunc: func(ctx context.Context, repo repository.GitRepo, sc git.Cmd, opts ...git.CmdOpt) (*command.Command, error) {
if sc.Subcommand() == "push" {
+ subCmd, ok := sc.(git.SubCmd)
+ require.True(t, ok)
+
+ // This is really hacky: we extract the
+ // remote name from the subcommands
+ // arguments. But honestly, the whole way of
+ // how we hijack the command factory is kind
+ // of hacky in the first place.
+ remoteName := subCmd.Args[0]
+ require.Contains(t, remoteName, "inmemory-")
+
// Make the branch diverge on the remote before actually performing the pushes the RPC
// is attempting to perform to simulate a ref diverging after the RPC has performed
// its checks.
cmd, err := original.New(ctx, repo, git.SubCmd{
Name: "push",
Flags: []git.Option{git.Flag{Name: "--force"}},
- Args: []string{"mirror", "refs/heads/non-diverging:refs/heads/diverging"},
- })
+ Args: []string{remoteName, "refs/heads/non-diverging:refs/heads/diverging"},
+ }, opts...)
if !assert.NoError(t, err) {
return nil, err
}
@@ -475,9 +486,6 @@ func TestUpdateRemoteMirror(t *testing.T) {
sourceRepoPb, sourceRepoPath := gittest.InitRepo(t, cfg, cfg.Storages[0])
- // configure the mirror repository as a remote in the source
- gittest.Exec(t, cfg, "-C", sourceRepoPath, "remote", "add", "mirror", mirrorRepoPath)
-
// create identical commits in both repositories so we can use them for
// the references
commitSignature := git2go.NewSignature("Test Author", "author@example.com", time.Now())
@@ -534,7 +542,6 @@ func TestUpdateRemoteMirror(t *testing.T) {
gitalypb.RegisterRemoteServiceServer(srv, NewServer(
deps.GetCfg(),
- deps.GetRubyServer(),
deps.GetLocator(),
cmdFactory,
deps.GetCatfileCache(),
@@ -549,8 +556,10 @@ func TestUpdateRemoteMirror(t *testing.T) {
require.NoError(t, err)
require.NoError(t, stream.Send(&gitalypb.UpdateRemoteMirrorRequest{
- Repository: sourceRepoPb,
- RefName: "mirror",
+ Repository: sourceRepoPb,
+ Remote: &gitalypb.UpdateRemoteMirrorRequest_Remote{
+ Url: mirrorRepoPath,
+ },
KeepDivergentRefs: tc.keepDivergentRefs,
}))
@@ -601,7 +610,6 @@ func TestSuccessfulUpdateRemoteMirrorRequest(t *testing.T) {
serverSocketPath := testserver.RunGitalyServer(t, cfg, nil, func(srv *grpc.Server, deps *service.Dependencies) {
gitalypb.RegisterRemoteServiceServer(srv, NewServer(
deps.GetCfg(),
- deps.GetRubyServer(),
deps.GetLocator(),
deps.GetGitCmdFactory(),
deps.GetCatfileCache(),
@@ -615,8 +623,6 @@ func TestSuccessfulUpdateRemoteMirrorRequest(t *testing.T) {
testRepo, testRepoPath := gittest.CloneRepo(t, cfg, cfg.Storages[0])
_, mirrorPath := gittest.CloneRepo(t, cfg, cfg.Storages[0])
- remoteName := "remote_mirror_1"
-
gittest.CreateTag(t, cfg, mirrorPath, "v0.0.1", "master", nil) // I needed another tag for the tests
gittest.CreateTag(t, cfg, testRepoPath, "new-tag", "60ecb67744cb56576c30214ff52294f8ce2def98", nil)
gittest.CreateTag(t, cfg, testRepoPath, "v1.0.0", "0b4bc9a49b562e85de7cc9e834518ea6828729b9", &gittest.CreateTagOpts{
@@ -629,7 +635,6 @@ func TestSuccessfulUpdateRemoteMirrorRequest(t *testing.T) {
setupCommands := [][]string{
// Preconditions
{"config", "user.email", "gitalytest@example.com"},
- {"remote", "add", remoteName, mirrorPath},
// Updates
{"branch", "new-branch", "60ecb67744cb56576c30214ff52294f8ce2def98"}, // Add branch
{"branch", "ignored-branch", "60ecb67744cb56576c30214ff52294f8ce2def98"}, // Add branch not matching branch list
@@ -654,8 +659,10 @@ func TestSuccessfulUpdateRemoteMirrorRequest(t *testing.T) {
require.NotEqual(t, newTagOid, "f4e6814c3e4e7a0de82a9e7cd20c626cc963a2f8") // Sanity check that the tag did in fact change
firstRequest := &gitalypb.UpdateRemoteMirrorRequest{
- Repository: testRepo,
- RefName: remoteName,
+ Repository: testRepo,
+ Remote: &gitalypb.UpdateRemoteMirrorRequest_Remote{
+ Url: mirrorPath,
+ },
OnlyBranchesMatching: nil,
}
matchingRequest1 := &gitalypb.UpdateRemoteMirrorRequest{
@@ -704,7 +711,6 @@ func TestSuccessfulUpdateRemoteMirrorRequestWithWildcards(t *testing.T) {
serverSocketPath := testserver.RunGitalyServer(t, cfg, nil, func(srv *grpc.Server, deps *service.Dependencies) {
gitalypb.RegisterRemoteServiceServer(srv, NewServer(
deps.GetCfg(),
- deps.GetRubyServer(),
deps.GetLocator(),
deps.GetGitCmdFactory(),
deps.GetCatfileCache(),
@@ -719,12 +725,9 @@ func TestSuccessfulUpdateRemoteMirrorRequestWithWildcards(t *testing.T) {
_, mirrorPath := gittest.CloneRepo(t, cfg, cfg.Storages[0])
- remoteName := "remote_mirror_2"
-
setupCommands := [][]string{
// Preconditions
{"config", "user.email", "gitalytest@example.com"},
- {"remote", "add", remoteName, mirrorPath},
// Updates
{"branch", "11-0-stable", "60ecb67744cb56576c30214ff52294f8ce2def98"},
{"branch", "11-1-stable", "60ecb67744cb56576c30214ff52294f8ce2def98"}, // Add branch
@@ -754,8 +757,10 @@ func TestSuccessfulUpdateRemoteMirrorRequestWithWildcards(t *testing.T) {
newTagOid = strings.TrimSpace(newTagOid)
require.NotEqual(t, newTagOid, "f4e6814c3e4e7a0de82a9e7cd20c626cc963a2f8") // Sanity check that the tag did in fact change
firstRequest := &gitalypb.UpdateRemoteMirrorRequest{
- Repository: testRepo,
- RefName: remoteName,
+ Repository: testRepo,
+ Remote: &gitalypb.UpdateRemoteMirrorRequest_Remote{
+ Url: mirrorPath,
+ },
OnlyBranchesMatching: [][]byte{[]byte("*-stable"), []byte("feature")},
}
@@ -789,7 +794,6 @@ func TestUpdateRemoteMirrorInmemory(t *testing.T) {
serverSocketPath := testserver.RunGitalyServer(t, cfg, nil, func(srv *grpc.Server, deps *service.Dependencies) {
gitalypb.RegisterRemoteServiceServer(srv, NewServer(
deps.GetCfg(),
- deps.GetRubyServer(),
deps.GetLocator(),
deps.GetGitCmdFactory(),
deps.GetCatfileCache(),
@@ -838,7 +842,6 @@ func TestSuccessfulUpdateRemoteMirrorRequestWithKeepDivergentRefs(t *testing.T)
serverSocketPath := testserver.RunGitalyServer(t, cfg, nil, func(srv *grpc.Server, deps *service.Dependencies) {
gitalypb.RegisterRemoteServiceServer(srv, NewServer(
deps.GetCfg(),
- deps.GetRubyServer(),
deps.GetLocator(),
deps.GetGitCmdFactory(),
deps.GetCatfileCache(),
@@ -852,14 +855,11 @@ func TestSuccessfulUpdateRemoteMirrorRequestWithKeepDivergentRefs(t *testing.T)
testRepo, testRepoPath := gittest.CloneRepo(t, cfg, cfg.Storages[0])
_, mirrorPath := gittest.CloneRepo(t, cfg, cfg.Storages[0])
- remoteName := "remote_mirror_1"
-
gittest.CreateTag(t, cfg, mirrorPath, "v2.0.0", "master", nil)
setupCommands := [][]string{
// Preconditions
{"config", "user.email", "gitalytest@example.com"},
- {"remote", "add", remoteName, mirrorPath},
// Create a divergence by moving `master` to the HEAD of another branch
// ba3faa7d only exists on `after-create-delete-modify-move`
@@ -875,8 +875,10 @@ func TestSuccessfulUpdateRemoteMirrorRequestWithKeepDivergentRefs(t *testing.T)
gittest.Exec(t, cfg, gitArgs...)
}
firstRequest := &gitalypb.UpdateRemoteMirrorRequest{
- Repository: testRepo,
- RefName: remoteName,
+ Repository: testRepo,
+ Remote: &gitalypb.UpdateRemoteMirrorRequest_Remote{
+ Url: mirrorPath,
+ },
KeepDivergentRefs: true,
}
@@ -927,7 +929,6 @@ func TestFailedUpdateRemoteMirrorRequestDueToValidation(t *testing.T) {
serverSocketPath := testserver.RunGitalyServer(t, cfg, nil, func(srv *grpc.Server, deps *service.Dependencies) {
gitalypb.RegisterRemoteServiceServer(srv, NewServer(
deps.GetCfg(),
- deps.GetRubyServer(),
deps.GetLocator(),
deps.GetGitCmdFactory(),
deps.GetCatfileCache(),
@@ -948,14 +949,9 @@ func TestFailedUpdateRemoteMirrorRequestDueToValidation(t *testing.T) {
desc: "empty Repository",
request: &gitalypb.UpdateRemoteMirrorRequest{
Repository: nil,
- RefName: "remote_mirror_1",
- },
- },
- {
- desc: "empty RefName",
- request: &gitalypb.UpdateRemoteMirrorRequest{
- Repository: testRepo,
- RefName: "",
+ Remote: &gitalypb.UpdateRemoteMirrorRequest_Remote{
+ Url: "something",
+ },
},
},
{
@@ -967,14 +963,6 @@ func TestFailedUpdateRemoteMirrorRequestDueToValidation(t *testing.T) {
},
},
},
- {
- desc: "both remote name and remote parameters set",
- request: &gitalypb.UpdateRemoteMirrorRequest{
- Repository: testRepo,
- RefName: "foobar",
- Remote: &gitalypb.UpdateRemoteMirrorRequest_Remote{},
- },
- },
}
for _, tc := range testCases {
diff --git a/internal/gitaly/service/repository/config.go b/internal/gitaly/service/repository/config.go
index 452eabb82..2a0bab645 100644
--- a/internal/gitaly/service/repository/config.go
+++ b/internal/gitaly/service/repository/config.go
@@ -173,6 +173,7 @@ func (s *server) SetConfig(ctx context.Context, req *gitalypb.SetConfigRequest)
return nil, helper.ErrInternalf("preimage vote on config: %v", err)
}
+ //nolint:staticcheck
response, err := client.SetConfig(clientCtx, req)
if err != nil {
return nil, err
diff --git a/internal/gitaly/service/repository/config_test.go b/internal/gitaly/service/repository/config_test.go
index 11aeec5cf..a47f4894c 100644
--- a/internal/gitaly/service/repository/config_test.go
+++ b/internal/gitaly/service/repository/config_test.go
@@ -113,6 +113,7 @@ func TestDeleteConfig(t *testing.T) {
gittest.Exec(t, cfg, "-C", repoPath, "config", k, "blabla")
}
+ //nolint:staticcheck
_, err := client.DeleteConfig(ctx, &gitalypb.DeleteConfigRequest{Repository: repo, Keys: tc.reqKeys})
if tc.code == codes.OK {
require.NoError(t, err)
@@ -156,6 +157,7 @@ func TestDeleteConfigTransactional(t *testing.T) {
gittest.Exec(t, cfg, "-C", repoPath, "config", "delete.me", "now")
modifiedContents := testhelper.MustReadFile(t, filepath.Join(repoPath, "config"))
+ //nolint:staticcheck
_, err = client.DeleteConfig(ctx, &gitalypb.DeleteConfigRequest{
Repository: repo,
Keys: []string{"delete.me"},
@@ -205,6 +207,7 @@ func testSetConfig(t *testing.T, cfg config.Cfg, rubySrv *rubyserver.Server) {
testRepo, testRepoPath := gittest.CloneRepo(t, cfg, cfg.Storages[0])
+ //nolint:staticcheck
_, err := client.SetConfig(ctx, &gitalypb.SetConfigRequest{Repository: testRepo, Entries: tc.entries})
if tc.code != codes.OK {
@@ -251,6 +254,7 @@ func testSetConfigTransactional(t *testing.T, cfg config.Cfg, rubySrv *rubyserve
unmodifiedContents := testhelper.MustReadFile(t, filepath.Join(repoPath, "config"))
+ //nolint:staticcheck
_, err = client.SetConfig(ctx, &gitalypb.SetConfigRequest{
Repository: repo,
Entries: []*gitalypb.SetConfigRequest_Entry{
diff --git a/internal/gitaly/service/repository/fetch_remote.go b/internal/gitaly/service/repository/fetch_remote.go
index 4d3a77e3b..34a9c90fa 100644
--- a/internal/gitaly/service/repository/fetch_remote.go
+++ b/internal/gitaly/service/repository/fetch_remote.go
@@ -5,7 +5,6 @@ import (
"context"
"fmt"
"io"
- "strings"
"time"
gitalyerrors "gitlab.com/gitlab-org/gitaly/v14/internal/errors"
@@ -39,34 +38,28 @@ func (s *server) FetchRemote(ctx context.Context, req *gitalypb.FetchRemoteReque
}
repo := s.localrepo(req.GetRepository())
- remoteName := req.GetRemote()
+ remoteName := "inmemory"
+ remoteURL := req.GetRemoteParams().GetUrl()
- if params := req.GetRemoteParams(); params != nil {
- remoteName = "inmemory"
-
- remoteURL := params.GetUrl()
- refspecs := s.getRefspecs(params.GetMirrorRefmaps())
-
- config := []git.ConfigPair{
- {Key: "remote.inmemory.url", Value: remoteURL},
- }
-
- for _, refspec := range refspecs {
- config = append(config, git.ConfigPair{
- Key: "remote.inmemory.fetch", Value: refspec,
- })
- }
+ config := []git.ConfigPair{
+ {Key: "remote.inmemory.url", Value: remoteURL},
+ }
- if authHeader := params.GetHttpAuthorizationHeader(); authHeader != "" {
- config = append(config, git.ConfigPair{
- Key: fmt.Sprintf("http.%s.extraHeader", remoteURL),
- Value: "Authorization: " + authHeader,
- })
- }
+ for _, refspec := range s.getRefspecs(req.GetRemoteParams().GetMirrorRefmaps()) {
+ config = append(config, git.ConfigPair{
+ Key: "remote.inmemory.fetch", Value: refspec,
+ })
+ }
- opts.CommandOptions = append(opts.CommandOptions, git.WithConfigEnv(config...))
+ if authHeader := req.GetRemoteParams().GetHttpAuthorizationHeader(); authHeader != "" {
+ config = append(config, git.ConfigPair{
+ Key: fmt.Sprintf("http.%s.extraHeader", remoteURL),
+ Value: "Authorization: " + authHeader,
+ })
}
+ opts.CommandOptions = append(opts.CommandOptions, git.WithConfigEnv(config...))
+
sshCommand, cleanup, err := git.BuildSSHInvocation(ctx, req.GetSshKey(), req.GetKnownHosts())
if err != nil {
return nil, err
@@ -159,18 +152,12 @@ func (s *server) validateFetchRemoteRequest(req *gitalypb.FetchRemoteRequest) er
return helper.ErrInvalidArgument(gitalyerrors.ErrEmptyRepository)
}
- params := req.GetRemoteParams()
- if params == nil {
- remote := req.GetRemote()
- if strings.TrimSpace(remote) == "" {
- return helper.ErrInvalidArgument(fmt.Errorf(`blank or empty "remote": %q`, remote))
- }
- return nil
+ if req.GetRemoteParams() == nil {
+ return helper.ErrInvalidArgumentf("missing remote params")
}
- remoteURL := params.GetUrl()
- if strings.TrimSpace(remoteURL) == "" {
- return helper.ErrInvalidArgumentf("blank or empty remote URL: %q", remoteURL)
+ if req.GetRemoteParams().GetUrl() == "" {
+ return helper.ErrInvalidArgumentf("blank or empty remote URL")
}
return nil
diff --git a/internal/gitaly/service/repository/fetch_remote_test.go b/internal/gitaly/service/repository/fetch_remote_test.go
index df99b31a5..05618d95d 100644
--- a/internal/gitaly/service/repository/fetch_remote_test.go
+++ b/internal/gitaly/service/repository/fetch_remote_test.go
@@ -33,7 +33,7 @@ import (
"google.golang.org/grpc/status"
)
-func copyRepoWithNewRemote(t *testing.T, cfg config.Cfg, repo *gitalypb.Repository, repoPath string, remote string) (*gitalypb.Repository, string) {
+func copyRepo(t *testing.T, cfg config.Cfg, repo *gitalypb.Repository, repoPath string) *gitalypb.Repository {
cloneRepo := &gitalypb.Repository{
StorageName: repo.GetStorageName(),
RelativePath: filepath.Join(filepath.Dir(repo.GetRelativePath()), "fetch-remote-clone.git"),
@@ -44,9 +44,7 @@ func copyRepoWithNewRemote(t *testing.T, cfg config.Cfg, repo *gitalypb.Reposito
gittest.Exec(t, cfg, "clone", "--bare", repoPath, clonePath)
- gittest.Exec(t, cfg, "-C", clonePath, "remote", "add", remote, repoPath)
-
- return cloneRepo, clonePath
+ return cloneRepo
}
func TestFetchRemoteSuccess(t *testing.T) {
@@ -56,15 +54,14 @@ func TestFetchRemoteSuccess(t *testing.T) {
ctx, cancel := testhelper.Context()
defer cancel()
- cloneRepo, cloneRepoPath := copyRepoWithNewRemote(t, cfg, repo, repoPath, "my-remote")
- defer func() {
- require.NoError(t, os.RemoveAll(cloneRepoPath))
- }()
+ cloneRepo := copyRepo(t, cfg, repo, repoPath)
// Ensure there's a new tag to fetch
gittest.CreateTag(t, cfg, repoPath, "testtag", "master", nil)
- req := &gitalypb.FetchRemoteRequest{Repository: cloneRepo, Remote: "my-remote", Timeout: 120, CheckTagsChanged: true}
+ req := &gitalypb.FetchRemoteRequest{Repository: cloneRepo, RemoteParams: &gitalypb.Remote{
+ Url: repoPath,
+ }, Timeout: 120, CheckTagsChanged: true}
resp, err := client.FetchRemote(ctx, req)
require.NoError(t, err)
require.NotNil(t, resp)
@@ -119,23 +116,6 @@ func TestFetchRemote_sshCommand(t *testing.T) {
expectedOutput string
}{
{
- desc: "remote name without SSH key",
- request: &gitalypb.FetchRemoteRequest{
- Repository: repo,
- Remote: "my-remote",
- },
- expectedOutput: "ssh\n",
- },
- {
- desc: "remote name with SSH key",
- request: &gitalypb.FetchRemoteRequest{
- Repository: repo,
- Remote: "my-remote",
- SshKey: "mykey",
- },
- expectedOutput: "ssh\n-oIdentitiesOnly=yes\nmykey",
- },
- {
desc: "remote parameters without SSH key",
request: &gitalypb.FetchRemoteRequest{
Repository: repo,
@@ -176,10 +156,7 @@ func TestFetchRemote_withDefaultRefmaps(t *testing.T) {
sourceRepo := localrepo.NewTestRepo(t, cfg, sourceRepoProto)
- targetRepoProto, targetRepoPath := copyRepoWithNewRemote(t, cfg, sourceRepoProto, sourceRepoPath, "my-remote")
- defer func() {
- require.NoError(t, os.RemoveAll(targetRepoPath))
- }()
+ targetRepoProto := copyRepo(t, cfg, sourceRepoProto, sourceRepoPath)
targetRepo := localrepo.NewTestRepo(t, cfg, targetRepoProto)
port, stopGitServer := gittest.GitServer(t, cfg, sourceRepoPath, nil)
@@ -276,33 +253,6 @@ func TestFetchRemote_prune(t *testing.T) {
shouldExist bool
}{
{
- desc: "NoPrune=true should not delete reference matching remote's refspec",
- request: &gitalypb.FetchRemoteRequest{
- Remote: "my-remote",
- NoPrune: true,
- },
- ref: "refs/remotes/my-remote/nonexistent",
- shouldExist: true,
- },
- {
- desc: "NoPrune=false should delete reference matching remote's refspec",
- request: &gitalypb.FetchRemoteRequest{
- Remote: "my-remote",
- NoPrune: false,
- },
- ref: "refs/remotes/my-remote/nonexistent",
- shouldExist: false,
- },
- {
- desc: "NoPrune=false should not delete ref outside of remote's refspec",
- request: &gitalypb.FetchRemoteRequest{
- Remote: "my-remote",
- NoPrune: false,
- },
- ref: "refs/heads/nonexistent",
- shouldExist: true,
- },
- {
desc: "NoPrune=true with explicit Remote should not delete reference",
request: &gitalypb.FetchRemoteRequest{
RemoteParams: &gitalypb.Remote{
@@ -340,10 +290,7 @@ func TestFetchRemote_prune(t *testing.T) {
},
} {
t.Run(tc.desc, func(t *testing.T) {
- targetRepoProto, targetRepoPath := copyRepoWithNewRemote(t, cfg, sourceRepo, sourceRepoPath, "my-remote")
- defer func() {
- require.NoError(t, os.RemoveAll(targetRepoPath))
- }()
+ targetRepoProto := copyRepo(t, cfg, sourceRepo, sourceRepoPath)
targetRepo := localrepo.NewTestRepo(t, cfg, targetRepoProto)
ctx, cancel := testhelper.Context()
@@ -393,31 +340,6 @@ func TestFetchRemote_force(t *testing.T) {
expectedRefs map[git.ReferenceName]git.ObjectID
}{
{
- desc: "remote without force fails with diverging refs",
- request: &gitalypb.FetchRemoteRequest{
- Remote: "my-remote",
- },
- expectedErr: status.Error(codes.Unknown, "fetch remote: exit status 1"),
- expectedRefs: map[git.ReferenceName]git.ObjectID{
- "refs/heads/master": branchOID,
- "refs/tags/v1.0.0": tagOID,
- },
- },
- {
- desc: "remote with force updates diverging refs",
- request: &gitalypb.FetchRemoteRequest{
- Remote: "my-remote",
- Force: true,
- },
- // We're fetching from `my-remote` here, which is set up to have a default
- // refspec of "+refs/heads/*:refs/remotes/foobar/*". As such, no normal
- // branches would get updated.
- expectedRefs: map[git.ReferenceName]git.ObjectID{
- "refs/heads/master": branchOID,
- "refs/tags/v1.0.0": divergingTagOID,
- },
- },
- {
desc: "remote params without force fails with diverging refs",
request: &gitalypb.FetchRemoteRequest{
RemoteParams: &gitalypb.Remote{
@@ -496,10 +418,7 @@ func TestFetchRemote_force(t *testing.T) {
},
} {
t.Run(tc.desc, func(t *testing.T) {
- targetRepoProto, targetRepoPath := copyRepoWithNewRemote(t, cfg, sourceRepoProto, sourceRepoPath, "my-remote")
- defer func() {
- require.NoError(t, os.RemoveAll(targetRepoPath))
- }()
+ targetRepoProto := copyRepo(t, cfg, sourceRepoProto, sourceRepoPath)
targetRepo := localrepo.NewTestRepo(t, cfg, targetRepoProto)
@@ -555,8 +474,10 @@ func TestFetchRemoteFailure(t *testing.T) {
desc: "no repository",
req: &gitalypb.FetchRemoteRequest{
Repository: nil,
- Remote: remoteName,
- Timeout: 1000,
+ RemoteParams: &gitalypb.Remote{
+ Url: remoteName,
+ },
+ Timeout: 1000,
},
code: codes.InvalidArgument,
errMsg: "empty Repository",
@@ -568,7 +489,9 @@ func TestFetchRemoteFailure(t *testing.T) {
StorageName: "invalid",
RelativePath: "foobar.git",
},
- Remote: remoteName,
+ RemoteParams: &gitalypb.Remote{
+ Url: remoteName,
+ },
Timeout: 1000,
},
// the error text is shortened to only a single word as requests to gitaly done via praefect returns different error messages
@@ -576,14 +499,13 @@ func TestFetchRemoteFailure(t *testing.T) {
errMsg: "invalid",
},
{
- desc: "invalid remote",
+ desc: "missing remote",
req: &gitalypb.FetchRemoteRequest{
Repository: repo,
- Remote: "",
Timeout: 1000,
},
code: codes.InvalidArgument,
- errMsg: `blank or empty "remote"`,
+ errMsg: "missing remote params",
},
{
desc: "invalid remote url",
diff --git a/internal/gitaly/service/repository/fork_test.go b/internal/gitaly/service/repository/fork_test.go
index 4aece7e27..f91d09f7a 100644
--- a/internal/gitaly/service/repository/fork_test.go
+++ b/internal/gitaly/service/repository/fork_test.go
@@ -228,7 +228,7 @@ func runSecureServer(t *testing.T, cfg config.Cfg, rubySrv *rubyserver.Server) s
gitalypb.RegisterRepositoryServiceServer(server, NewServer(cfg, rubySrv, locator, txManager, gitCmdFactory, catfileCache))
gitalypb.RegisterHookServiceServer(server, hookservice.NewServer(cfg, hookManager, gitCmdFactory, nil))
- gitalypb.RegisterRemoteServiceServer(server, remote.NewServer(cfg, rubySrv, locator, gitCmdFactory, catfileCache, txManager))
+ gitalypb.RegisterRemoteServiceServer(server, remote.NewServer(cfg, locator, gitCmdFactory, catfileCache, txManager))
gitalypb.RegisterSSHServiceServer(server, ssh.NewServer(cfg, locator, gitCmdFactory, txManager))
gitalypb.RegisterRefServiceServer(server, ref.NewServer(cfg, locator, gitCmdFactory, txManager, catfileCache))
gitalypb.RegisterCommitServiceServer(server, commit.NewServer(cfg, locator, gitCmdFactory, nil, catfileCache))
diff --git a/internal/gitaly/service/repository/squash_in_progress_test.go b/internal/gitaly/service/repository/squash_in_progress_test.go
index 3661d870a..c34ca28c8 100644
--- a/internal/gitaly/service/repository/squash_in_progress_test.go
+++ b/internal/gitaly/service/repository/squash_in_progress_test.go
@@ -47,6 +47,7 @@ func TestSuccessfulIsSquashInProgressRequest(t *testing.T) {
ctx, cancel := testhelper.Context()
defer cancel()
+ //nolint:staticcheck
response, err := client.IsSquashInProgress(ctx, testCase.request)
require.NoError(t, err)
@@ -81,6 +82,7 @@ func TestFailedIsSquashInProgressRequestDueToValidations(t *testing.T) {
ctx, cancel := testhelper.Context()
defer cancel()
+ //nolint:staticcheck
_, err := client.IsSquashInProgress(ctx, testCase.request)
testhelper.RequireGrpcError(t, err, testCase.code)
})
diff --git a/internal/gitaly/service/repository/testhelper_test.go b/internal/gitaly/service/repository/testhelper_test.go
index e71ca203c..54e8c3d47 100644
--- a/internal/gitaly/service/repository/testhelper_test.go
+++ b/internal/gitaly/service/repository/testhelper_test.go
@@ -130,7 +130,6 @@ func runRepositoryServerWithConfig(t testing.TB, cfg config.Cfg, rubySrv *rubyse
gitalypb.RegisterHookServiceServer(srv, hookservice.NewServer(cfg, deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache()))
gitalypb.RegisterRemoteServiceServer(srv, remote.NewServer(
cfg,
- rubySrv,
deps.GetLocator(),
deps.GetGitCmdFactory(),
deps.GetCatfileCache(),
diff --git a/internal/gitaly/service/setup/register.go b/internal/gitaly/service/setup/register.go
index 5c5d0a090..09a7210e6 100644
--- a/internal/gitaly/service/setup/register.go
+++ b/internal/gitaly/service/setup/register.go
@@ -126,7 +126,6 @@ func RegisterAll(srv *grpc.Server, deps *service.Dependencies) {
))
gitalypb.RegisterRemoteServiceServer(srv, remote.NewServer(
deps.GetCfg(),
- deps.GetRubyServer(),
deps.GetLocator(),
deps.GetGitCmdFactory(),
deps.GetCatfileCache(),
diff --git a/internal/metadata/featureflag/feature_flags.go b/internal/metadata/featureflag/feature_flags.go
index d61ffe366..1f402581a 100644
--- a/internal/metadata/featureflag/feature_flags.go
+++ b/internal/metadata/featureflag/feature_flags.go
@@ -5,23 +5,15 @@ package featureflag
// NOTE: if you add a new feature flag please add it to the `All` list defined below.
var (
// GoSetConfig enables git2go implementation of SetConfig.
- GoSetConfig = FeatureFlag{Name: "go_set_config", OnByDefault: false}
- // FindAllTagsPipeline enables the alternative pipeline implementation for finding
- // tags via FindAllTags.
- FindAllTagsPipeline = FeatureFlag{Name: "find_all_tags_pipeline", OnByDefault: false}
- // QuarantinedResolveCOnflicts enables use of a quarantine object directory for ResolveConflicts.
- QuarantinedResolveConflicts = FeatureFlag{Name: "quarantined_resolve_conflicts", OnByDefault: false}
+ GoSetConfig = FeatureFlag{Name: "go_set_config", OnByDefault: true}
// GoUserApplyPatch enables the Go implementation of UserApplyPatch
GoUserApplyPatch = FeatureFlag{Name: "go_user_apply_patch", OnByDefault: true}
- // Quarantine enables the use of quarantine directories.
- Quarantine = FeatureFlag{Name: "quarantine", OnByDefault: false}
+ // PackObjectsHookWithSidechannel enables Unix socket sidechannels in 'gitaly-hooks git pack-objects'.
+ PackObjectsHookWithSidechannel = FeatureFlag{Name: "pack_objects_hook_with_sidechannel", OnByDefault: false}
)
// All includes all feature flags.
var All = []FeatureFlag{
GoSetConfig,
- FindAllTagsPipeline,
- QuarantinedResolveConflicts,
GoUserApplyPatch,
- Quarantine,
}
diff --git a/internal/praefect/coordinator.go b/internal/praefect/coordinator.go
index d0c8bcad8..5ebe99fb0 100644
--- a/internal/praefect/coordinator.go
+++ b/internal/praefect/coordinator.go
@@ -62,9 +62,7 @@ var transactionRPCs = map[string]transactionsCondition{
"/gitaly.OperationService/UserUpdateBranch": transactionsEnabled,
"/gitaly.OperationService/UserUpdateSubmodule": transactionsEnabled,
"/gitaly.RefService/DeleteRefs": transactionsEnabled,
- "/gitaly.RemoteService/AddRemote": transactionsEnabled,
"/gitaly.RemoteService/FetchInternalRemote": transactionsEnabled,
- "/gitaly.RemoteService/RemoveRemote": transactionsEnabled,
"/gitaly.RepositoryService/ApplyGitattributes": transactionsEnabled,
"/gitaly.RepositoryService/CloneFromPool": transactionsEnabled,
"/gitaly.RepositoryService/CloneFromPoolInternal": transactionsEnabled,
diff --git a/internal/praefect/datastore/listener_postgres.go b/internal/praefect/datastore/listener_postgres.go
index edaba97d3..9c45f3537 100644
--- a/internal/praefect/datastore/listener_postgres.go
+++ b/internal/praefect/datastore/listener_postgres.go
@@ -88,6 +88,7 @@ func NewPostgresListener(logger logrus.FieldLogger, opts PostgresListenerOpts, h
func (pgl *PostgresListener) connect() error {
firstConnectionAttempt := true
connectErrChan := make(chan error, 1)
+ listenerAssignedChan := make(chan struct{})
connectionLifecycle := func(eventType pq.ListenerEventType, err error) {
pgl.reconnectTotal.WithLabelValues(listenerEventTypeToString(eventType)).Inc()
@@ -107,8 +108,14 @@ func (pgl *PostgresListener) connect() error {
// once the connection is established we can be sure that the connection
// address is correct and all other errors could be considered as
// a temporary, so listener will try to re-connect and proceed.
- pgl.async(pgl.ping)
- pgl.async(pgl.handleNotifications)
+ pgl.async(func() {
+ <-listenerAssignedChan
+ pgl.ping()
+ })
+ pgl.async(func() {
+ <-listenerAssignedChan
+ pgl.handleNotifications()
+ })
close(connectErrChan) // to signal the connection was established without troubles
firstConnectionAttempt = false
@@ -123,6 +130,7 @@ func (pgl *PostgresListener) connect() error {
}
pgl.listener = pq.NewListener(pgl.opts.Addr, pgl.opts.MinReconnectInterval, pgl.opts.MaxReconnectInterval, connectionLifecycle)
+ close(listenerAssignedChan)
listenErrChan := make(chan error, 1)
pgl.async(func() {
diff --git a/internal/praefect/protoregistry/protoregistry_test.go b/internal/praefect/protoregistry/protoregistry_test.go
index 36c90db92..675e3798b 100644
--- a/internal/praefect/protoregistry/protoregistry_test.go
+++ b/internal/praefect/protoregistry/protoregistry_test.go
@@ -100,9 +100,7 @@ func TestNewProtoRegistry(t *testing.T) {
"PackRefs": protoregistry.OpMutator,
},
"RemoteService": map[string]protoregistry.OpType{
- "AddRemote": protoregistry.OpMutator,
"FetchInternalRemote": protoregistry.OpMutator,
- "RemoveRemote": protoregistry.OpMutator,
"UpdateRemoteMirror": protoregistry.OpAccessor,
"FindRemoteRepository": protoregistry.OpAccessor,
"FindRemoteRootRef": protoregistry.OpAccessor,
diff --git a/internal/streamrpc/client.go b/internal/streamrpc/client.go
deleted file mode 100644
index afe7fc7f2..000000000
--- a/internal/streamrpc/client.go
+++ /dev/null
@@ -1,149 +0,0 @@
-package streamrpc
-
-import (
- "context"
- "encoding/json"
- "fmt"
- "net"
- "time"
-
- "google.golang.org/grpc"
- "google.golang.org/grpc/credentials"
- "google.golang.org/grpc/metadata"
- "google.golang.org/protobuf/proto"
-)
-
-// DialFunc is an abstraction that allows Call to transparently handle
-// unencrypted connections and TLS connections.
-type DialFunc func(time.Duration) (net.Conn, error)
-
-func doCall(dial DialFunc, request []byte, callback func(net.Conn) error) error {
- deadline := time.Now().Add(defaultHandshakeTimeout)
-
- c, err := dial(time.Until(deadline))
- if err != nil {
- return fmt.Errorf("streamrpc client: dial: %w", err)
- }
- defer c.Close()
-
- if err := sendFrame(c, request, deadline); err != nil {
- return fmt.Errorf("streamrpc client: send handshake: %w", err)
- }
-
- responseBytes, err := recvFrame(c, deadline)
- if err != nil {
- return fmt.Errorf("streamrpc client: receive handshake: %w", err)
- }
-
- if len(responseBytes) > 0 {
- var resp response
- if err := json.Unmarshal(responseBytes, &resp); err != nil {
- return fmt.Errorf("streamrpc client: unmarshal handshake response: %w", err)
- }
-
- return &RequestRejectedError{resp.Error}
- }
-
- if err := callback(c); err != nil {
- return err
- }
-
- return c.Close()
-}
-
-// RequestRejectedError is returned by Call if the server explicitly
-// rejected the request (as opposed to e.g. an IO timeout).
-type RequestRejectedError struct{ message string }
-
-func (r *RequestRejectedError) Error() string { return r.message }
-
-type callOptions struct {
- creds credentials.PerRPCCredentials
- interceptor grpc.UnaryClientInterceptor
-}
-
-func (opts *callOptions) addCredentials(ctx context.Context) (context.Context, error) {
- headers, err := opts.creds.GetRequestMetadata(ctx)
- if err != nil {
- return nil, err
- }
- for k, v := range headers {
- ctx = metadata.AppendToOutgoingContext(ctx, k, v)
- }
- return ctx, nil
-}
-
-// CallOption is an abstraction that lets us pass 0 or more options to a call.
-type CallOption func(*callOptions)
-
-type nullCredentials struct{}
-
-func (nullCredentials) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) {
- return nil, nil
-}
-
-func (nullCredentials) RequireTransportSecurity() bool { return false }
-
-var _ credentials.PerRPCCredentials = nullCredentials{}
-
-func nullClientInterceptor(ctx context.Context, method string, req, resp interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
- return invoker(ctx, method, req, resp, cc, opts...)
-}
-
-func defaultCallOptions() *callOptions {
- return &callOptions{
- creds: nullCredentials{},
- interceptor: nullClientInterceptor,
- }
-}
-
-// WithCredentials adds gRPC per-request credentials to an outgoing call.
-func WithCredentials(creds credentials.PerRPCCredentials) CallOption {
- return func(o *callOptions) { o.creds = creds }
-}
-
-// WithClientInterceptor adds a gRPC unary client interceptor to an outgoing call.
-func WithClientInterceptor(interceptor grpc.UnaryClientInterceptor) CallOption {
- return func(o *callOptions) { o.interceptor = interceptor }
-}
-
-// Call makes a StreamRPC call. The dial function determines the remote
-// address. The method argument is the full name of the StreamRPC method
-// we are calling (e.g. "/foo.BarService/BazStream"). Msg is the request
-// message. If the server accepts the call, callback is called with a
-// connection.
-func Call(ctx context.Context, dial DialFunc, method string, msg proto.Message, callback func(net.Conn) error, opts ...CallOption) (err error) {
- callOpts := defaultCallOptions()
- for _, o := range opts {
- o(callOpts)
- }
-
- invoke := func(ctx context.Context, method string, msg, _ interface{}, _ *grpc.ClientConn, _ ...grpc.CallOption) error {
- ctx, err := callOpts.addCredentials(ctx)
- if err != nil {
- return fmt.Errorf("streamrpc client: add credentials: %w", err)
- }
-
- msgBytes, err := proto.Marshal(msg.(proto.Message))
- if err != nil {
- return fmt.Errorf("streamrpc client: marshal outgoing protobuf message: %w", err)
- }
-
- req := &request{
- Method: method,
- Message: msgBytes,
- }
- if md, ok := metadata.FromOutgoingContext(ctx); ok {
- req.Metadata = md
- }
-
- reqBytes, err := json.Marshal(req)
- if err != nil {
- return fmt.Errorf("streamrpc client: marshal request json: %w", err)
- }
-
- return doCall(dial, reqBytes, callback)
- }
-
- return callOpts.interceptor(ctx, method, msg, nil, nil, invoke)
-}
diff --git a/internal/streamrpc/common.go b/internal/streamrpc/common.go
deleted file mode 100644
index 88c3b6148..000000000
--- a/internal/streamrpc/common.go
+++ /dev/null
@@ -1,82 +0,0 @@
-package streamrpc
-
-import (
- "encoding/binary"
- "errors"
- "io"
- "net"
- "os"
- "time"
-)
-
-type request struct {
- Method string
- Message []byte
- Metadata map[string][]string
-}
-
-type response struct{ Error string }
-
-const (
- defaultHandshakeTimeout = 10 * time.Second
-
- // The frames exchanged during the handshake have a uint32 length prefix
- // so their theoretical maximum size is 4GB. We don't want to allow that
- // so we enforce a lower limit. This number was chosen because it is
- // close to the default grpc-go maximum message size.
- maxFrameSize = (1 << 20) - 1
-)
-
-var (
- errFrameTooLarge = errors.New("frame too large")
-)
-
-func sendFrame(c net.Conn, frame []byte, deadline time.Time) error {
- if len(frame) > maxFrameSize {
- return errFrameTooLarge
- }
-
- header := make([]byte, 4)
- binary.BigEndian.PutUint32(header, uint32(len(frame)))
- buffers := net.Buffers([][]byte{header, frame})
-
- return errAsync(deadline, func() error { _, err := buffers.WriteTo(c); return err })
-}
-
-func recvFrame(c net.Conn, deadline time.Time) ([]byte, error) {
- header := make([]byte, 4)
- if err := errAsync(deadline, func() error { _, err := io.ReadFull(c, header); return err }); err != nil {
- return nil, err
- }
-
- size := binary.BigEndian.Uint32(header)
- if size > maxFrameSize {
- return nil, errFrameTooLarge
- }
- frame := make([]byte, size)
- if err := errAsync(deadline, func() error { _, err := io.ReadFull(c, frame); return err }); err != nil {
- return nil, err
- }
-
- return frame, nil
-}
-
-// errAsync is a hack to work around the fact that grpc-go calls
-// SetDeadline on connections _after_ handing them over to us. Because of
-// this race, we cannot use SetDeadline which would have been nicer.
-//
-// https://github.com/grpc/grpc-go/blob/v1.38.0/server.go#L853
-func errAsync(deadline time.Time, f func() error) error {
- tm := time.NewTimer(time.Until(deadline))
- defer tm.Stop()
-
- errC := make(chan error, 1)
- go func() { errC <- f() }()
-
- select {
- case <-tm.C:
- return os.ErrDeadlineExceeded
- case err := <-errC:
- return err
- }
-}
diff --git a/internal/streamrpc/frame_test.go b/internal/streamrpc/frame_test.go
deleted file mode 100644
index cb665a47f..000000000
--- a/internal/streamrpc/frame_test.go
+++ /dev/null
@@ -1,139 +0,0 @@
-package streamrpc
-
-import (
- "io"
- "io/ioutil"
- "net"
- "os"
- "strings"
- "syscall"
- "testing"
- "time"
-
- "github.com/stretchr/testify/require"
-)
-
-func TestSendFrame(t *testing.T) {
- largeString := strings.Repeat("x", 0xfffff)
-
- testCases := []struct {
- desc string
- in string
- out string
- err error
- }{
- {desc: "empty", out: "\x00\x00\x00\x00"},
- {desc: "not empty", in: "hello", out: "\x00\x00\x00\x05hello"},
- {desc: "very large", in: largeString, out: "\x00\x0f\xff\xff" + largeString},
- {desc: "too large", in: "z" + largeString, err: errFrameTooLarge},
- }
-
- type result struct {
- data string
- err error
- }
-
- for _, tc := range testCases {
- t.Run(tc.desc, func(t *testing.T) {
- client, server := socketPair(t)
- ch := make(chan result, 1)
- go func() {
- out, err := ioutil.ReadAll(server)
- ch <- result{data: string(out), err: err}
- }()
-
- err := sendFrame(client, []byte(tc.in), time.Now().Add(10*time.Second))
- if tc.err != nil {
- require.Equal(t, tc.err, err)
- return
- }
-
- require.NoError(t, err)
- require.NoError(t, client.Close())
-
- res := <-ch
- require.NoError(t, res.err)
- require.Equal(t, tc.out, res.data)
- })
- }
-}
-
-func TestSendFrame_timeout(t *testing.T) {
- client, _ := socketPair(t)
-
- // Ensure frame is bigger than write buffer, so that sendFrame will
- // block. Otherwise we cannot observe the timeout behavior.
- frame := make([]byte, 10*1024)
- require.NoError(t, client.(*net.UnixConn).SetWriteBuffer(1024))
-
- err := sendFrame(client, frame, time.Now())
- require.ErrorIs(t, err, os.ErrDeadlineExceeded)
-}
-
-func TestRecvFrame(t *testing.T) {
- largeString := strings.Repeat("x", 0xfffff)
-
- testCases := []struct {
- desc string
- out string
- in string
- err error
- }{
- {desc: "empty", in: "\x00\x00\x00\x00", out: ""},
- {desc: "not empty", in: "\x00\x00\x00\x05hello", out: "hello"},
- {desc: "very large", in: "\x00\x0f\xff\xff" + largeString, out: largeString},
- {desc: "too large", in: "\x00\x10\x00\x00" + "z" + largeString, err: errFrameTooLarge},
- }
-
- for _, tc := range testCases {
- t.Run(tc.desc, func(t *testing.T) {
- client, server := socketPair(t)
- ch := make(chan error, 1)
- go func() {
- ch <- func() error {
- n, err := server.Write([]byte(tc.in))
- if n != len(tc.in) {
- return io.ErrShortWrite
- }
- return err
- }()
- }()
-
- out, err := recvFrame(client, time.Now().Add(10*time.Second))
- if tc.err != nil {
- require.Equal(t, tc.err, err)
- return
- }
-
- require.NoError(t, err)
- require.Equal(t, tc.out, string(out))
-
- require.NoError(t, <-ch)
- })
- }
-}
-
-func TestRecvFrame_timeout(t *testing.T) {
- client, _ := socketPair(t)
- _, err := recvFrame(client, time.Now())
- require.ErrorIs(t, err, os.ErrDeadlineExceeded)
-}
-
-func socketPair(t *testing.T) (net.Conn, net.Conn) {
- t.Helper()
-
- fds, err := syscall.Socketpair(syscall.AF_UNIX, syscall.SOCK_STREAM, 0)
- require.NoError(t, err)
-
- conns := make([]net.Conn, 2)
- for i, fd := range fds[:] {
- f := os.NewFile(uintptr(fd), "socket pair")
- c, err := net.FileConn(f)
- require.NoError(t, err)
- require.NoError(t, f.Close())
- t.Cleanup(func() { c.Close() })
- conns[i] = c
- }
-
- return conns[0], conns[1]
-}
diff --git a/internal/streamrpc/protocol_test.go b/internal/streamrpc/protocol_test.go
deleted file mode 100644
index 5d169c179..000000000
--- a/internal/streamrpc/protocol_test.go
+++ /dev/null
@@ -1,117 +0,0 @@
-package streamrpc
-
-import (
- "context"
- "fmt"
- "io/ioutil"
- "sort"
- "strings"
- "testing"
- "time"
-
- "github.com/stretchr/testify/require"
- testpb "gitlab.com/gitlab-org/gitaly/v14/internal/streamrpc/testdata"
- "google.golang.org/grpc/metadata"
- "google.golang.org/protobuf/types/known/emptypb"
-)
-
-// TestProtocol exclusively uses hard-coded strings to prevent breaking
-// changes in the wire protocol.
-func TestProtocol(t *testing.T) {
- testCases := []struct {
- desc string
- in string
- out string
- }{
- {
- desc: "successful request",
- in: "\x00\x00\x00\x28" + `{"Method":"/test.streamrpc.Test/Stream"}`,
- out: strings.Join([]string{
- "\x00\x00\x00\x00", // Server accepts
- "\n", // Handler prints request field (empty) followed by newline
- }, ""),
- },
- {
- desc: "unknown method",
- in: "\x00\x00\x00\x1b" + `{"Method":"does not exist"}`,
- out: strings.Join([]string{
- "\x00\x00\x00\x2c", // Server rejects by sending non-empty error message
- `{"Error":"method not found: does not exist"}`,
- }, ""),
- },
- {
- desc: "request with message and metadata",
- in: strings.Join([]string{
- "\x00\x00\x00\x73",
- `{`,
- `"Method":"/test.streamrpc.Test/Stream",`,
- `"Message":"EgtoZWxsbyB3b3JsZA==",`, // &testpb.StreamRequest{StringField: "hello world"}
- `"Metadata":{"k1":["v1","v2"],"k2":["v3"]}`,
- `}`,
- }, ""),
- out: strings.Join([]string{
- "\x00\x00\x00\x00", // Server accepts
- "k1: v1\nk1: v2\nk2: v3\n", // Server echoes metadata key-value pairs
- "hello world\n", // Server echoes field from request message
- }, ""),
- },
- }
-
- for _, tc := range testCases {
- t.Run(tc.desc, func(t *testing.T) {
- dial := startServer(
- t,
- NewServer(),
- func(ctx context.Context, in *testpb.StreamRequest) (*emptypb.Empty, error) {
- c, err := AcceptConnection(ctx)
- if err != nil {
- return nil, err
- }
-
- var mdKeys []string
- var md metadata.MD
- if ctxMD, ok := metadata.FromIncomingContext(ctx); ok {
- md = ctxMD
- }
-
- for k := range md {
- mdKeys = append(mdKeys, k)
- }
-
- // Direct go map iteration is non-deterministic. Sort the keys to make it
- // deterministic.
- sort.Strings(mdKeys)
-
- // Echo back metadata so tests can see it was received correctly
- for _, k := range mdKeys {
- for _, v := range md[k] {
- if _, err := fmt.Fprintf(c, "%s: %s\n", k, v); err != nil {
- return nil, err
- }
- }
- }
-
- // Echo back string field so tests can see request was received correctly
- if _, err := fmt.Fprintln(c, in.StringField); err != nil {
- return nil, err
- }
-
- return nil, nil
- },
- )
-
- c, err := dial(10 * time.Second)
- require.NoError(t, err)
- defer c.Close()
- require.NoError(t, c.SetDeadline(time.Now().Add(10*time.Second)))
-
- n, err := c.Write([]byte(tc.in))
- require.NoError(t, err)
- require.Equal(t, len(tc.in), n)
-
- out, err := ioutil.ReadAll(c)
- require.NoError(t, err)
- require.Equal(t, tc.out, string(out))
- })
- }
-}
diff --git a/internal/streamrpc/rpc_test.go b/internal/streamrpc/rpc_test.go
deleted file mode 100644
index 850838465..000000000
--- a/internal/streamrpc/rpc_test.go
+++ /dev/null
@@ -1,312 +0,0 @@
-package streamrpc
-
-import (
- "bytes"
- "context"
- "errors"
- "io"
- "io/ioutil"
- "math/rand"
- "net"
- "strings"
- "testing"
- "time"
-
- "github.com/stretchr/testify/require"
- testpb "gitlab.com/gitlab-org/gitaly/v14/internal/streamrpc/testdata"
- "google.golang.org/grpc"
- "google.golang.org/grpc/metadata"
- "google.golang.org/protobuf/types/known/emptypb"
-)
-
-func TestCall(t *testing.T) {
- const (
- testKey = "test key"
- testValue = "test value"
- blobSize = 1024 * 1024
- )
-
- var receivedValues []string
- var receivedField string
-
- dial := startServer(
- t,
- NewServer(),
- func(ctx context.Context, in *testpb.StreamRequest) (*emptypb.Empty, error) {
- receivedField = in.StringField
-
- if md, ok := metadata.FromIncomingContext(ctx); ok {
- receivedValues = md[testKey]
- }
-
- c, err := AcceptConnection(ctx)
- if err != nil {
- return nil, err
- }
-
- _, err = io.CopyN(c, c, blobSize)
- return nil, err
- },
- )
-
- in := make([]byte, blobSize)
- _, err := rand.Read(in)
- require.NoError(t, err)
-
- var out []byte
- require.NotEqual(t, in, out)
-
- ctx := metadata.AppendToOutgoingContext(context.Background(), testKey, testValue)
- require.NoError(t, Call(
- ctx,
- dial,
- "/test.streamrpc.Test/Stream",
- &testpb.StreamRequest{StringField: "hello world"},
- func(c net.Conn) error {
- errC := make(chan error, 1)
- go func() {
- var err error
- out, err = ioutil.ReadAll(c)
- errC <- err
- }()
-
- if _, err := io.Copy(c, bytes.NewReader(in)); err != nil {
- return err
- }
-
- return <-errC
- },
- ))
-
- require.Equal(t, "hello world", receivedField, "request propagates")
- require.Equal(t, []string{testValue}, receivedValues, "grpc metadata stored in client ctx propagates")
- require.Equal(t, in, out, "byte stream works")
-}
-
-func TestCall_serverError(t *testing.T) {
- dial := startServer(
- t,
- NewServer(),
- func(ctx context.Context, in *testpb.StreamRequest) (*emptypb.Empty, error) {
- return nil, errors.New("this is the server error")
- },
- )
-
- callError := Call(
- context.Background(),
- dial,
- "/test.streamrpc.Test/Stream",
- &testpb.StreamRequest{},
- func(c net.Conn) error { panic("never reached") },
- )
-
- require.Equal(t, &RequestRejectedError{"this is the server error"}, callError)
-}
-
-func TestCall_clientMiddleware(t *testing.T) {
- const (
- testKey = "test key"
- testValue = "test value"
- )
-
- var receivedValues []string
- var receivedField string
-
- dial := startServer(
- t,
- NewServer(),
- func(ctx context.Context, in *testpb.StreamRequest) (*emptypb.Empty, error) {
- _, err := AcceptConnection(ctx)
- return nil, err
- },
- )
-
- var middlewareMethod string
- ctx := metadata.AppendToOutgoingContext(context.Background(), testKey, testValue)
-
- const testMethod = "/test.streamrpc.Test/Stream"
- require.NoError(t, Call(
- ctx,
- dial,
- testMethod,
- &testpb.StreamRequest{StringField: "hello world"},
- func(c net.Conn) error { return nil },
- WithClientInterceptor(func(ctx context.Context, method string, req, _ interface{}, _ *grpc.ClientConn, invoker grpc.UnaryInvoker, _ ...grpc.CallOption) error {
- middlewareMethod = method
- receivedField = req.(*testpb.StreamRequest).StringField
- if md, ok := metadata.FromOutgoingContext(ctx); ok {
- receivedValues = md[testKey]
- }
- return invoker(ctx, method, req, nil, nil)
- }),
- ))
-
- require.Equal(t, testMethod, middlewareMethod, "client middleware sees correct method")
- require.Equal(t, "hello world", receivedField, "client middleware sees request")
- require.Equal(t, []string{testValue}, receivedValues, "client middleware sees context metadata")
-}
-
-func TestCall_clientMiddlewareReject(t *testing.T) {
- dial := startServer(
- t,
- NewServer(),
- func(ctx context.Context, in *testpb.StreamRequest) (*emptypb.Empty, error) {
- panic("never reached")
- },
- )
-
- middlewareError := errors.New("middleware says no")
-
- err := Call(
- context.Background(),
- dial,
- "/test.streamrpc.Test/Stream",
- &testpb.StreamRequest{StringField: "hello world"},
- func(c net.Conn) error { return nil },
- WithClientInterceptor(func(ctx context.Context, method string, req, _ interface{}, _ *grpc.ClientConn, invoker grpc.UnaryInvoker, _ ...grpc.CallOption) error {
- return middlewareError
- }),
- )
-
- require.Equal(t, middlewareError, err)
-}
-
-func TestCall_serverMiddleware(t *testing.T) {
- const (
- testKey = "test key"
- testValue = "test value"
- testMethod = "/test.streamrpc.Test/Stream"
- )
-
- var (
- receivedField string
- middlewareMethod string
- receivedValues []string
- )
-
- interceptorDone := make(chan struct{})
-
- dial := startServer(
- t,
- NewServer(WithServerInterceptor(func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) {
- defer close(interceptorDone)
- middlewareMethod = info.FullMethod
- receivedField = req.(*testpb.StreamRequest).StringField
- if md, ok := metadata.FromIncomingContext(ctx); ok {
- receivedValues = md[testKey]
- }
- return handler(ctx, req)
- })),
- func(ctx context.Context, in *testpb.StreamRequest) (*emptypb.Empty, error) {
- _, err := AcceptConnection(ctx)
- return nil, err
- },
- )
-
- ctx := metadata.AppendToOutgoingContext(context.Background(), testKey, testValue)
- require.NoError(t, Call(
- ctx,
- dial,
- testMethod,
- &testpb.StreamRequest{StringField: "hello world"},
- func(c net.Conn) error { return nil },
- ))
-
- <-interceptorDone
- require.Equal(t, testMethod, middlewareMethod, "server middleware sees correct method")
- require.Equal(t, "hello world", receivedField, "server middleware sees request")
- require.Equal(t, []string{testValue}, receivedValues, "server middleware sees context metadata")
-}
-
-func TestCall_serverMiddlewareReject(t *testing.T) {
- dial := startServer(
- t,
- NewServer(WithServerInterceptor(func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) {
- return nil, errors.New("middleware says no")
- })),
- func(ctx context.Context, in *testpb.StreamRequest) (*emptypb.Empty, error) {
- panic("never reached")
- },
- )
-
- err := Call(
- context.Background(),
- dial,
- "/test.streamrpc.Test/Stream",
- &testpb.StreamRequest{},
- func(c net.Conn) error { return nil },
- )
-
- require.Equal(t, &RequestRejectedError{message: "middleware says no"}, err)
-}
-
-type testCredentials struct {
- values map[string]string
-}
-
-func (tc *testCredentials) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) {
- out := make(map[string]string)
- for k, v := range tc.values {
- out[k] = v
- }
- return out, nil
-}
-
-func (*testCredentials) RequireTransportSecurity() bool { return false }
-
-func TestCall_credentials(t *testing.T) {
- receivedValues := make(map[string]string)
- interceptorDone := make(chan struct{})
-
- dial := startServer(
- t,
- NewServer(),
- func(ctx context.Context, in *testpb.StreamRequest) (*emptypb.Empty, error) {
- defer close(interceptorDone)
-
- if md, ok := metadata.FromIncomingContext(ctx); ok {
- receivedValues["key 1"] = strings.Join(md["key 1"], ",")
- receivedValues["key 2"] = strings.Join(md["key 2"], ",")
- }
-
- _, err := AcceptConnection(ctx)
- return nil, err
- },
- )
-
- inputs := map[string]string{
- "key 1": "value a",
- "key 2": "value b",
- }
-
- require.NoError(t, Call(
- context.Background(),
- dial,
- "/test.streamrpc.Test/Stream",
- &testpb.StreamRequest{},
- func(c net.Conn) error { return nil },
- WithCredentials(&testCredentials{inputs}),
- ))
-
- <-interceptorDone
- require.Equal(t, inputs, receivedValues)
-}
-
-func startServer(t *testing.T, s *Server, th testHandler) DialFunc {
- t.Helper()
- testpb.RegisterTestServer(s, &server{testHandler: th})
- client, server := socketPair(t)
- go func() { _ = s.Handle(server) }()
- return func(time.Duration) (net.Conn, error) { return client, nil }
-}
-
-type testHandler func(ctx context.Context, in *testpb.StreamRequest) (*emptypb.Empty, error)
-
-type server struct {
- testpb.UnimplementedTestServer
- testHandler
-}
-
-func (s *server) Stream(ctx context.Context, in *testpb.StreamRequest) (*emptypb.Empty, error) {
- return s.testHandler(ctx, in)
-}
diff --git a/internal/streamrpc/server.go b/internal/streamrpc/server.go
deleted file mode 100644
index 365898cae..000000000
--- a/internal/streamrpc/server.go
+++ /dev/null
@@ -1,166 +0,0 @@
-package streamrpc
-
-import (
- "context"
- "encoding/json"
- "errors"
- "fmt"
- "net"
- "time"
-
- "google.golang.org/grpc"
- "google.golang.org/grpc/metadata"
- "google.golang.org/protobuf/proto"
-)
-
-var _ grpc.ServiceRegistrar = &Server{}
-
-// Server handles network connections and routes them to StreamRPC handlers.
-type Server struct {
- methods map[string]*method
- interceptor grpc.UnaryServerInterceptor
-}
-
-type method struct {
- *grpc.MethodDesc
- implementation interface{}
-}
-
-// ServerOption is an abstraction that lets you pass 0 or more server
-// options to NewServer.
-type ServerOption func(*Server)
-
-// WithServerInterceptor adds a unary gRPC server interceptor.
-func WithServerInterceptor(interceptor grpc.UnaryServerInterceptor) ServerOption {
- return func(s *Server) { s.interceptor = interceptor }
-}
-
-// NewServer returns a new StreamRPC server. You can pass the result to
-// grpc-go RegisterFooServer functions.
-func NewServer(opts ...ServerOption) *Server {
- s := &Server{
- methods: make(map[string]*method),
- }
- for _, o := range opts {
- o(s)
- }
- return s
-}
-
-// RegisterService implements grpc.ServiceRegistrar. It makes it possible
-// to pass a *Server to grpc-go foopb.RegisterFooServer functions as the
-// first argument.
-func (s *Server) RegisterService(sd *grpc.ServiceDesc, impl interface{}) {
- for i := range sd.Methods {
- m := &sd.Methods[i]
- s.methods["/"+sd.ServiceName+"/"+m.MethodName] = &method{
- MethodDesc: m,
- implementation: impl,
- }
- }
-}
-
-// Handle handles an incoming network connection with the StreamRPC
-// protocol. It is intended to be called from a net.Listener.Accept loop
-// (or something equivalent).
-func (s *Server) Handle(c net.Conn) error {
- defer c.Close()
-
- deadline := time.Now().Add(defaultHandshakeTimeout)
- req, err := recvFrame(c, deadline)
- if err != nil {
- return err
- }
-
- session := &serverSession{
- c: c,
- deadline: deadline,
- }
- if err := s.handleSession(session, req); err != nil {
- return session.reject(err)
- }
-
- return nil
-}
-
-func (s *Server) handleSession(session *serverSession, reqBytes []byte) error {
- req := &request{}
- if err := json.Unmarshal(reqBytes, req); err != nil {
- return err
- }
-
- method, ok := s.methods[req.Method]
- if !ok {
- return fmt.Errorf("method not found: %s", req.Method)
- }
-
- ctx, cancel := serverContext(session, req)
- defer cancel()
-
- if _, err := method.Handler(
- method.implementation,
- ctx,
- func(msg interface{}) error { return proto.Unmarshal(req.Message, msg.(proto.Message)) },
- s.interceptor,
- ); err != nil {
- return err
- }
-
- return nil
-}
-
-func serverContext(session *serverSession, req *request) (context.Context, func()) {
- ctx := context.Background()
- ctx = context.WithValue(ctx, sessionKey{}, session)
- ctx = metadata.NewIncomingContext(ctx, req.Metadata)
- return context.WithCancel(ctx)
-}
-
-type sessionKey struct{}
-
-// AcceptConnection completes the StreamRPC handshake on the server side.
-// It notifies the client that the server has accepted the stream, and
-// returns the connection.
-func AcceptConnection(ctx context.Context) (net.Conn, error) {
- session, ok := ctx.Value(sessionKey{}).(*serverSession)
- if !ok {
- return nil, errors.New("context has no serverSession")
- }
- return session.Accept()
-}
-
-// serverSession wraps an incoming connection whose handshake has not
-// been completed yet.
-type serverSession struct {
- c net.Conn
- accepted bool
- deadline time.Time
-}
-
-// Accept completes the handshake on the connection wrapped by ss and
-// unwraps the connection.
-func (ss *serverSession) Accept() (net.Conn, error) {
- if ss.accepted {
- return nil, errors.New("connection already accepted")
- }
-
- ss.accepted = true
- if err := sendFrame(ss.c, nil, ss.deadline); err != nil {
- return nil, fmt.Errorf("accept session: %w", err)
- }
-
- return ss.c, nil
-}
-
-func (ss *serverSession) reject(err error) error {
- if ss.accepted {
- return nil
- }
-
- buf, err := json.Marshal(&response{Error: err.Error()})
- if err != nil {
- return fmt.Errorf("mashal response: %w", err)
- }
-
- return sendFrame(ss.c, buf, ss.deadline)
-}
diff --git a/internal/streamrpc/testdata/test.pb.go b/internal/streamrpc/testdata/test.pb.go
deleted file mode 100644
index cc267eefd..000000000
--- a/internal/streamrpc/testdata/test.pb.go
+++ /dev/null
@@ -1,167 +0,0 @@
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// versions:
-// protoc-gen-go v1.26.0
-// protoc v3.17.3
-// source: streamrpc/testdata/test.proto
-
-package testdata
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
- emptypb "google.golang.org/protobuf/types/known/emptypb"
- reflect "reflect"
- sync "sync"
-)
-
-const (
- // Verify that this generated code is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
- // Verify that runtime/protoimpl is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
-)
-
-type StreamRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- Fail bool `protobuf:"varint,1,opt,name=fail,proto3" json:"fail,omitempty"`
- StringField string `protobuf:"bytes,2,opt,name=string_field,json=stringField,proto3" json:"string_field,omitempty"`
-}
-
-func (x *StreamRequest) Reset() {
- *x = StreamRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_streamrpc_testdata_test_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *StreamRequest) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*StreamRequest) ProtoMessage() {}
-
-func (x *StreamRequest) ProtoReflect() protoreflect.Message {
- mi := &file_streamrpc_testdata_test_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use StreamRequest.ProtoReflect.Descriptor instead.
-func (*StreamRequest) Descriptor() ([]byte, []int) {
- return file_streamrpc_testdata_test_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *StreamRequest) GetFail() bool {
- if x != nil {
- return x.Fail
- }
- return false
-}
-
-func (x *StreamRequest) GetStringField() string {
- if x != nil {
- return x.StringField
- }
- return ""
-}
-
-var File_streamrpc_testdata_test_proto protoreflect.FileDescriptor
-
-var file_streamrpc_testdata_test_proto_rawDesc = []byte{
- 0x0a, 0x1d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74,
- 0x64, 0x61, 0x74, 0x61, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
- 0x0e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x72, 0x70, 0x63, 0x1a,
- 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
- 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x46, 0x0a, 0x0d,
- 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a,
- 0x04, 0x66, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x61, 0x69,
- 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, 0x65, 0x6c,
- 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46,
- 0x69, 0x65, 0x6c, 0x64, 0x32, 0x49, 0x0a, 0x04, 0x54, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x06,
- 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1d, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x73, 0x74,
- 0x72, 0x65, 0x61, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42,
- 0x3e, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69,
- 0x74, 0x6c, 0x61, 0x62, 0x2d, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2f,
- 0x76, 0x31, 0x34, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x73, 0x74, 0x72,
- 0x65, 0x61, 0x6d, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x62,
- 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-}
-
-var (
- file_streamrpc_testdata_test_proto_rawDescOnce sync.Once
- file_streamrpc_testdata_test_proto_rawDescData = file_streamrpc_testdata_test_proto_rawDesc
-)
-
-func file_streamrpc_testdata_test_proto_rawDescGZIP() []byte {
- file_streamrpc_testdata_test_proto_rawDescOnce.Do(func() {
- file_streamrpc_testdata_test_proto_rawDescData = protoimpl.X.CompressGZIP(file_streamrpc_testdata_test_proto_rawDescData)
- })
- return file_streamrpc_testdata_test_proto_rawDescData
-}
-
-var file_streamrpc_testdata_test_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
-var file_streamrpc_testdata_test_proto_goTypes = []interface{}{
- (*StreamRequest)(nil), // 0: test.streamrpc.StreamRequest
- (*emptypb.Empty)(nil), // 1: google.protobuf.Empty
-}
-var file_streamrpc_testdata_test_proto_depIdxs = []int32{
- 0, // 0: test.streamrpc.Test.Stream:input_type -> test.streamrpc.StreamRequest
- 1, // 1: test.streamrpc.Test.Stream:output_type -> google.protobuf.Empty
- 1, // [1:2] is the sub-list for method output_type
- 0, // [0:1] is the sub-list for method input_type
- 0, // [0:0] is the sub-list for extension type_name
- 0, // [0:0] is the sub-list for extension extendee
- 0, // [0:0] is the sub-list for field type_name
-}
-
-func init() { file_streamrpc_testdata_test_proto_init() }
-func file_streamrpc_testdata_test_proto_init() {
- if File_streamrpc_testdata_test_proto != nil {
- return
- }
- if !protoimpl.UnsafeEnabled {
- file_streamrpc_testdata_test_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*StreamRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
- type x struct{}
- out := protoimpl.TypeBuilder{
- File: protoimpl.DescBuilder{
- GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
- RawDescriptor: file_streamrpc_testdata_test_proto_rawDesc,
- NumEnums: 0,
- NumMessages: 1,
- NumExtensions: 0,
- NumServices: 1,
- },
- GoTypes: file_streamrpc_testdata_test_proto_goTypes,
- DependencyIndexes: file_streamrpc_testdata_test_proto_depIdxs,
- MessageInfos: file_streamrpc_testdata_test_proto_msgTypes,
- }.Build()
- File_streamrpc_testdata_test_proto = out.File
- file_streamrpc_testdata_test_proto_rawDesc = nil
- file_streamrpc_testdata_test_proto_goTypes = nil
- file_streamrpc_testdata_test_proto_depIdxs = nil
-}
diff --git a/internal/streamrpc/testdata/test.proto b/internal/streamrpc/testdata/test.proto
deleted file mode 100644
index 7614a07a9..000000000
--- a/internal/streamrpc/testdata/test.proto
+++ /dev/null
@@ -1,16 +0,0 @@
-syntax = "proto3";
-
-package test.streamrpc;
-
-option go_package = "gitlab.com/gitlab-org/gitaly/v14/internal/streamrpc/testdata";
-
-import "google/protobuf/empty.proto";
-
-service Test {
- rpc Stream(StreamRequest) returns (google.protobuf.Empty) {}
-}
-
-message StreamRequest {
- bool fail = 1;
- string string_field = 2;
-}
diff --git a/internal/streamrpc/testdata/test_grpc.pb.go b/internal/streamrpc/testdata/test_grpc.pb.go
deleted file mode 100644
index 53fb22792..000000000
--- a/internal/streamrpc/testdata/test_grpc.pb.go
+++ /dev/null
@@ -1,102 +0,0 @@
-// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
-
-package testdata
-
-import (
- context "context"
- grpc "google.golang.org/grpc"
- codes "google.golang.org/grpc/codes"
- status "google.golang.org/grpc/status"
- emptypb "google.golang.org/protobuf/types/known/emptypb"
-)
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the grpc package it is being compiled against.
-// Requires gRPC-Go v1.32.0 or later.
-const _ = grpc.SupportPackageIsVersion7
-
-// TestClient is the client API for Test service.
-//
-// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
-type TestClient interface {
- Stream(ctx context.Context, in *StreamRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
-}
-
-type testClient struct {
- cc grpc.ClientConnInterface
-}
-
-func NewTestClient(cc grpc.ClientConnInterface) TestClient {
- return &testClient{cc}
-}
-
-func (c *testClient) Stream(ctx context.Context, in *StreamRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
- out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, "/test.streamrpc.Test/Stream", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-// TestServer is the server API for Test service.
-// All implementations must embed UnimplementedTestServer
-// for forward compatibility
-type TestServer interface {
- Stream(context.Context, *StreamRequest) (*emptypb.Empty, error)
- mustEmbedUnimplementedTestServer()
-}
-
-// UnimplementedTestServer must be embedded to have forward compatible implementations.
-type UnimplementedTestServer struct {
-}
-
-func (UnimplementedTestServer) Stream(context.Context, *StreamRequest) (*emptypb.Empty, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Stream not implemented")
-}
-func (UnimplementedTestServer) mustEmbedUnimplementedTestServer() {}
-
-// UnsafeTestServer may be embedded to opt out of forward compatibility for this service.
-// Use of this interface is not recommended, as added methods to TestServer will
-// result in compilation errors.
-type UnsafeTestServer interface {
- mustEmbedUnimplementedTestServer()
-}
-
-func RegisterTestServer(s grpc.ServiceRegistrar, srv TestServer) {
- s.RegisterService(&Test_ServiceDesc, srv)
-}
-
-func _Test_Stream_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(StreamRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(TestServer).Stream(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/test.streamrpc.Test/Stream",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(TestServer).Stream(ctx, req.(*StreamRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-// Test_ServiceDesc is the grpc.ServiceDesc for Test service.
-// It's only intended for direct use with grpc.RegisterService,
-// and not to be introspected or modified (even as a copy)
-var Test_ServiceDesc = grpc.ServiceDesc{
- ServiceName: "test.streamrpc.Test",
- HandlerType: (*TestServer)(nil),
- Methods: []grpc.MethodDesc{
- {
- MethodName: "Stream",
- Handler: _Test_Stream_Handler,
- },
- },
- Streams: []grpc.StreamDesc{},
- Metadata: "streamrpc/testdata/test.proto",
-}
diff --git a/proto/blob.proto b/proto/blob.proto
index f3b16cceb..4d6653bc4 100644
--- a/proto/blob.proto
+++ b/proto/blob.proto
@@ -132,6 +132,10 @@ message ListBlobsRequest {
// to `0`, then no blob data will be sent. If `-1`, then all blob data will
// be sent without any limits.
int64 bytes_limit = 4;
+ // WithPaths determines whether paths of blobs should be returned. When
+ // set to `true`, paths are returned on a best-effort basis: a path will only
+ // exist if the blob was traversed via a tree.
+ bool with_paths = 5;
}
// ListBlobsResponse is a response for the ListBlobs RPC.
@@ -147,6 +151,9 @@ message ListBlobsResponse {
// Data is the contents of the blob. This field is optional and depends on
// the BytesLimit in the original request.
bytes data = 3;
+ // Path is the path of the blob. May be unset depending on how the blob had
+ // been traversed.
+ bytes path = 4;
}
// Blobs is the blobs which have been found. In case blob contents were
diff --git a/proto/go/gitalypb/blob.pb.go b/proto/go/gitalypb/blob.pb.go
index f26183e1d..5e1e0b406 100644
--- a/proto/go/gitalypb/blob.pb.go
+++ b/proto/go/gitalypb/blob.pb.go
@@ -342,6 +342,10 @@ type ListBlobsRequest struct {
// to `0`, then no blob data will be sent. If `-1`, then all blob data will
// be sent without any limits.
BytesLimit int64 `protobuf:"varint,4,opt,name=bytes_limit,json=bytesLimit,proto3" json:"bytes_limit,omitempty"`
+ // WithPaths determines whether paths of blobs should be returned. When
+ // set to `true`, paths are returned on a best-effort basis: a path will only
+ // exist if the blob was traversed via a tree.
+ WithPaths bool `protobuf:"varint,5,opt,name=with_paths,json=withPaths,proto3" json:"with_paths,omitempty"`
}
func (x *ListBlobsRequest) Reset() {
@@ -404,6 +408,13 @@ func (x *ListBlobsRequest) GetBytesLimit() int64 {
return 0
}
+func (x *ListBlobsRequest) GetWithPaths() bool {
+ if x != nil {
+ return x.WithPaths
+ }
+ return false
+}
+
// ListBlobsResponse is a response for the ListBlobs RPC.
type ListBlobsResponse struct {
state protoimpl.MessageState
@@ -1117,6 +1128,9 @@ type ListBlobsResponse_Blob struct {
// Data is the contents of the blob. This field is optional and depends on
// the BytesLimit in the original request.
Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+ // Path is the path of the blob. May be unset depending on how the blob had
+ // been traversed.
+ Path []byte `protobuf:"bytes,4,opt,name=path,proto3" json:"path,omitempty"`
}
func (x *ListBlobsResponse_Blob) Reset() {
@@ -1172,6 +1186,13 @@ func (x *ListBlobsResponse_Blob) GetData() []byte {
return nil
}
+func (x *ListBlobsResponse_Blob) GetPath() []byte {
+ if x != nil {
+ return x.Path
+ }
+ return nil
+}
+
// Blob represents a Git blob object.
type ListAllBlobsResponse_Blob struct {
state protoimpl.MessageState
@@ -1288,7 +1309,7 @@ var file_blob_proto_rawDesc = []byte{
0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c,
0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08,
0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4f, 0x62,
- 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xa1,
+ 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xc0,
0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x62, 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,
@@ -1299,122 +1320,125 @@ var file_blob_proto_rawDesc = []byte{
0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69,
0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74,
0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x4c, 0x69, 0x6d,
- 0x69, 0x74, 0x22, 0x8b, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x73,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x62,
- 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
- 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73,
+ 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x77, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68,
+ 0x73, 0x22, 0x9f, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x62, 0x73,
+ 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
+ 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x1a, 0x54, 0x0a,
+ 0x04, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64,
+ 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12,
+ 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70,
+ 0x61, 0x74, 0x68, 0x22, 0x86, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x42,
+ 0x6c, 0x6f, 0x62, 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, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x62,
+ 0x79, 0x74, 0x65, 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03,
+ 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x91, 0x01, 0x0a,
+ 0x14, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x18, 0x01,
+ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69,
+ 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x1a, 0x40,
0x0a, 0x04, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65,
0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04,
0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61,
- 0x22, 0x86, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x6c, 0x6f, 0x62,
- 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, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65,
- 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x62,
- 0x79, 0x74, 0x65, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x91, 0x01, 0x0a, 0x14, 0x4c, 0x69,
- 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
- 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41,
- 0x6c, 0x6c, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e,
- 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x1a, 0x40, 0x0a, 0x04, 0x42,
- 0x6c, 0x6f, 0x62, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x03, 0x6f, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74,
- 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x46, 0x0a,
- 0x0a, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x73,
- 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12,
- 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64,
- 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x03, 0x6f, 0x69, 0x64, 0x22, 0x49, 0x0a, 0x0d, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x62,
- 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69,
- 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04,
- 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68,
- 0x22, 0x6c, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65,
- 0x72, 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, 0x19, 0x0a, 0x08, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x73, 0x18,
- 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x62, 0x6c, 0x6f, 0x62, 0x49, 0x64, 0x73, 0x22, 0x4f,
- 0x0a, 0x16, 0x47, 0x65, 0x74, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x0c, 0x6c, 0x66, 0x73, 0x5f,
- 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12,
- 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74,
- 0x65, 0x72, 0x52, 0x0b, 0x6c, 0x66, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x22,
- 0x86, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74,
+ 0x22, 0x46, 0x0a, 0x0a, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x12,
+ 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69,
+ 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c,
+ 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x03, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x22, 0x49, 0x0a, 0x0d, 0x4e, 0x65, 0x77, 0x42,
+ 0x6c, 0x6f, 0x62, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a,
+ 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x10, 0x0a,
+ 0x03, 0x6f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x12,
+ 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70,
+ 0x61, 0x74, 0x68, 0x22, 0x6c, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69,
+ 0x6e, 0x74, 0x65, 0x72, 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, 0x19, 0x0a, 0x08, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x69,
+ 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x62, 0x6c, 0x6f, 0x62, 0x49, 0x64,
+ 0x73, 0x22, 0x4f, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74,
+ 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x0c, 0x6c,
+ 0x66, 0x73, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
+ 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x46, 0x53, 0x50, 0x6f,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x0b, 0x6c, 0x66, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65,
+ 0x72, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x46, 0x53, 0x50, 0x6f,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a,
+ 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73,
+ 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70,
+ 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x76, 0x69, 0x73,
+ 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x76, 0x69,
+ 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03,
+ 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x50, 0x0a, 0x17, 0x4c,
+ 0x69, 0x73, 0x74, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x0c, 0x6c, 0x66, 0x73, 0x5f, 0x70, 0x6f,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67,
+ 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72,
+ 0x52, 0x0b, 0x6c, 0x66, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x22, 0x6b, 0x0a,
+ 0x19, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74,
0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65,
0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12,
0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f,
0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69,
- 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
- 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
- 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28,
- 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x50, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74,
- 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x0c, 0x6c, 0x66, 0x73, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74,
- 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61,
- 0x6c, 0x79, 0x2e, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x0b, 0x6c,
- 0x66, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x22, 0x6b, 0x0a, 0x19, 0x4c, 0x69,
+ 0x74, 0x6f, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20,
+ 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x53, 0x0a, 0x1a, 0x4c, 0x69,
0x73, 0x74, 0x41, 0x6c, 0x6c, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 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, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05,
- 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x53, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x41,
- 0x6c, 0x6c, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x0c, 0x6c, 0x66, 0x73, 0x5f, 0x70, 0x6f, 0x69,
- 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69,
- 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52,
- 0x0b, 0x6c, 0x66, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x32, 0xdd, 0x04, 0x0a,
- 0x0b, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x07,
- 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x16, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
- 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x17, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02,
- 0x30, 0x01, 0x12, 0x47, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x17,
- 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x73,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
- 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x4a, 0x0a, 0x09, 0x4c,
- 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
- 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74,
- 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa,
- 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x53, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x41,
- 0x6c, 0x6c, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
- 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69,
- 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x6c, 0x6f, 0x62, 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, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1d,
- 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x46, 0x53, 0x50, 0x6f,
- 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e,
- 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69,
- 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa,
- 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x5c, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x4c,
- 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1e, 0x2e, 0x67, 0x69, 0x74,
- 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74,
- 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x69, 0x74,
- 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74,
- 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28,
- 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x65, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c,
- 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x21, 0x2e, 0x67, 0x69,
- 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x4c, 0x46, 0x53, 0x50,
- 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x0c, 0x6c, 0x66, 0x73, 0x5f,
+ 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12,
+ 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74,
+ 0x65, 0x72, 0x52, 0x0b, 0x6c, 0x66, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x32,
+ 0xdd, 0x04, 0x0a, 0x0b, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
+ 0x44, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x16, 0x2e, 0x67, 0x69, 0x74,
+ 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x42,
+ 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28,
+ 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x47, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62,
+ 0x73, 0x12, 0x17, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c,
+ 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x67, 0x69, 0x74,
+ 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x4a,
+ 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x18, 0x2e, 0x67, 0x69,
+ 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c,
+ 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x53, 0x0a, 0x0c, 0x4c, 0x69,
+ 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x1b, 0x2e, 0x67, 0x69, 0x74,
+ 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x6c, 0x6f, 0x62, 0x73,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
+ 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x6c, 0x6f, 0x62, 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, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72,
+ 0x73, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x46,
+ 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x46, 0x53,
+ 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x5c, 0x0a, 0x0f, 0x4c, 0x69,
+ 0x73, 0x74, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1e, 0x2e,
+ 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x46, 0x53, 0x50, 0x6f,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e,
+ 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x46, 0x53, 0x50, 0x6f,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06,
+ 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x65, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74,
+ 0x41, 0x6c, 0x6c, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x21,
0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x4c,
- 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x42, 0x34, 0x5a, 0x32,
- 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x6c, 0x61,
- 0x62, 0x2d, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2f, 0x76, 0x31, 0x34,
- 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
- 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41,
+ 0x6c, 0x6c, 0x4c, 0x46, 0x53, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x42,
+ 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69,
+ 0x74, 0x6c, 0x61, 0x62, 0x2d, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2f,
+ 0x76, 0x31, 0x34, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x69, 0x74,
+ 0x61, 0x6c, 0x79, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
diff --git a/proto/go/gitalypb/hook.pb.go b/proto/go/gitalypb/hook.pb.go
index a25bf0254..51fbaf539 100644
--- a/proto/go/gitalypb/hook.pb.go
+++ b/proto/go/gitalypb/hook.pb.go
@@ -735,6 +735,100 @@ func (x *PackObjectsHookResponse) GetStderr() []byte {
return nil
}
+type PackObjectsHookWithSidechannelRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"`
+ // args contains the arguments passed to the pack-objects hook, without the leading "git"
+ Args []string `protobuf:"bytes,2,rep,name=args,proto3" json:"args,omitempty"`
+}
+
+func (x *PackObjectsHookWithSidechannelRequest) Reset() {
+ *x = PackObjectsHookWithSidechannelRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_hook_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *PackObjectsHookWithSidechannelRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PackObjectsHookWithSidechannelRequest) ProtoMessage() {}
+
+func (x *PackObjectsHookWithSidechannelRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_hook_proto_msgTypes[10]
+ 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 PackObjectsHookWithSidechannelRequest.ProtoReflect.Descriptor instead.
+func (*PackObjectsHookWithSidechannelRequest) Descriptor() ([]byte, []int) {
+ return file_hook_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *PackObjectsHookWithSidechannelRequest) GetRepository() *Repository {
+ if x != nil {
+ return x.Repository
+ }
+ return nil
+}
+
+func (x *PackObjectsHookWithSidechannelRequest) GetArgs() []string {
+ if x != nil {
+ return x.Args
+ }
+ return nil
+}
+
+type PackObjectsHookWithSidechannelResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *PackObjectsHookWithSidechannelResponse) Reset() {
+ *x = PackObjectsHookWithSidechannelResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_hook_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *PackObjectsHookWithSidechannelResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PackObjectsHookWithSidechannelResponse) ProtoMessage() {}
+
+func (x *PackObjectsHookWithSidechannelResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_hook_proto_msgTypes[11]
+ 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 PackObjectsHookWithSidechannelResponse.ProtoReflect.Descriptor instead.
+func (*PackObjectsHookWithSidechannelResponse) Descriptor() ([]byte, []int) {
+ return file_hook_proto_rawDescGZIP(), []int{11}
+}
+
var File_hook_proto protoreflect.FileDescriptor
var file_hook_proto_rawDesc = []byte{
@@ -842,42 +936,60 @@ var file_hook_proto_rawDesc = []byte{
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,
- 0x32, 0xf4, 0x03, 0x0a, 0x0b, 0x48, 0x6f, 0x6f, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
- 0x12, 0x5b, 0x0a, 0x0e, 0x50, 0x72, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x48, 0x6f,
- 0x6f, 0x6b, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x72, 0x65, 0x52,
+ 0x22, 0x75, 0x0a, 0x25, 0x50, 0x61, 0x63, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x48,
+ 0x6f, 0x6f, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, 0x64, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x6e,
+ 0x65, 0x6c, 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, 0x61, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
+ 0x09, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x22, 0x28, 0x0a, 0x26, 0x50, 0x61, 0x63, 0x6b, 0x4f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x48, 0x6f, 0x6f, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69,
+ 0x64, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x32, 0xfe, 0x04, 0x0a, 0x0b, 0x48, 0x6f, 0x6f, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+ 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x50, 0x72, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x48,
+ 0x6f, 0x6f, 0x6b, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x72, 0x65,
+ 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x72, 0x65, 0x52,
+ 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x28, 0x01, 0x30, 0x01, 0x12, 0x5e,
+ 0x0a, 0x0f, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x48, 0x6f, 0x6f,
+ 0x6b, 0x12, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x52,
0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x72, 0x65, 0x52, 0x65,
- 0x63, 0x65, 0x69, 0x76, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x28, 0x01, 0x30, 0x01, 0x12, 0x5e, 0x0a,
- 0x0f, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x48, 0x6f, 0x6f, 0x6b,
- 0x12, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x65,
- 0x63, 0x65, 0x69, 0x76, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x65,
- 0x63, 0x65, 0x69, 0x76, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4d, 0x0a,
- 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x19, 0x2e, 0x67, 0x69,
- 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
- 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x79, 0x0a, 0x18,
- 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63,
- 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
- 0x79, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73,
- 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72,
- 0x65, 0x6e, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48,
- 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28,
- 0x02, 0x08, 0x02, 0x28, 0x01, 0x30, 0x01, 0x12, 0x5e, 0x0a, 0x0f, 0x50, 0x61, 0x63, 0x6b, 0x4f,
- 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x1e, 0x2e, 0x67, 0x69, 0x74,
- 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x48,
- 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x69, 0x74,
+ 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x52,
+ 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4d,
+ 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x19, 0x2e, 0x67,
+ 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
+ 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x79, 0x0a,
+ 0x18, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x61,
+ 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e,
+ 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97,
+ 0x28, 0x02, 0x08, 0x02, 0x28, 0x01, 0x30, 0x01, 0x12, 0x5e, 0x0a, 0x0f, 0x50, 0x61, 0x63, 0x6b,
+ 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x1e, 0x2e, 0x67, 0x69,
+ 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73,
+ 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x69,
+ 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73,
+ 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97,
+ 0x28, 0x02, 0x08, 0x02, 0x28, 0x01, 0x30, 0x01, 0x12, 0x87, 0x01, 0x0a, 0x1e, 0x50, 0x61, 0x63,
+ 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x48, 0x6f, 0x6f, 0x6b, 0x57, 0x69, 0x74, 0x68,
+ 0x53, 0x69, 0x64, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2d, 0x2e, 0x67, 0x69,
+ 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73,
+ 0x48, 0x6f, 0x6f, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, 0x64, 0x65, 0x63, 0x68, 0x61, 0x6e,
+ 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x69, 0x74,
0x61, 0x6c, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x48,
- 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28,
- 0x02, 0x08, 0x02, 0x28, 0x01, 0x30, 0x01, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x6c, 0x61,
- 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2d, 0x6f, 0x72, 0x67,
- 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2f, 0x76, 0x31, 0x34, 0x2f, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x70, 0x62, 0x62, 0x06, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x6f, 0x6f, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, 0x64, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x6e,
+ 0x65, 0x6c, 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, 0x34, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f,
+ 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -893,48 +1005,53 @@ func file_hook_proto_rawDescGZIP() []byte {
}
var file_hook_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_hook_proto_msgTypes = make([]protoimpl.MessageInfo, 10)
+var file_hook_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
var file_hook_proto_goTypes = []interface{}{
- (ReferenceTransactionHookRequest_State)(0), // 0: gitaly.ReferenceTransactionHookRequest.State
- (*PreReceiveHookRequest)(nil), // 1: gitaly.PreReceiveHookRequest
- (*PreReceiveHookResponse)(nil), // 2: gitaly.PreReceiveHookResponse
- (*PostReceiveHookRequest)(nil), // 3: gitaly.PostReceiveHookRequest
- (*PostReceiveHookResponse)(nil), // 4: gitaly.PostReceiveHookResponse
- (*UpdateHookRequest)(nil), // 5: gitaly.UpdateHookRequest
- (*UpdateHookResponse)(nil), // 6: gitaly.UpdateHookResponse
- (*ReferenceTransactionHookRequest)(nil), // 7: gitaly.ReferenceTransactionHookRequest
- (*ReferenceTransactionHookResponse)(nil), // 8: gitaly.ReferenceTransactionHookResponse
- (*PackObjectsHookRequest)(nil), // 9: gitaly.PackObjectsHookRequest
- (*PackObjectsHookResponse)(nil), // 10: gitaly.PackObjectsHookResponse
- (*Repository)(nil), // 11: gitaly.Repository
- (*ExitStatus)(nil), // 12: gitaly.ExitStatus
+ (ReferenceTransactionHookRequest_State)(0), // 0: gitaly.ReferenceTransactionHookRequest.State
+ (*PreReceiveHookRequest)(nil), // 1: gitaly.PreReceiveHookRequest
+ (*PreReceiveHookResponse)(nil), // 2: gitaly.PreReceiveHookResponse
+ (*PostReceiveHookRequest)(nil), // 3: gitaly.PostReceiveHookRequest
+ (*PostReceiveHookResponse)(nil), // 4: gitaly.PostReceiveHookResponse
+ (*UpdateHookRequest)(nil), // 5: gitaly.UpdateHookRequest
+ (*UpdateHookResponse)(nil), // 6: gitaly.UpdateHookResponse
+ (*ReferenceTransactionHookRequest)(nil), // 7: gitaly.ReferenceTransactionHookRequest
+ (*ReferenceTransactionHookResponse)(nil), // 8: gitaly.ReferenceTransactionHookResponse
+ (*PackObjectsHookRequest)(nil), // 9: gitaly.PackObjectsHookRequest
+ (*PackObjectsHookResponse)(nil), // 10: gitaly.PackObjectsHookResponse
+ (*PackObjectsHookWithSidechannelRequest)(nil), // 11: gitaly.PackObjectsHookWithSidechannelRequest
+ (*PackObjectsHookWithSidechannelResponse)(nil), // 12: gitaly.PackObjectsHookWithSidechannelResponse
+ (*Repository)(nil), // 13: gitaly.Repository
+ (*ExitStatus)(nil), // 14: gitaly.ExitStatus
}
var file_hook_proto_depIdxs = []int32{
- 11, // 0: gitaly.PreReceiveHookRequest.repository:type_name -> gitaly.Repository
- 12, // 1: gitaly.PreReceiveHookResponse.exit_status:type_name -> gitaly.ExitStatus
- 11, // 2: gitaly.PostReceiveHookRequest.repository:type_name -> gitaly.Repository
- 12, // 3: gitaly.PostReceiveHookResponse.exit_status:type_name -> gitaly.ExitStatus
- 11, // 4: gitaly.UpdateHookRequest.repository:type_name -> gitaly.Repository
- 12, // 5: gitaly.UpdateHookResponse.exit_status:type_name -> gitaly.ExitStatus
- 11, // 6: gitaly.ReferenceTransactionHookRequest.repository:type_name -> gitaly.Repository
+ 13, // 0: gitaly.PreReceiveHookRequest.repository:type_name -> gitaly.Repository
+ 14, // 1: gitaly.PreReceiveHookResponse.exit_status:type_name -> gitaly.ExitStatus
+ 13, // 2: gitaly.PostReceiveHookRequest.repository:type_name -> gitaly.Repository
+ 14, // 3: gitaly.PostReceiveHookResponse.exit_status:type_name -> gitaly.ExitStatus
+ 13, // 4: gitaly.UpdateHookRequest.repository:type_name -> gitaly.Repository
+ 14, // 5: gitaly.UpdateHookResponse.exit_status:type_name -> gitaly.ExitStatus
+ 13, // 6: gitaly.ReferenceTransactionHookRequest.repository:type_name -> gitaly.Repository
0, // 7: gitaly.ReferenceTransactionHookRequest.state:type_name -> gitaly.ReferenceTransactionHookRequest.State
- 12, // 8: gitaly.ReferenceTransactionHookResponse.exit_status:type_name -> gitaly.ExitStatus
- 11, // 9: gitaly.PackObjectsHookRequest.repository:type_name -> gitaly.Repository
- 1, // 10: gitaly.HookService.PreReceiveHook:input_type -> gitaly.PreReceiveHookRequest
- 3, // 11: gitaly.HookService.PostReceiveHook:input_type -> gitaly.PostReceiveHookRequest
- 5, // 12: gitaly.HookService.UpdateHook:input_type -> gitaly.UpdateHookRequest
- 7, // 13: gitaly.HookService.ReferenceTransactionHook:input_type -> gitaly.ReferenceTransactionHookRequest
- 9, // 14: gitaly.HookService.PackObjectsHook:input_type -> gitaly.PackObjectsHookRequest
- 2, // 15: gitaly.HookService.PreReceiveHook:output_type -> gitaly.PreReceiveHookResponse
- 4, // 16: gitaly.HookService.PostReceiveHook:output_type -> gitaly.PostReceiveHookResponse
- 6, // 17: gitaly.HookService.UpdateHook:output_type -> gitaly.UpdateHookResponse
- 8, // 18: gitaly.HookService.ReferenceTransactionHook:output_type -> gitaly.ReferenceTransactionHookResponse
- 10, // 19: gitaly.HookService.PackObjectsHook:output_type -> gitaly.PackObjectsHookResponse
- 15, // [15:20] is the sub-list for method output_type
- 10, // [10:15] is the sub-list for method input_type
- 10, // [10:10] is the sub-list for extension type_name
- 10, // [10:10] is the sub-list for extension extendee
- 0, // [0:10] is the sub-list for field type_name
+ 14, // 8: gitaly.ReferenceTransactionHookResponse.exit_status:type_name -> gitaly.ExitStatus
+ 13, // 9: gitaly.PackObjectsHookRequest.repository:type_name -> gitaly.Repository
+ 13, // 10: gitaly.PackObjectsHookWithSidechannelRequest.repository:type_name -> gitaly.Repository
+ 1, // 11: gitaly.HookService.PreReceiveHook:input_type -> gitaly.PreReceiveHookRequest
+ 3, // 12: gitaly.HookService.PostReceiveHook:input_type -> gitaly.PostReceiveHookRequest
+ 5, // 13: gitaly.HookService.UpdateHook:input_type -> gitaly.UpdateHookRequest
+ 7, // 14: gitaly.HookService.ReferenceTransactionHook:input_type -> gitaly.ReferenceTransactionHookRequest
+ 9, // 15: gitaly.HookService.PackObjectsHook:input_type -> gitaly.PackObjectsHookRequest
+ 11, // 16: gitaly.HookService.PackObjectsHookWithSidechannel:input_type -> gitaly.PackObjectsHookWithSidechannelRequest
+ 2, // 17: gitaly.HookService.PreReceiveHook:output_type -> gitaly.PreReceiveHookResponse
+ 4, // 18: gitaly.HookService.PostReceiveHook:output_type -> gitaly.PostReceiveHookResponse
+ 6, // 19: gitaly.HookService.UpdateHook:output_type -> gitaly.UpdateHookResponse
+ 8, // 20: gitaly.HookService.ReferenceTransactionHook:output_type -> gitaly.ReferenceTransactionHookResponse
+ 10, // 21: gitaly.HookService.PackObjectsHook:output_type -> gitaly.PackObjectsHookResponse
+ 12, // 22: gitaly.HookService.PackObjectsHookWithSidechannel:output_type -> gitaly.PackObjectsHookWithSidechannelResponse
+ 17, // [17:23] is the sub-list for method output_type
+ 11, // [11:17] is the sub-list for method input_type
+ 11, // [11:11] is the sub-list for extension type_name
+ 11, // [11:11] is the sub-list for extension extendee
+ 0, // [0:11] is the sub-list for field type_name
}
func init() { file_hook_proto_init() }
@@ -1065,6 +1182,30 @@ func file_hook_proto_init() {
return nil
}
}
+ file_hook_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*PackObjectsHookWithSidechannelRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_hook_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*PackObjectsHookWithSidechannelResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
}
type x struct{}
out := protoimpl.TypeBuilder{
@@ -1072,7 +1213,7 @@ func file_hook_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_hook_proto_rawDesc,
NumEnums: 1,
- NumMessages: 10,
+ NumMessages: 12,
NumExtensions: 0,
NumServices: 1,
},
diff --git a/proto/go/gitalypb/hook_grpc.pb.go b/proto/go/gitalypb/hook_grpc.pb.go
index 7efe8249f..16324fac5 100644
--- a/proto/go/gitalypb/hook_grpc.pb.go
+++ b/proto/go/gitalypb/hook_grpc.pb.go
@@ -26,6 +26,9 @@ type HookServiceClient interface {
// uploadpack.packObjectsHook mechanism. It generates a stream of packed
// Git objects.
PackObjectsHook(ctx context.Context, opts ...grpc.CallOption) (HookService_PackObjectsHookClient, error)
+ // PackObjectsHookWithSidechannel is an optimized version of PackObjectsHook that uses
+ // a unix socket side channel.
+ PackObjectsHookWithSidechannel(ctx context.Context, in *PackObjectsHookWithSidechannelRequest, opts ...grpc.CallOption) (*PackObjectsHookWithSidechannelResponse, error)
}
type hookServiceClient struct {
@@ -192,6 +195,15 @@ func (x *hookServicePackObjectsHookClient) Recv() (*PackObjectsHookResponse, err
return m, nil
}
+func (c *hookServiceClient) PackObjectsHookWithSidechannel(ctx context.Context, in *PackObjectsHookWithSidechannelRequest, opts ...grpc.CallOption) (*PackObjectsHookWithSidechannelResponse, error) {
+ out := new(PackObjectsHookWithSidechannelResponse)
+ err := c.cc.Invoke(ctx, "/gitaly.HookService/PackObjectsHookWithSidechannel", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
// HookServiceServer is the server API for HookService service.
// All implementations must embed UnimplementedHookServiceServer
// for forward compatibility
@@ -204,6 +216,9 @@ type HookServiceServer interface {
// uploadpack.packObjectsHook mechanism. It generates a stream of packed
// Git objects.
PackObjectsHook(HookService_PackObjectsHookServer) error
+ // PackObjectsHookWithSidechannel is an optimized version of PackObjectsHook that uses
+ // a unix socket side channel.
+ PackObjectsHookWithSidechannel(context.Context, *PackObjectsHookWithSidechannelRequest) (*PackObjectsHookWithSidechannelResponse, error)
mustEmbedUnimplementedHookServiceServer()
}
@@ -226,6 +241,9 @@ func (UnimplementedHookServiceServer) ReferenceTransactionHook(HookService_Refer
func (UnimplementedHookServiceServer) PackObjectsHook(HookService_PackObjectsHookServer) error {
return status.Errorf(codes.Unimplemented, "method PackObjectsHook not implemented")
}
+func (UnimplementedHookServiceServer) PackObjectsHookWithSidechannel(context.Context, *PackObjectsHookWithSidechannelRequest) (*PackObjectsHookWithSidechannelResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method PackObjectsHookWithSidechannel not implemented")
+}
func (UnimplementedHookServiceServer) mustEmbedUnimplementedHookServiceServer() {}
// UnsafeHookServiceServer may be embedded to opt out of forward compatibility for this service.
@@ -364,13 +382,36 @@ func (x *hookServicePackObjectsHookServer) Recv() (*PackObjectsHookRequest, erro
return m, nil
}
+func _HookService_PackObjectsHookWithSidechannel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(PackObjectsHookWithSidechannelRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(HookServiceServer).PackObjectsHookWithSidechannel(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/gitaly.HookService/PackObjectsHookWithSidechannel",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(HookServiceServer).PackObjectsHookWithSidechannel(ctx, req.(*PackObjectsHookWithSidechannelRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
// HookService_ServiceDesc is the grpc.ServiceDesc for HookService service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var HookService_ServiceDesc = grpc.ServiceDesc{
ServiceName: "gitaly.HookService",
HandlerType: (*HookServiceServer)(nil),
- Methods: []grpc.MethodDesc{},
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "PackObjectsHookWithSidechannel",
+ Handler: _HookService_PackObjectsHookWithSidechannel_Handler,
+ },
+ },
Streams: []grpc.StreamDesc{
{
StreamName: "PreReceiveHook",
diff --git a/proto/go/gitalypb/operations.pb.go b/proto/go/gitalypb/operations.pb.go
index 2b8355807..608977ac4 100644
--- a/proto/go/gitalypb/operations.pb.go
+++ b/proto/go/gitalypb/operations.pb.go
@@ -2515,9 +2515,11 @@ type UserSquashRequest struct {
Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"`
// user is used for authorization checks.
User *User `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"`
- // squash_id is used as a unique identifier for the squash. Internally, this
- // is used to identify the worktree in which the squash shall be computed. No
- // two UserSquash RPCs may run with the same ID.
+ // SquashId used to identify the path where the worktree was created. Given
+ // that Gitaly does in-memory squashes now, this is useless and will be
+ // ignored. There is no replacement for this.
+ //
+ // Deprecated: Do not use.
SquashId string `protobuf:"bytes,3,opt,name=squash_id,json=squashId,proto3" json:"squash_id,omitempty"`
// start_sha is the object ID of the start commit of the range which shall be
// squashed. Must be an ancestor of end_sha.
@@ -2580,6 +2582,7 @@ func (x *UserSquashRequest) GetUser() *User {
return nil
}
+// Deprecated: Do not use.
func (x *UserSquashRequest) GetSquashId() string {
if x != nil {
return x.SquashId
@@ -3605,185 +3608,185 @@ var file_operations_proto_rawDesc = []byte{
0x45, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x2a, 0x0a, 0x28, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x72, 0x65,
0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x62, 0x6c, 0x65,
0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61,
- 0x64, 0x22, 0xcf, 0x02, 0x0a, 0x11, 0x55, 0x73, 0x65, 0x72, 0x53, 0x71, 0x75, 0x61, 0x73, 0x68,
+ 0x64, 0x22, 0xd3, 0x02, 0x0a, 0x11, 0x55, 0x73, 0x65, 0x72, 0x53, 0x71, 0x75, 0x61, 0x73, 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, 0x20, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x0c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75,
- 0x73, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x71, 0x75, 0x61, 0x73, 0x68, 0x5f, 0x69, 0x64,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x71, 0x75, 0x61, 0x73, 0x68, 0x49, 0x64,
- 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x18, 0x05, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x68, 0x61, 0x12, 0x17, 0x0a,
- 0x07, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
- 0x65, 0x6e, 0x64, 0x53, 0x68, 0x61, 0x12, 0x24, 0x0a, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72,
- 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
- 0x55, 0x73, 0x65, 0x72, 0x52, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0e,
- 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x08,
- 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x73,
- 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
- 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
- 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4a, 0x04, 0x08,
- 0x04, 0x10, 0x05, 0x22, 0x69, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x72, 0x53, 0x71, 0x75, 0x61, 0x73,
- 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x71, 0x75,
- 0x61, 0x73, 0x68, 0x5f, 0x73, 0x68, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73,
- 0x71, 0x75, 0x61, 0x73, 0x68, 0x53, 0x68, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x69, 0x74, 0x5f,
- 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x69, 0x74,
- 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x11, 0x70, 0x72, 0x65,
- 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xdd,
- 0x02, 0x0a, 0x15, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x61, 0x74, 0x63,
- 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64,
- 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
- 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x61, 0x74, 0x63, 0x68,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x00,
- 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x63,
- 0x68, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x74,
- 0x63, 0x68, 0x65, 0x73, 0x1a, 0xc3, 0x01, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12,
+ 0x73, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x09, 0x73, 0x71, 0x75, 0x61, 0x73, 0x68, 0x5f, 0x69, 0x64,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x08, 0x73, 0x71, 0x75, 0x61,
+ 0x73, 0x68, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x73, 0x68,
+ 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x68,
+ 0x61, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x18, 0x06, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x64, 0x53, 0x68, 0x61, 0x12, 0x24, 0x0a, 0x06, 0x61, 0x75,
+ 0x74, 0x68, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x67, 0x69, 0x74,
+ 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72,
+ 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61,
+ 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
+ 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73,
+ 0x74, 0x61, 0x6d, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
+ 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
+ 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
+ 0x70, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0x69, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x72, 0x53,
+ 0x71, 0x75, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a,
+ 0x0a, 0x73, 0x71, 0x75, 0x61, 0x73, 0x68, 0x5f, 0x73, 0x68, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x09, 0x73, 0x71, 0x75, 0x61, 0x73, 0x68, 0x53, 0x68, 0x61, 0x12, 0x1b, 0x0a, 0x09,
+ 0x67, 0x69, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x08, 0x67, 0x69, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52,
+ 0x11, 0x70, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x72, 0x72,
+ 0x6f, 0x72, 0x22, 0xdd, 0x02, 0x0a, 0x15, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x79,
+ 0x50, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06,
+ 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67,
+ 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50,
+ 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x48, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x48, 0x00, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x07,
+ 0x70, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52,
+ 0x07, 0x70, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x1a, 0xc3, 0x01, 0x0a, 0x06, 0x48, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 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, 0x20, 0x0a,
+ 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x67, 0x69,
+ 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12,
+ 0x23, 0x0a, 0x0d, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x42, 0x72,
+ 0x61, 0x6e, 0x63, 0x68, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
+ 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
+ 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x22,
+ 0x0a, 0x20, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x70, 0x61, 0x74,
+ 0x63, 0x68, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f,
+ 0x61, 0x64, 0x22, 0x5c, 0x0a, 0x16, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50,
+ 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0d,
+ 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4f, 0x70, 0x65,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x52, 0x0c, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x22, 0xae, 0x02, 0x0a, 0x1a, 0x55, 0x73, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53,
+ 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70,
0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72,
0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x04, 0x75, 0x73, 0x65,
0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
- 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x74,
- 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01,
- 0x28, 0x0c, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68,
- 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52,
- 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x22, 0x0a, 0x20, 0x75, 0x73,
- 0x65, 0x72, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x70, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x72,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x5c,
- 0x0a, 0x16, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x61, 0x74, 0x63, 0x68,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0d, 0x62, 0x72, 0x61, 0x6e,
- 0x63, 0x68, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x0c,
- 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0xae, 0x02, 0x0a,
- 0x1a, 0x55, 0x73, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x6f,
- 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72,
- 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74,
- 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73,
- 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65,
- 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69,
- 0x74, 0x5f, 0x73, 0x68, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d,
- 0x6d, 0x69, 0x74, 0x53, 0x68, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68,
- 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x1c,
- 0x0a, 0x09, 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28,
- 0x0c, 0x52, 0x09, 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x25, 0x0a, 0x0e,
- 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x06,
- 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x73,
- 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
- 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
- 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xc9, 0x01,
- 0x0a, 0x1b, 0x55, 0x73, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6d,
- 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a,
- 0x0d, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4f, 0x70,
- 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x55, 0x70, 0x64,
- 0x61, 0x74, 0x65, 0x52, 0x0c, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74,
- 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65,
- 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72,
- 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x21, 0x0a,
- 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72,
- 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x52, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74,
- 0x72, 0x65, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x32, 0xed, 0x0a, 0x0a, 0x10, 0x4f, 0x70,
- 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5d,
- 0x0a, 0x10, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e,
- 0x63, 0x68, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72,
- 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65,
- 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x5d, 0x0a,
- 0x10, 0x55, 0x73, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63,
- 0x68, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x55,
- 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72,
- 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x5d, 0x0a, 0x10,
- 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68,
- 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65,
- 0x6c, 0x65, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x54, 0x0a, 0x0d, 0x55,
- 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x1c, 0x2e, 0x67,
- 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
- 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x69, 0x74,
- 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61,
- 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08,
- 0x01, 0x12, 0x54, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54,
- 0x61, 0x67, 0x12, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72,
- 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65,
- 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
- 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x57, 0x0a, 0x0e, 0x55, 0x73, 0x65, 0x72, 0x4d,
- 0x65, 0x72, 0x67, 0x65, 0x54, 0x6f, 0x52, 0x65, 0x66, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61,
- 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x54, 0x6f, 0x52, 0x65,
- 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
- 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x54, 0x6f, 0x52, 0x65, 0x66,
+ 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x63,
+ 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x68, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x72,
+ 0x61, 0x6e, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x62, 0x72, 0x61, 0x6e,
+ 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18,
+ 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65,
+ 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61,
+ 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
+ 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73,
+ 0x74, 0x61, 0x6d, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
+ 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
+ 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
+ 0x70, 0x22, 0xc9, 0x01, 0x0a, 0x1b, 0x55, 0x73, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x53, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x42, 0x0a, 0x0d, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x5f, 0x75, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
+ 0x79, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x72, 0x61, 0x6e, 0x63,
+ 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x55,
+ 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x63,
+ 0x65, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x0f, 0x70, 0x72, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x45, 0x72, 0x72, 0x6f,
+ 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f,
+ 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x45,
+ 0x72, 0x72, 0x6f, 0x72, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x52, 0x11, 0x63, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x5f, 0x74, 0x72, 0x65, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x32, 0xed, 0x0a,
+ 0x0a, 0x10, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69,
+ 0x63, 0x65, 0x12, 0x5d, 0x0a, 0x10, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
+ 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
+ 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63,
+ 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08,
+ 0x01, 0x12, 0x5d, 0x0a, 0x10, 0x55, 0x73, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42,
+ 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55,
+ 0x73, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
+ 0x55, 0x73, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01,
+ 0x12, 0x5d, 0x0a, 0x10, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x72,
+ 0x61, 0x6e, 0x63, 0x68, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73,
+ 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55,
+ 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12,
+ 0x54, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67,
+ 0x12, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72,
+ 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d,
+ 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa,
+ 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x54, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
+ 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73,
+ 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x57, 0x0a, 0x0e, 0x55,
+ 0x73, 0x65, 0x72, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x54, 0x6f, 0x52, 0x65, 0x66, 0x12, 0x1d, 0x2e,
+ 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x72, 0x67, 0x65,
+ 0x54, 0x6f, 0x52, 0x65, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67,
+ 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x54,
+ 0x6f, 0x52, 0x65, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97,
+ 0x28, 0x02, 0x08, 0x01, 0x12, 0x5e, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x72, 0x67,
+ 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
+ 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
+ 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01,
- 0x12, 0x5e, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x42, 0x72, 0x61,
- 0x6e, 0x63, 0x68, 0x12, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65,
- 0x72, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75,
+ 0x28, 0x01, 0x30, 0x01, 0x12, 0x51, 0x0a, 0x0c, 0x55, 0x73, 0x65, 0x72, 0x46, 0x46, 0x42, 0x72,
+ 0x61, 0x6e, 0x63, 0x68, 0x12, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73,
+ 0x65, 0x72, 0x46, 0x46, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x46,
+ 0x46, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x57, 0x0a, 0x0e, 0x55, 0x73, 0x65, 0x72, 0x43,
+ 0x68, 0x65, 0x72, 0x72, 0x79, 0x50, 0x69, 0x63, 0x6b, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61,
+ 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x68, 0x65, 0x72, 0x72, 0x79, 0x50, 0x69, 0x63,
+ 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
+ 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x68, 0x65, 0x72, 0x72, 0x79, 0x50, 0x69, 0x63, 0x6b,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01,
+ 0x12, 0x5c, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x69,
+ 0x6c, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65,
+ 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65,
- 0x72, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70,
+ 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x28, 0x01, 0x12, 0x70,
+ 0x0a, 0x15, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66,
+ 0x69, 0x72, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
+ 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69,
+ 0x72, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e,
+ 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x62, 0x61, 0x73,
+ 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x28, 0x01, 0x30, 0x01,
- 0x12, 0x51, 0x0a, 0x0c, 0x55, 0x73, 0x65, 0x72, 0x46, 0x46, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68,
- 0x12, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x46, 0x46,
- 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e,
- 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x46, 0x46, 0x42, 0x72, 0x61,
- 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28,
- 0x02, 0x08, 0x01, 0x12, 0x57, 0x0a, 0x0e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x68, 0x65, 0x72, 0x72,
- 0x79, 0x50, 0x69, 0x63, 0x6b, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55,
- 0x73, 0x65, 0x72, 0x43, 0x68, 0x65, 0x72, 0x72, 0x79, 0x50, 0x69, 0x63, 0x6b, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73,
- 0x65, 0x72, 0x43, 0x68, 0x65, 0x72, 0x72, 0x79, 0x50, 0x69, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x5c, 0x0a, 0x0f,
- 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12,
- 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6d,
- 0x6d, 0x69, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6d,
- 0x6d, 0x69, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x28, 0x01, 0x12, 0x70, 0x0a, 0x15, 0x55, 0x73,
- 0x65, 0x72, 0x52, 0x65, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61,
- 0x62, 0x6c, 0x65, 0x12, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65,
- 0x72, 0x52, 0x65, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x62,
- 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x61,
- 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e,
- 0x66, 0x69, 0x72, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4b, 0x0a, 0x0a,
- 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x76, 0x65, 0x72, 0x74, 0x12, 0x19, 0x2e, 0x67, 0x69, 0x74,
- 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x76, 0x65, 0x72, 0x74, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55,
- 0x73, 0x65, 0x72, 0x52, 0x65, 0x76, 0x65, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x4b, 0x0a, 0x0a, 0x55, 0x73, 0x65,
- 0x72, 0x53, 0x71, 0x75, 0x61, 0x73, 0x68, 0x12, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
- 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x71, 0x75, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72,
- 0x53, 0x71, 0x75, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06,
- 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x59, 0x0a, 0x0e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70,
- 0x70, 0x6c, 0x79, 0x50, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
- 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x61, 0x74, 0x63, 0x68,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
- 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x61, 0x74, 0x63, 0x68, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x28,
- 0x01, 0x12, 0x66, 0x0a, 0x13, 0x55, 0x73, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53,
- 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
- 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6d,
- 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67,
+ 0x12, 0x4b, 0x0a, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x76, 0x65, 0x72, 0x74, 0x12, 0x19,
+ 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x76, 0x65,
+ 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61,
+ 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x76, 0x65, 0x72, 0x74, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x4b, 0x0a,
+ 0x0a, 0x55, 0x73, 0x65, 0x72, 0x53, 0x71, 0x75, 0x61, 0x73, 0x68, 0x12, 0x19, 0x2e, 0x67, 0x69,
+ 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x71, 0x75, 0x61, 0x73, 0x68, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
+ 0x55, 0x73, 0x65, 0x72, 0x53, 0x71, 0x75, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x59, 0x0a, 0x0e, 0x55, 0x73,
+ 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1d, 0x2e, 0x67,
+ 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50,
+ 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69,
+ 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x61,
+ 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28,
+ 0x02, 0x08, 0x01, 0x28, 0x01, 0x12, 0x66, 0x0a, 0x13, 0x55, 0x73, 0x65, 0x72, 0x55, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x22, 0x2e, 0x67,
0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
- 0x53, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74,
- 0x6c, 0x61, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2d, 0x6f,
- 0x72, 0x67, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2f, 0x76, 0x31, 0x34, 0x2f, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x70, 0x62, 0x62,
- 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x53, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x55, 0x70,
+ 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x42, 0x34, 0x5a,
+ 0x32, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x6c,
+ 0x61, 0x62, 0x2d, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2f, 0x76, 0x31,
+ 0x34, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c,
+ 0x79, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
diff --git a/proto/go/gitalypb/remote.pb.go b/proto/go/gitalypb/remote.pb.go
index c6ffeac29..6322b97d2 100644
--- a/proto/go/gitalypb/remote.pb.go
+++ b/proto/go/gitalypb/remote.pb.go
@@ -20,218 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
-type AddRemoteRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"`
- Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
- Url string `protobuf:"bytes,3,opt,name=url,proto3" json:"url,omitempty"`
- // If any, the remote is configured as a mirror with those mappings
- MirrorRefmaps []string `protobuf:"bytes,5,rep,name=mirror_refmaps,json=mirrorRefmaps,proto3" json:"mirror_refmaps,omitempty"`
-}
-
-func (x *AddRemoteRequest) Reset() {
- *x = AddRemoteRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_remote_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *AddRemoteRequest) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*AddRemoteRequest) ProtoMessage() {}
-
-func (x *AddRemoteRequest) ProtoReflect() protoreflect.Message {
- mi := &file_remote_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use AddRemoteRequest.ProtoReflect.Descriptor instead.
-func (*AddRemoteRequest) Descriptor() ([]byte, []int) {
- return file_remote_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *AddRemoteRequest) GetRepository() *Repository {
- if x != nil {
- return x.Repository
- }
- return nil
-}
-
-func (x *AddRemoteRequest) GetName() string {
- if x != nil {
- return x.Name
- }
- return ""
-}
-
-func (x *AddRemoteRequest) GetUrl() string {
- if x != nil {
- return x.Url
- }
- return ""
-}
-
-func (x *AddRemoteRequest) GetMirrorRefmaps() []string {
- if x != nil {
- return x.MirrorRefmaps
- }
- return nil
-}
-
-type AddRemoteResponse struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-}
-
-func (x *AddRemoteResponse) Reset() {
- *x = AddRemoteResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_remote_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *AddRemoteResponse) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*AddRemoteResponse) ProtoMessage() {}
-
-func (x *AddRemoteResponse) ProtoReflect() protoreflect.Message {
- mi := &file_remote_proto_msgTypes[1]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use AddRemoteResponse.ProtoReflect.Descriptor instead.
-func (*AddRemoteResponse) Descriptor() ([]byte, []int) {
- return file_remote_proto_rawDescGZIP(), []int{1}
-}
-
-type RemoveRemoteRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"`
- Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
-}
-
-func (x *RemoveRemoteRequest) Reset() {
- *x = RemoveRemoteRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_remote_proto_msgTypes[2]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *RemoveRemoteRequest) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*RemoveRemoteRequest) ProtoMessage() {}
-
-func (x *RemoveRemoteRequest) ProtoReflect() protoreflect.Message {
- mi := &file_remote_proto_msgTypes[2]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use RemoveRemoteRequest.ProtoReflect.Descriptor instead.
-func (*RemoveRemoteRequest) Descriptor() ([]byte, []int) {
- return file_remote_proto_rawDescGZIP(), []int{2}
-}
-
-func (x *RemoveRemoteRequest) GetRepository() *Repository {
- if x != nil {
- return x.Repository
- }
- return nil
-}
-
-func (x *RemoveRemoteRequest) GetName() string {
- if x != nil {
- return x.Name
- }
- return ""
-}
-
-type RemoveRemoteResponse struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- Result bool `protobuf:"varint,1,opt,name=result,proto3" json:"result,omitempty"`
-}
-
-func (x *RemoveRemoteResponse) Reset() {
- *x = RemoveRemoteResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_remote_proto_msgTypes[3]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *RemoveRemoteResponse) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*RemoveRemoteResponse) ProtoMessage() {}
-
-func (x *RemoveRemoteResponse) ProtoReflect() protoreflect.Message {
- mi := &file_remote_proto_msgTypes[3]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use RemoveRemoteResponse.ProtoReflect.Descriptor instead.
-func (*RemoveRemoteResponse) Descriptor() ([]byte, []int) {
- return file_remote_proto_rawDescGZIP(), []int{3}
-}
-
-func (x *RemoveRemoteResponse) GetResult() bool {
- if x != nil {
- return x.Result
- }
- return false
-}
-
type FetchInternalRemoteRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -244,7 +32,7 @@ type FetchInternalRemoteRequest struct {
func (x *FetchInternalRemoteRequest) Reset() {
*x = FetchInternalRemoteRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_remote_proto_msgTypes[4]
+ mi := &file_remote_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -257,7 +45,7 @@ func (x *FetchInternalRemoteRequest) String() string {
func (*FetchInternalRemoteRequest) ProtoMessage() {}
func (x *FetchInternalRemoteRequest) ProtoReflect() protoreflect.Message {
- mi := &file_remote_proto_msgTypes[4]
+ mi := &file_remote_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -270,7 +58,7 @@ func (x *FetchInternalRemoteRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use FetchInternalRemoteRequest.ProtoReflect.Descriptor instead.
func (*FetchInternalRemoteRequest) Descriptor() ([]byte, []int) {
- return file_remote_proto_rawDescGZIP(), []int{4}
+ return file_remote_proto_rawDescGZIP(), []int{0}
}
func (x *FetchInternalRemoteRequest) GetRepository() *Repository {
@@ -298,7 +86,7 @@ type FetchInternalRemoteResponse struct {
func (x *FetchInternalRemoteResponse) Reset() {
*x = FetchInternalRemoteResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_remote_proto_msgTypes[5]
+ mi := &file_remote_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -311,7 +99,7 @@ func (x *FetchInternalRemoteResponse) String() string {
func (*FetchInternalRemoteResponse) ProtoMessage() {}
func (x *FetchInternalRemoteResponse) ProtoReflect() protoreflect.Message {
- mi := &file_remote_proto_msgTypes[5]
+ mi := &file_remote_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -324,7 +112,7 @@ func (x *FetchInternalRemoteResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use FetchInternalRemoteResponse.ProtoReflect.Descriptor instead.
func (*FetchInternalRemoteResponse) Descriptor() ([]byte, []int) {
- return file_remote_proto_rawDescGZIP(), []int{5}
+ return file_remote_proto_rawDescGZIP(), []int{1}
}
func (x *FetchInternalRemoteResponse) GetResult() bool {
@@ -341,9 +129,6 @@ type UpdateRemoteMirrorRequest struct {
// Repository is the repository whose mirror repository to update.
Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"`
- // RefName is actually the remote to update. Deprecated in favor of the
- // Remote field.
- RefName string `protobuf:"bytes,2,opt,name=ref_name,json=refName,proto3" json:"ref_name,omitempty"`
// Remote contains parameters required to connect to the remote repository.
// This allows Gitaly to use an in-memory remote and does not require any
// on-disk remote configuration.
@@ -369,7 +154,7 @@ type UpdateRemoteMirrorRequest struct {
func (x *UpdateRemoteMirrorRequest) Reset() {
*x = UpdateRemoteMirrorRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_remote_proto_msgTypes[6]
+ mi := &file_remote_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -382,7 +167,7 @@ func (x *UpdateRemoteMirrorRequest) String() string {
func (*UpdateRemoteMirrorRequest) ProtoMessage() {}
func (x *UpdateRemoteMirrorRequest) ProtoReflect() protoreflect.Message {
- mi := &file_remote_proto_msgTypes[6]
+ mi := &file_remote_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -395,7 +180,7 @@ func (x *UpdateRemoteMirrorRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateRemoteMirrorRequest.ProtoReflect.Descriptor instead.
func (*UpdateRemoteMirrorRequest) Descriptor() ([]byte, []int) {
- return file_remote_proto_rawDescGZIP(), []int{6}
+ return file_remote_proto_rawDescGZIP(), []int{2}
}
func (x *UpdateRemoteMirrorRequest) GetRepository() *Repository {
@@ -405,13 +190,6 @@ func (x *UpdateRemoteMirrorRequest) GetRepository() *Repository {
return nil
}
-func (x *UpdateRemoteMirrorRequest) GetRefName() string {
- if x != nil {
- return x.RefName
- }
- return ""
-}
-
func (x *UpdateRemoteMirrorRequest) GetRemote() *UpdateRemoteMirrorRequest_Remote {
if x != nil {
return x.Remote
@@ -460,7 +238,7 @@ type UpdateRemoteMirrorResponse struct {
func (x *UpdateRemoteMirrorResponse) Reset() {
*x = UpdateRemoteMirrorResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_remote_proto_msgTypes[7]
+ mi := &file_remote_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -473,7 +251,7 @@ func (x *UpdateRemoteMirrorResponse) String() string {
func (*UpdateRemoteMirrorResponse) ProtoMessage() {}
func (x *UpdateRemoteMirrorResponse) ProtoReflect() protoreflect.Message {
- mi := &file_remote_proto_msgTypes[7]
+ mi := &file_remote_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -486,7 +264,7 @@ func (x *UpdateRemoteMirrorResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateRemoteMirrorResponse.ProtoReflect.Descriptor instead.
func (*UpdateRemoteMirrorResponse) Descriptor() ([]byte, []int) {
- return file_remote_proto_rawDescGZIP(), []int{7}
+ return file_remote_proto_rawDescGZIP(), []int{3}
}
func (x *UpdateRemoteMirrorResponse) GetDivergentRefs() [][]byte {
@@ -511,7 +289,7 @@ type FindRemoteRepositoryRequest struct {
func (x *FindRemoteRepositoryRequest) Reset() {
*x = FindRemoteRepositoryRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_remote_proto_msgTypes[8]
+ mi := &file_remote_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -524,7 +302,7 @@ func (x *FindRemoteRepositoryRequest) String() string {
func (*FindRemoteRepositoryRequest) ProtoMessage() {}
func (x *FindRemoteRepositoryRequest) ProtoReflect() protoreflect.Message {
- mi := &file_remote_proto_msgTypes[8]
+ mi := &file_remote_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -537,7 +315,7 @@ func (x *FindRemoteRepositoryRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use FindRemoteRepositoryRequest.ProtoReflect.Descriptor instead.
func (*FindRemoteRepositoryRequest) Descriptor() ([]byte, []int) {
- return file_remote_proto_rawDescGZIP(), []int{8}
+ return file_remote_proto_rawDescGZIP(), []int{4}
}
func (x *FindRemoteRepositoryRequest) GetRemote() string {
@@ -567,7 +345,7 @@ type FindRemoteRepositoryResponse struct {
func (x *FindRemoteRepositoryResponse) Reset() {
*x = FindRemoteRepositoryResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_remote_proto_msgTypes[9]
+ mi := &file_remote_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -580,7 +358,7 @@ func (x *FindRemoteRepositoryResponse) String() string {
func (*FindRemoteRepositoryResponse) ProtoMessage() {}
func (x *FindRemoteRepositoryResponse) ProtoReflect() protoreflect.Message {
- mi := &file_remote_proto_msgTypes[9]
+ mi := &file_remote_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -593,7 +371,7 @@ func (x *FindRemoteRepositoryResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use FindRemoteRepositoryResponse.ProtoReflect.Descriptor instead.
func (*FindRemoteRepositoryResponse) Descriptor() ([]byte, []int) {
- return file_remote_proto_rawDescGZIP(), []int{9}
+ return file_remote_proto_rawDescGZIP(), []int{5}
}
func (x *FindRemoteRepositoryResponse) GetExists() bool {
@@ -613,13 +391,6 @@ type FindRemoteRootRefRequest struct {
// a remote name is given, then this is the repository in which the remote
// will be looked up.
Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"`
- // Remote is the name of the remote of which the root reference shall be
- // looked up. The remote must have been created before this call. This
- // parameter is deprecated in favor of `RemoteUrl`, see
- // https://gitlab.com/gitlab-org/gitaly/-/issues/1773.
- //
- // Deprecated: Do not use.
- Remote string `protobuf:"bytes,2,opt,name=remote,proto3" json:"remote,omitempty"`
// RemoteUrl specifies the remote repository URL which should be fetched from.
RemoteUrl string `protobuf:"bytes,3,opt,name=remote_url,json=remoteUrl,proto3" json:"remote_url,omitempty"`
// HttpAuthorizationHeader is the HTTP header which should be added to the
@@ -630,7 +401,7 @@ type FindRemoteRootRefRequest struct {
func (x *FindRemoteRootRefRequest) Reset() {
*x = FindRemoteRootRefRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_remote_proto_msgTypes[10]
+ mi := &file_remote_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -643,7 +414,7 @@ func (x *FindRemoteRootRefRequest) String() string {
func (*FindRemoteRootRefRequest) ProtoMessage() {}
func (x *FindRemoteRootRefRequest) ProtoReflect() protoreflect.Message {
- mi := &file_remote_proto_msgTypes[10]
+ mi := &file_remote_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -656,7 +427,7 @@ func (x *FindRemoteRootRefRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use FindRemoteRootRefRequest.ProtoReflect.Descriptor instead.
func (*FindRemoteRootRefRequest) Descriptor() ([]byte, []int) {
- return file_remote_proto_rawDescGZIP(), []int{10}
+ return file_remote_proto_rawDescGZIP(), []int{6}
}
func (x *FindRemoteRootRefRequest) GetRepository() *Repository {
@@ -666,14 +437,6 @@ func (x *FindRemoteRootRefRequest) GetRepository() *Repository {
return nil
}
-// Deprecated: Do not use.
-func (x *FindRemoteRootRefRequest) GetRemote() string {
- if x != nil {
- return x.Remote
- }
- return ""
-}
-
func (x *FindRemoteRootRefRequest) GetRemoteUrl() string {
if x != nil {
return x.RemoteUrl
@@ -702,7 +465,7 @@ type FindRemoteRootRefResponse struct {
func (x *FindRemoteRootRefResponse) Reset() {
*x = FindRemoteRootRefResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_remote_proto_msgTypes[11]
+ mi := &file_remote_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -715,7 +478,7 @@ func (x *FindRemoteRootRefResponse) String() string {
func (*FindRemoteRootRefResponse) ProtoMessage() {}
func (x *FindRemoteRootRefResponse) ProtoReflect() protoreflect.Message {
- mi := &file_remote_proto_msgTypes[11]
+ mi := &file_remote_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -728,7 +491,7 @@ func (x *FindRemoteRootRefResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use FindRemoteRootRefResponse.ProtoReflect.Descriptor instead.
func (*FindRemoteRootRefResponse) Descriptor() ([]byte, []int) {
- return file_remote_proto_rawDescGZIP(), []int{11}
+ return file_remote_proto_rawDescGZIP(), []int{7}
}
func (x *FindRemoteRootRefResponse) GetRef() string {
@@ -738,100 +501,6 @@ func (x *FindRemoteRootRefResponse) GetRef() string {
return ""
}
-type ListRemotesRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"`
-}
-
-func (x *ListRemotesRequest) Reset() {
- *x = ListRemotesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_remote_proto_msgTypes[12]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *ListRemotesRequest) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ListRemotesRequest) ProtoMessage() {}
-
-func (x *ListRemotesRequest) ProtoReflect() protoreflect.Message {
- mi := &file_remote_proto_msgTypes[12]
- 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 ListRemotesRequest.ProtoReflect.Descriptor instead.
-func (*ListRemotesRequest) Descriptor() ([]byte, []int) {
- return file_remote_proto_rawDescGZIP(), []int{12}
-}
-
-func (x *ListRemotesRequest) GetRepository() *Repository {
- if x != nil {
- return x.Repository
- }
- return nil
-}
-
-type ListRemotesResponse struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- Remotes []*ListRemotesResponse_Remote `protobuf:"bytes,1,rep,name=remotes,proto3" json:"remotes,omitempty"`
-}
-
-func (x *ListRemotesResponse) Reset() {
- *x = ListRemotesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_remote_proto_msgTypes[13]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *ListRemotesResponse) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ListRemotesResponse) ProtoMessage() {}
-
-func (x *ListRemotesResponse) ProtoReflect() protoreflect.Message {
- mi := &file_remote_proto_msgTypes[13]
- 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 ListRemotesResponse.ProtoReflect.Descriptor instead.
-func (*ListRemotesResponse) Descriptor() ([]byte, []int) {
- return file_remote_proto_rawDescGZIP(), []int{13}
-}
-
-func (x *ListRemotesResponse) GetRemotes() []*ListRemotesResponse_Remote {
- if x != nil {
- return x.Remotes
- }
- return nil
-}
-
type UpdateRemoteMirrorRequest_Remote struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -847,7 +516,7 @@ type UpdateRemoteMirrorRequest_Remote struct {
func (x *UpdateRemoteMirrorRequest_Remote) Reset() {
*x = UpdateRemoteMirrorRequest_Remote{}
if protoimpl.UnsafeEnabled {
- mi := &file_remote_proto_msgTypes[14]
+ mi := &file_remote_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -860,7 +529,7 @@ func (x *UpdateRemoteMirrorRequest_Remote) String() string {
func (*UpdateRemoteMirrorRequest_Remote) ProtoMessage() {}
func (x *UpdateRemoteMirrorRequest_Remote) ProtoReflect() protoreflect.Message {
- mi := &file_remote_proto_msgTypes[14]
+ mi := &file_remote_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -873,7 +542,7 @@ func (x *UpdateRemoteMirrorRequest_Remote) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateRemoteMirrorRequest_Remote.ProtoReflect.Descriptor instead.
func (*UpdateRemoteMirrorRequest_Remote) Descriptor() ([]byte, []int) {
- return file_remote_proto_rawDescGZIP(), []int{6, 0}
+ return file_remote_proto_rawDescGZIP(), []int{2, 0}
}
func (x *UpdateRemoteMirrorRequest_Remote) GetUrl() string {
@@ -890,223 +559,111 @@ func (x *UpdateRemoteMirrorRequest_Remote) GetHttpAuthorizationHeader() string {
return ""
}
-type ListRemotesResponse_Remote struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
- FetchUrl string `protobuf:"bytes,2,opt,name=fetch_url,json=fetchUrl,proto3" json:"fetch_url,omitempty"`
- PushUrl string `protobuf:"bytes,3,opt,name=push_url,json=pushUrl,proto3" json:"push_url,omitempty"`
-}
-
-func (x *ListRemotesResponse_Remote) Reset() {
- *x = ListRemotesResponse_Remote{}
- if protoimpl.UnsafeEnabled {
- mi := &file_remote_proto_msgTypes[15]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *ListRemotesResponse_Remote) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ListRemotesResponse_Remote) ProtoMessage() {}
-
-func (x *ListRemotesResponse_Remote) ProtoReflect() protoreflect.Message {
- mi := &file_remote_proto_msgTypes[15]
- 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 ListRemotesResponse_Remote.ProtoReflect.Descriptor instead.
-func (*ListRemotesResponse_Remote) Descriptor() ([]byte, []int) {
- return file_remote_proto_rawDescGZIP(), []int{13, 0}
-}
-
-func (x *ListRemotesResponse_Remote) GetName() string {
- if x != nil {
- return x.Name
- }
- return ""
-}
-
-func (x *ListRemotesResponse_Remote) GetFetchUrl() string {
- if x != nil {
- return x.FetchUrl
- }
- return ""
-}
-
-func (x *ListRemotesResponse_Remote) GetPushUrl() string {
- if x != nil {
- return x.PushUrl
- }
- return ""
-}
-
var File_remote_proto protoreflect.FileDescriptor
var file_remote_proto_rawDesc = []byte{
0x0a, 0x0c, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06,
0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x1a, 0x0a, 0x6c, 0x69, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x1a, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x22, 0xae, 0x01, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74,
- 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61,
- 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98,
- 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12,
- 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
- 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x5f,
- 0x72, 0x65, 0x66, 0x6d, 0x61, 0x70, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x6d,
- 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x66, 0x6d, 0x61, 0x70, 0x73, 0x4a, 0x04, 0x08, 0x04,
- 0x10, 0x05, 0x52, 0x0d, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72, 0x65, 0x66, 0x6d, 0x61,
- 0x70, 0x22, 0x13, 0x0a, 0x11, 0x41, 0x64, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x63, 0x0a, 0x13, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65,
- 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a,
+ 0x22, 0x97, 0x01, 0x0a, 0x1a, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x6c, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70,
+ 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72,
+ 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x3f, 0x0a, 0x11, 0x72, 0x65, 0x6d,
+ 0x6f, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65,
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x10, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65,
+ 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x35, 0x0a, 0x1b, 0x46, 0x65,
+ 0x74, 0x63, 0x68, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x6d, 0x6f, 0x74,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73,
+ 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c,
+ 0x74, 0x22, 0x9f, 0x03, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6d, 0x6f,
+ 0x74, 0x65, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70,
+ 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72,
+ 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x6d,
+ 0x6f, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x69, 0x74, 0x61,
+ 0x6c, 0x79, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4d,
+ 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x6d,
+ 0x6f, 0x74, 0x65, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x6f,
+ 0x6e, 0x6c, 0x79, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x5f, 0x6d, 0x61, 0x74,
+ 0x63, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x14, 0x6f, 0x6e, 0x6c,
+ 0x79, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e,
+ 0x67, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x73, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x06, 0x73, 0x73, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x6b, 0x6e,
+ 0x6f, 0x77, 0x6e, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x0a, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x6b,
+ 0x65, 0x65, 0x70, 0x5f, 0x64, 0x69, 0x76, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65,
+ 0x66, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6b, 0x65, 0x65, 0x70, 0x44, 0x69,
+ 0x76, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x66, 0x73, 0x1a, 0x56, 0x0a, 0x06, 0x52,
+ 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x3a, 0x0a, 0x19, 0x68, 0x74, 0x74, 0x70, 0x5f,
+ 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65,
+ 0x61, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x68, 0x74, 0x74, 0x70,
+ 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x08, 0x72, 0x65, 0x66, 0x5f, 0x6e,
+ 0x61, 0x6d, 0x65, 0x22, 0x43, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6d,
+ 0x6f, 0x74, 0x65, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69, 0x76, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x72,
+ 0x65, 0x66, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0d, 0x64, 0x69, 0x76, 0x65, 0x72,
+ 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x66, 0x73, 0x22, 0x5e, 0x0a, 0x1b, 0x46, 0x69, 0x6e, 0x64,
+ 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74,
+ 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12,
+ 0x27, 0x0a, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0x88, 0xc6, 0x2c, 0x01, 0x52, 0x0b, 0x73, 0x74, 0x6f,
+ 0x72, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x36, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64,
+ 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x69, 0x73,
+ 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73,
+ 0x22, 0xbd, 0x01, 0x0a, 0x18, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52,
+ 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x66, 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, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x2e, 0x0a, 0x14, 0x52,
- 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x97, 0x01, 0x0a, 0x1a,
- 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x6d,
- 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65,
- 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12,
- 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f,
- 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69,
- 0x74, 0x6f, 0x72, 0x79, 0x12, 0x3f, 0x0a, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x72,
- 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74,
- 0x6f, 0x72, 0x79, 0x52, 0x10, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73,
- 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x35, 0x0a, 0x1b, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x6e,
- 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xaa, 0x03, 0x0a,
- 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4d, 0x69, 0x72,
- 0x72, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65,
- 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12,
- 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f,
- 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69,
- 0x74, 0x6f, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x66, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x12,
- 0x40, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x28, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52,
+ 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74,
+ 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x6d,
+ 0x6f, 0x74, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x3a, 0x0a, 0x19, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x61,
+ 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x68, 0x74, 0x74, 0x70, 0x41,
+ 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65,
+ 0x22, 0x2d, 0x0a, 0x19, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x6f,
+ 0x6f, 0x74, 0x52, 0x65, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a,
+ 0x03, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x32,
+ 0xad, 0x03, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+ 0x65, 0x12, 0x66, 0x0a, 0x13, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x6c, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
+ 0x79, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52,
+ 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67,
+ 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x74, 0x65, 0x72,
+ 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x65, 0x0a, 0x12, 0x55, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x12,
+ 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52,
0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74,
- 0x65, 0x12, 0x34, 0x0a, 0x16, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68,
- 0x65, 0x73, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28,
- 0x0c, 0x52, 0x14, 0x6f, 0x6e, 0x6c, 0x79, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x4d,
- 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x73, 0x68, 0x5f, 0x6b,
- 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x73, 0x68, 0x4b, 0x65, 0x79,
- 0x12, 0x1f, 0x0a, 0x0b, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18,
- 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x48, 0x6f, 0x73, 0x74,
- 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x64, 0x69, 0x76, 0x65, 0x72, 0x67,
- 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11,
- 0x6b, 0x65, 0x65, 0x70, 0x44, 0x69, 0x76, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x66,
- 0x73, 0x1a, 0x56, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75,
- 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x3a, 0x0a,
- 0x19, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x17, 0x68, 0x74, 0x74, 0x70, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x43, 0x0a, 0x1a, 0x55, 0x70, 0x64,
- 0x61, 0x74, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69, 0x76, 0x65, 0x72,
- 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52,
- 0x0d, 0x64, 0x69, 0x76, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x66, 0x73, 0x22, 0x5e,
- 0x0a, 0x1b, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f,
- 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a,
- 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72,
- 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
- 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0x88, 0xc6, 0x2c,
- 0x01, 0x52, 0x0b, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x36,
- 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f,
- 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16,
- 0x0a, 0x06, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06,
- 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0xcb, 0x01, 0x0a, 0x18, 0x46, 0x69, 0x6e, 0x64, 0x52,
- 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x66, 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,
- 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18,
- 0x01, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6d,
- 0x6f, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72,
- 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x3a, 0x0a, 0x19, 0x68, 0x74, 0x74, 0x70,
- 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68,
- 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x68, 0x74, 0x74,
- 0x70, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65,
- 0x61, 0x64, 0x65, 0x72, 0x22, 0x2d, 0x0a, 0x19, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x6d, 0x6f,
- 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
- 0x72, 0x65, 0x66, 0x22, 0x4e, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x74,
- 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, 0x22, 0xa9, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6d, 0x6f,
- 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x72,
- 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67,
- 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65,
- 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65,
- 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x73, 0x1a, 0x54, 0x0a, 0x06, 0x52, 0x65, 0x6d,
- 0x6f, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x65, 0x74, 0x63, 0x68,
- 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, 0x74, 0x63,
- 0x68, 0x55, 0x72, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x75, 0x73, 0x68, 0x5f, 0x75, 0x72, 0x6c,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x75, 0x73, 0x68, 0x55, 0x72, 0x6c, 0x32,
- 0xca, 0x04, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
- 0x65, 0x12, 0x48, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x18,
- 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74,
- 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
- 0x79, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x66, 0x0a, 0x13, 0x46,
- 0x65, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x6d, 0x6f,
- 0x74, 0x65, 0x12, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x65, 0x74, 0x63,
- 0x68, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
- 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x6d,
- 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28,
- 0x02, 0x08, 0x01, 0x12, 0x51, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x6d,
- 0x6f, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x6d,
- 0x6f, 0x76, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65,
- 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06,
- 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x65, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
- 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x21, 0x2e, 0x67,
- 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6d, 0x6f,
- 0x74, 0x65, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52,
- 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x28, 0x01, 0x12, 0x6b, 0x0a,
- 0x14, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73,
- 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46,
- 0x69, 0x6e, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74,
- 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x67, 0x69, 0x74,
- 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65,
- 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x08, 0xfa, 0x97, 0x28, 0x04, 0x08, 0x02, 0x10, 0x02, 0x12, 0x60, 0x0a, 0x11, 0x46, 0x69,
- 0x6e, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x66, 0x12,
- 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x6d,
- 0x6f, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52,
- 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x66, 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, 0x34,
- 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
- 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x55, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x28, 0x01,
+ 0x12, 0x6b, 0x0a, 0x14, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65,
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
+ 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f,
+ 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e,
+ 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74,
+ 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x08, 0xfa, 0x97, 0x28, 0x04, 0x08, 0x02, 0x10, 0x02, 0x12, 0x60, 0x0a,
+ 0x11, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52,
+ 0x65, 0x66, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64,
+ 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x66, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69,
+ 0x6e, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x66, 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, 0x34, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x69, 0x74,
+ 0x61, 0x6c, 0x79, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -1121,53 +678,38 @@ func file_remote_proto_rawDescGZIP() []byte {
return file_remote_proto_rawDescData
}
-var file_remote_proto_msgTypes = make([]protoimpl.MessageInfo, 16)
+var file_remote_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
var file_remote_proto_goTypes = []interface{}{
- (*AddRemoteRequest)(nil), // 0: gitaly.AddRemoteRequest
- (*AddRemoteResponse)(nil), // 1: gitaly.AddRemoteResponse
- (*RemoveRemoteRequest)(nil), // 2: gitaly.RemoveRemoteRequest
- (*RemoveRemoteResponse)(nil), // 3: gitaly.RemoveRemoteResponse
- (*FetchInternalRemoteRequest)(nil), // 4: gitaly.FetchInternalRemoteRequest
- (*FetchInternalRemoteResponse)(nil), // 5: gitaly.FetchInternalRemoteResponse
- (*UpdateRemoteMirrorRequest)(nil), // 6: gitaly.UpdateRemoteMirrorRequest
- (*UpdateRemoteMirrorResponse)(nil), // 7: gitaly.UpdateRemoteMirrorResponse
- (*FindRemoteRepositoryRequest)(nil), // 8: gitaly.FindRemoteRepositoryRequest
- (*FindRemoteRepositoryResponse)(nil), // 9: gitaly.FindRemoteRepositoryResponse
- (*FindRemoteRootRefRequest)(nil), // 10: gitaly.FindRemoteRootRefRequest
- (*FindRemoteRootRefResponse)(nil), // 11: gitaly.FindRemoteRootRefResponse
- (*ListRemotesRequest)(nil), // 12: gitaly.ListRemotesRequest
- (*ListRemotesResponse)(nil), // 13: gitaly.ListRemotesResponse
- (*UpdateRemoteMirrorRequest_Remote)(nil), // 14: gitaly.UpdateRemoteMirrorRequest.Remote
- (*ListRemotesResponse_Remote)(nil), // 15: gitaly.ListRemotesResponse.Remote
- (*Repository)(nil), // 16: gitaly.Repository
+ (*FetchInternalRemoteRequest)(nil), // 0: gitaly.FetchInternalRemoteRequest
+ (*FetchInternalRemoteResponse)(nil), // 1: gitaly.FetchInternalRemoteResponse
+ (*UpdateRemoteMirrorRequest)(nil), // 2: gitaly.UpdateRemoteMirrorRequest
+ (*UpdateRemoteMirrorResponse)(nil), // 3: gitaly.UpdateRemoteMirrorResponse
+ (*FindRemoteRepositoryRequest)(nil), // 4: gitaly.FindRemoteRepositoryRequest
+ (*FindRemoteRepositoryResponse)(nil), // 5: gitaly.FindRemoteRepositoryResponse
+ (*FindRemoteRootRefRequest)(nil), // 6: gitaly.FindRemoteRootRefRequest
+ (*FindRemoteRootRefResponse)(nil), // 7: gitaly.FindRemoteRootRefResponse
+ (*UpdateRemoteMirrorRequest_Remote)(nil), // 8: gitaly.UpdateRemoteMirrorRequest.Remote
+ (*Repository)(nil), // 9: gitaly.Repository
}
var file_remote_proto_depIdxs = []int32{
- 16, // 0: gitaly.AddRemoteRequest.repository:type_name -> gitaly.Repository
- 16, // 1: gitaly.RemoveRemoteRequest.repository:type_name -> gitaly.Repository
- 16, // 2: gitaly.FetchInternalRemoteRequest.repository:type_name -> gitaly.Repository
- 16, // 3: gitaly.FetchInternalRemoteRequest.remote_repository:type_name -> gitaly.Repository
- 16, // 4: gitaly.UpdateRemoteMirrorRequest.repository:type_name -> gitaly.Repository
- 14, // 5: gitaly.UpdateRemoteMirrorRequest.remote:type_name -> gitaly.UpdateRemoteMirrorRequest.Remote
- 16, // 6: gitaly.FindRemoteRootRefRequest.repository:type_name -> gitaly.Repository
- 16, // 7: gitaly.ListRemotesRequest.repository:type_name -> gitaly.Repository
- 15, // 8: gitaly.ListRemotesResponse.remotes:type_name -> gitaly.ListRemotesResponse.Remote
- 0, // 9: gitaly.RemoteService.AddRemote:input_type -> gitaly.AddRemoteRequest
- 4, // 10: gitaly.RemoteService.FetchInternalRemote:input_type -> gitaly.FetchInternalRemoteRequest
- 2, // 11: gitaly.RemoteService.RemoveRemote:input_type -> gitaly.RemoveRemoteRequest
- 6, // 12: gitaly.RemoteService.UpdateRemoteMirror:input_type -> gitaly.UpdateRemoteMirrorRequest
- 8, // 13: gitaly.RemoteService.FindRemoteRepository:input_type -> gitaly.FindRemoteRepositoryRequest
- 10, // 14: gitaly.RemoteService.FindRemoteRootRef:input_type -> gitaly.FindRemoteRootRefRequest
- 1, // 15: gitaly.RemoteService.AddRemote:output_type -> gitaly.AddRemoteResponse
- 5, // 16: gitaly.RemoteService.FetchInternalRemote:output_type -> gitaly.FetchInternalRemoteResponse
- 3, // 17: gitaly.RemoteService.RemoveRemote:output_type -> gitaly.RemoveRemoteResponse
- 7, // 18: gitaly.RemoteService.UpdateRemoteMirror:output_type -> gitaly.UpdateRemoteMirrorResponse
- 9, // 19: gitaly.RemoteService.FindRemoteRepository:output_type -> gitaly.FindRemoteRepositoryResponse
- 11, // 20: gitaly.RemoteService.FindRemoteRootRef:output_type -> gitaly.FindRemoteRootRefResponse
- 15, // [15:21] is the sub-list for method output_type
- 9, // [9:15] is the sub-list for method input_type
- 9, // [9:9] is the sub-list for extension type_name
- 9, // [9:9] is the sub-list for extension extendee
- 0, // [0:9] is the sub-list for field type_name
+ 9, // 0: gitaly.FetchInternalRemoteRequest.repository:type_name -> gitaly.Repository
+ 9, // 1: gitaly.FetchInternalRemoteRequest.remote_repository:type_name -> gitaly.Repository
+ 9, // 2: gitaly.UpdateRemoteMirrorRequest.repository:type_name -> gitaly.Repository
+ 8, // 3: gitaly.UpdateRemoteMirrorRequest.remote:type_name -> gitaly.UpdateRemoteMirrorRequest.Remote
+ 9, // 4: gitaly.FindRemoteRootRefRequest.repository:type_name -> gitaly.Repository
+ 0, // 5: gitaly.RemoteService.FetchInternalRemote:input_type -> gitaly.FetchInternalRemoteRequest
+ 2, // 6: gitaly.RemoteService.UpdateRemoteMirror:input_type -> gitaly.UpdateRemoteMirrorRequest
+ 4, // 7: gitaly.RemoteService.FindRemoteRepository:input_type -> gitaly.FindRemoteRepositoryRequest
+ 6, // 8: gitaly.RemoteService.FindRemoteRootRef:input_type -> gitaly.FindRemoteRootRefRequest
+ 1, // 9: gitaly.RemoteService.FetchInternalRemote:output_type -> gitaly.FetchInternalRemoteResponse
+ 3, // 10: gitaly.RemoteService.UpdateRemoteMirror:output_type -> gitaly.UpdateRemoteMirrorResponse
+ 5, // 11: gitaly.RemoteService.FindRemoteRepository:output_type -> gitaly.FindRemoteRepositoryResponse
+ 7, // 12: gitaly.RemoteService.FindRemoteRootRef:output_type -> gitaly.FindRemoteRootRefResponse
+ 9, // [9:13] is the sub-list for method output_type
+ 5, // [5:9] is the sub-list for method input_type
+ 5, // [5:5] is the sub-list for extension type_name
+ 5, // [5:5] is the sub-list for extension extendee
+ 0, // [0:5] is the sub-list for field type_name
}
func init() { file_remote_proto_init() }
@@ -1179,54 +721,6 @@ func file_remote_proto_init() {
file_shared_proto_init()
if !protoimpl.UnsafeEnabled {
file_remote_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AddRemoteRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_remote_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AddRemoteResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_remote_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*RemoveRemoteRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_remote_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*RemoveRemoteResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_remote_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*FetchInternalRemoteRequest); i {
case 0:
return &v.state
@@ -1238,7 +732,7 @@ func file_remote_proto_init() {
return nil
}
}
- file_remote_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ file_remote_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*FetchInternalRemoteResponse); i {
case 0:
return &v.state
@@ -1250,7 +744,7 @@ func file_remote_proto_init() {
return nil
}
}
- file_remote_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ file_remote_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UpdateRemoteMirrorRequest); i {
case 0:
return &v.state
@@ -1262,7 +756,7 @@ func file_remote_proto_init() {
return nil
}
}
- file_remote_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+ file_remote_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UpdateRemoteMirrorResponse); i {
case 0:
return &v.state
@@ -1274,7 +768,7 @@ func file_remote_proto_init() {
return nil
}
}
- file_remote_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+ file_remote_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*FindRemoteRepositoryRequest); i {
case 0:
return &v.state
@@ -1286,7 +780,7 @@ func file_remote_proto_init() {
return nil
}
}
- file_remote_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+ file_remote_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*FindRemoteRepositoryResponse); i {
case 0:
return &v.state
@@ -1298,7 +792,7 @@ func file_remote_proto_init() {
return nil
}
}
- file_remote_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+ file_remote_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*FindRemoteRootRefRequest); i {
case 0:
return &v.state
@@ -1310,7 +804,7 @@ func file_remote_proto_init() {
return nil
}
}
- file_remote_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+ file_remote_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*FindRemoteRootRefResponse); i {
case 0:
return &v.state
@@ -1322,31 +816,7 @@ func file_remote_proto_init() {
return nil
}
}
- file_remote_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ListRemotesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_remote_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ListRemotesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_remote_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+ file_remote_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UpdateRemoteMirrorRequest_Remote); i {
case 0:
return &v.state
@@ -1358,18 +828,6 @@ func file_remote_proto_init() {
return nil
}
}
- file_remote_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ListRemotesResponse_Remote); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
}
type x struct{}
out := protoimpl.TypeBuilder{
@@ -1377,7 +835,7 @@ func file_remote_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_remote_proto_rawDesc,
NumEnums: 0,
- NumMessages: 16,
+ NumMessages: 9,
NumExtensions: 0,
NumServices: 1,
},
diff --git a/proto/go/gitalypb/remote_grpc.pb.go b/proto/go/gitalypb/remote_grpc.pb.go
index 4c6efadd9..ac70dfbdf 100644
--- a/proto/go/gitalypb/remote_grpc.pb.go
+++ b/proto/go/gitalypb/remote_grpc.pb.go
@@ -18,9 +18,7 @@ const _ = grpc.SupportPackageIsVersion7
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type RemoteServiceClient interface {
- AddRemote(ctx context.Context, in *AddRemoteRequest, opts ...grpc.CallOption) (*AddRemoteResponse, error)
FetchInternalRemote(ctx context.Context, in *FetchInternalRemoteRequest, opts ...grpc.CallOption) (*FetchInternalRemoteResponse, error)
- RemoveRemote(ctx context.Context, in *RemoveRemoteRequest, opts ...grpc.CallOption) (*RemoveRemoteResponse, error)
// UpdateRemoteMirror compares the references in the target repository and its remote mirror
// repository. Any differences in the references are then addressed by pushing the differing
// references to the mirror. Created and modified references are updated, removed references are
@@ -44,15 +42,6 @@ func NewRemoteServiceClient(cc grpc.ClientConnInterface) RemoteServiceClient {
return &remoteServiceClient{cc}
}
-func (c *remoteServiceClient) AddRemote(ctx context.Context, in *AddRemoteRequest, opts ...grpc.CallOption) (*AddRemoteResponse, error) {
- out := new(AddRemoteResponse)
- err := c.cc.Invoke(ctx, "/gitaly.RemoteService/AddRemote", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
func (c *remoteServiceClient) FetchInternalRemote(ctx context.Context, in *FetchInternalRemoteRequest, opts ...grpc.CallOption) (*FetchInternalRemoteResponse, error) {
out := new(FetchInternalRemoteResponse)
err := c.cc.Invoke(ctx, "/gitaly.RemoteService/FetchInternalRemote", in, out, opts...)
@@ -62,15 +51,6 @@ func (c *remoteServiceClient) FetchInternalRemote(ctx context.Context, in *Fetch
return out, nil
}
-func (c *remoteServiceClient) RemoveRemote(ctx context.Context, in *RemoveRemoteRequest, opts ...grpc.CallOption) (*RemoveRemoteResponse, error) {
- out := new(RemoveRemoteResponse)
- err := c.cc.Invoke(ctx, "/gitaly.RemoteService/RemoveRemote", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
func (c *remoteServiceClient) UpdateRemoteMirror(ctx context.Context, opts ...grpc.CallOption) (RemoteService_UpdateRemoteMirrorClient, error) {
stream, err := c.cc.NewStream(ctx, &RemoteService_ServiceDesc.Streams[0], "/gitaly.RemoteService/UpdateRemoteMirror", opts...)
if err != nil {
@@ -127,9 +107,7 @@ func (c *remoteServiceClient) FindRemoteRootRef(ctx context.Context, in *FindRem
// All implementations must embed UnimplementedRemoteServiceServer
// for forward compatibility
type RemoteServiceServer interface {
- AddRemote(context.Context, *AddRemoteRequest) (*AddRemoteResponse, error)
FetchInternalRemote(context.Context, *FetchInternalRemoteRequest) (*FetchInternalRemoteResponse, error)
- RemoveRemote(context.Context, *RemoveRemoteRequest) (*RemoveRemoteResponse, error)
// UpdateRemoteMirror compares the references in the target repository and its remote mirror
// repository. Any differences in the references are then addressed by pushing the differing
// references to the mirror. Created and modified references are updated, removed references are
@@ -150,15 +128,9 @@ type RemoteServiceServer interface {
type UnimplementedRemoteServiceServer struct {
}
-func (UnimplementedRemoteServiceServer) AddRemote(context.Context, *AddRemoteRequest) (*AddRemoteResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method AddRemote not implemented")
-}
func (UnimplementedRemoteServiceServer) FetchInternalRemote(context.Context, *FetchInternalRemoteRequest) (*FetchInternalRemoteResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method FetchInternalRemote not implemented")
}
-func (UnimplementedRemoteServiceServer) RemoveRemote(context.Context, *RemoveRemoteRequest) (*RemoveRemoteResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method RemoveRemote not implemented")
-}
func (UnimplementedRemoteServiceServer) UpdateRemoteMirror(RemoteService_UpdateRemoteMirrorServer) error {
return status.Errorf(codes.Unimplemented, "method UpdateRemoteMirror not implemented")
}
@@ -181,24 +153,6 @@ func RegisterRemoteServiceServer(s grpc.ServiceRegistrar, srv RemoteServiceServe
s.RegisterService(&RemoteService_ServiceDesc, srv)
}
-func _RemoteService_AddRemote_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(AddRemoteRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(RemoteServiceServer).AddRemote(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/gitaly.RemoteService/AddRemote",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(RemoteServiceServer).AddRemote(ctx, req.(*AddRemoteRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
func _RemoteService_FetchInternalRemote_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(FetchInternalRemoteRequest)
if err := dec(in); err != nil {
@@ -217,24 +171,6 @@ func _RemoteService_FetchInternalRemote_Handler(srv interface{}, ctx context.Con
return interceptor(ctx, in, info, handler)
}
-func _RemoteService_RemoveRemote_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(RemoveRemoteRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(RemoteServiceServer).RemoveRemote(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/gitaly.RemoteService/RemoveRemote",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(RemoteServiceServer).RemoveRemote(ctx, req.(*RemoveRemoteRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
func _RemoteService_UpdateRemoteMirror_Handler(srv interface{}, stream grpc.ServerStream) error {
return srv.(RemoteServiceServer).UpdateRemoteMirror(&remoteServiceUpdateRemoteMirrorServer{stream})
}
@@ -305,18 +241,10 @@ var RemoteService_ServiceDesc = grpc.ServiceDesc{
HandlerType: (*RemoteServiceServer)(nil),
Methods: []grpc.MethodDesc{
{
- MethodName: "AddRemote",
- Handler: _RemoteService_AddRemote_Handler,
- },
- {
MethodName: "FetchInternalRemote",
Handler: _RemoteService_FetchInternalRemote_Handler,
},
{
- MethodName: "RemoveRemote",
- Handler: _RemoteService_RemoveRemote_Handler,
- },
- {
MethodName: "FindRemoteRepository",
Handler: _RemoteService_FindRemoteRepository_Handler,
},
diff --git a/proto/go/gitalypb/repository-service.pb.go b/proto/go/gitalypb/repository-service.pb.go
index fda45adb6..973206e16 100644
--- a/proto/go/gitalypb/repository-service.pb.go
+++ b/proto/go/gitalypb/repository-service.pb.go
@@ -1015,10 +1015,6 @@ type FetchRemoteRequest struct {
unknownFields protoimpl.UnknownFields
Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"`
- // remote is the name of the remote that shall be fetched. This remote must
- // exist in the repository's configuration already. This parameter is
- // deprecated in favor of remote_params.
- Remote string `protobuf:"bytes,2,opt,name=remote,proto3" json:"remote,omitempty"`
// force determines if references should be force-updated in case they have
// diverged.
Force bool `protobuf:"varint,3,opt,name=force,proto3" json:"force,omitempty"`
@@ -1079,13 +1075,6 @@ func (x *FetchRemoteRequest) GetRepository() *Repository {
return nil
}
-func (x *FetchRemoteRequest) GetRemote() string {
- if x != nil {
- return x.Remote
- }
- return ""
-}
-
func (x *FetchRemoteRequest) GetForce() bool {
if x != nil {
return x.Force
@@ -5009,702 +4998,702 @@ var file_repository_service_proto_rawDesc = []byte{
0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,
0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x1c, 0x0a,
0x1a, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x47, 0x69, 0x74, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xed, 0x02, 0x0a, 0x12,
+ 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xe3, 0x02, 0x0a, 0x12,
0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01,
- 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06,
- 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65,
- 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f,
- 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x54,
- 0x61, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x05,
- 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x17, 0x0a,
- 0x07, 0x73, 0x73, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
- 0x73, 0x73, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f,
- 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6b, 0x6e, 0x6f,
- 0x77, 0x6e, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x6f, 0x5f, 0x70, 0x72,
- 0x75, 0x6e, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6e, 0x6f, 0x50, 0x72, 0x75,
- 0x6e, 0x65, 0x12, 0x33, 0x0a, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72,
- 0x61, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x69, 0x74, 0x61,
- 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x6d, 0x6f, 0x74,
- 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x68, 0x65, 0x63, 0x6b,
- 0x5f, 0x74, 0x61, 0x67, 0x73, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x0b, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x10, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x61, 0x67, 0x73, 0x43, 0x68,
- 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x22, 0x38, 0x0a, 0x13, 0x46,
- 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x67, 0x73, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67,
- 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x74, 0x61, 0x67, 0x73, 0x43, 0x68,
- 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0x53, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52,
- 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65,
- 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a,
- 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x1a, 0x0a, 0x18, 0x43, 0x72,
- 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xea, 0x02, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x72,
- 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a,
- 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69,
- 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f,
- 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
- 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69,
- 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x38, 0x0a, 0x06, 0x66,
- 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x67, 0x69,
- 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66,
- 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20,
- 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x63,
- 0x6c, 0x75, 0x64, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x07, 0x65, 0x78, 0x63, 0x6c,
- 0x75, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x6c, 0x69, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74,
- 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x65, 0x6c, 0x69, 0x64, 0x65, 0x50, 0x61,
- 0x74, 0x68, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6c, 0x66,
- 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69,
- 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4c, 0x66, 0x73, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x22, 0x33,
- 0x0a, 0x06, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x07, 0x0a, 0x03, 0x5a, 0x49, 0x50, 0x10,
- 0x00, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x41, 0x52, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x41,
- 0x52, 0x5f, 0x47, 0x5a, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x41, 0x52, 0x5f, 0x42, 0x5a,
- 0x32, 0x10, 0x03, 0x22, 0x28, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76,
- 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74,
- 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x53, 0x0a,
- 0x17, 0x48, 0x61, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 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, 0x22, 0x30, 0x0a, 0x18, 0x48, 0x61, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x72,
- 0x61, 0x6e, 0x63, 0x68, 0x65, 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, 0xd9, 0x01, 0x0a, 0x18, 0x46, 0x65, 0x74, 0x63, 0x68, 0x53, 0x6f,
- 0x75, 0x72, 0x63, 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, 0x3f, 0x0a, 0x11, 0x73,
- 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
- 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x10, 0x73, 0x6f, 0x75, 0x72,
- 0x63, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0d,
- 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63,
- 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x18,
- 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65, 0x66,
- 0x22, 0x33, 0x0a, 0x19, 0x46, 0x65, 0x74, 0x63, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42,
- 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a,
- 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72,
- 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x47, 0x0a, 0x0b, 0x46, 0x73, 0x63, 0x6b, 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, 0x22, 0x24,
- 0x0a, 0x0c, 0x46, 0x73, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14,
- 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x65,
- 0x72, 0x72, 0x6f, 0x72, 0x22, 0xb8, 0x01, 0x0a, 0x0f, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65,
- 0x66, 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,
+ 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05,
+ 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72,
+ 0x63, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x54, 0x61, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x74,
+ 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x69,
+ 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x73, 0x68, 0x5f, 0x6b, 0x65, 0x79,
+ 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x73, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x1f,
+ 0x0a, 0x0b, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x07, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12,
+ 0x19, 0x0a, 0x08, 0x6e, 0x6f, 0x5f, 0x70, 0x72, 0x75, 0x6e, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28,
+ 0x08, 0x52, 0x07, 0x6e, 0x6f, 0x50, 0x72, 0x75, 0x6e, 0x65, 0x12, 0x33, 0x0a, 0x0d, 0x72, 0x65,
+ 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74,
+ 0x65, 0x52, 0x0c, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12,
+ 0x2c, 0x0a, 0x12, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x5f, 0x63, 0x68,
+ 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x63, 0x68, 0x65,
+ 0x63, 0x6b, 0x54, 0x61, 0x67, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4a, 0x04, 0x08,
+ 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74,
+ 0x65, 0x22, 0x38, 0x0a, 0x13, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x67, 0x73,
+ 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b,
+ 0x74, 0x61, 0x67, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0x53, 0x0a, 0x17, 0x43,
+ 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69,
+ 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74,
+ 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04,
+ 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79,
+ 0x22, 0x1a, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69,
+ 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xea, 0x02, 0x0a,
+ 0x11, 0x47, 0x65, 0x74, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
+ 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01,
+ 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x09,
+ 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65,
+ 0x66, 0x69, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69,
+ 0x78, 0x12, 0x38, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28,
+ 0x0e, 0x32, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x72,
+ 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x6f, 0x72,
+ 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70,
+ 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12,
+ 0x18, 0x0a, 0x07, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0c,
+ 0x52, 0x07, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x6c, 0x69,
+ 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x65,
+ 0x6c, 0x69, 0x64, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c,
+ 0x75, 0x64, 0x65, 0x5f, 0x6c, 0x66, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x18, 0x08, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4c, 0x66, 0x73, 0x42,
+ 0x6c, 0x6f, 0x62, 0x73, 0x22, 0x33, 0x0a, 0x06, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x07,
+ 0x0a, 0x03, 0x5a, 0x49, 0x50, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x41, 0x52, 0x10, 0x01,
+ 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x41, 0x52, 0x5f, 0x47, 0x5a, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07,
+ 0x54, 0x41, 0x52, 0x5f, 0x42, 0x5a, 0x32, 0x10, 0x03, 0x22, 0x28, 0x0a, 0x12, 0x47, 0x65, 0x74,
+ 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+ 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64,
+ 0x61, 0x74, 0x61, 0x22, 0x53, 0x0a, 0x17, 0x48, 0x61, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 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, 0x22, 0x30, 0x0a, 0x18, 0x48, 0x61, 0x73, 0x4c,
+ 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 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, 0xd9, 0x01, 0x0a, 0x18, 0x46,
+ 0x65, 0x74, 0x63, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 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, 0x3f, 0x0a, 0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f,
+ 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x02, 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, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
- 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x6c, 0x64, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
- 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x6f, 0x6c, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73,
- 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01,
- 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22,
- 0x18, 0x0a, 0x10, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x6e, 0x0a, 0x14, 0x46, 0x69, 0x6e,
- 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52,
- 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52,
- 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x72,
- 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x09,
- 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x2b, 0x0a, 0x15, 0x46, 0x69, 0x6e,
- 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74,
- 0x65, 0x46, 0x6f, 0x72, 0x6b, 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, 0x3f, 0x0a, 0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
- 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73,
- 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x70,
- 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x14, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74,
- 0x65, 0x46, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x72, 0x0a,
- 0x19, 0x49, 0x73, 0x53, 0x71, 0x75, 0x61, 0x73, 0x68, 0x49, 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72,
- 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65,
+ 0x52, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f,
+ 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x62, 0x72, 0x61,
+ 0x6e, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65,
+ 0x74, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x74, 0x61, 0x72,
+ 0x67, 0x65, 0x74, 0x52, 0x65, 0x66, 0x22, 0x33, 0x0a, 0x19, 0x46, 0x65, 0x74, 0x63, 0x68, 0x53,
+ 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x47, 0x0a, 0x0b, 0x46,
+ 0x73, 0x63, 0x6b, 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, 0x73, 0x71, 0x75, 0x61, 0x73, 0x68, 0x5f, 0x69,
- 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x71, 0x75, 0x61, 0x73, 0x68, 0x49,
- 0x64, 0x22, 0x3d, 0x0a, 0x1a, 0x49, 0x73, 0x53, 0x71, 0x75, 0x61, 0x73, 0x68, 0x49, 0x6e, 0x50,
- 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
- 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73,
- 0x22, 0x6c, 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69,
- 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x74, 0x6f, 0x72, 0x79, 0x22, 0x24, 0x0a, 0x0c, 0x46, 0x73, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0c, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xb8, 0x01, 0x0a, 0x0f, 0x57,
+ 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x66, 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, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65,
+ 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65,
+ 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x6c, 0x64, 0x5f, 0x72, 0x65,
+ 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x6f, 0x6c,
+ 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72,
+ 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x4a,
+ 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0x18, 0x0a, 0x10, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65,
+ 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22,
+ 0x6e, 0x0a, 0x14, 0x46, 0x69, 0x6e, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73,
+ 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69,
+ 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42,
+ 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72,
+ 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02,
+ 0x20, 0x03, 0x28, 0x0c, 0x52, 0x09, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22,
+ 0x2b, 0x0a, 0x15, 0x46, 0x69, 0x6e, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x22, 0x8e, 0x01, 0x0a,
+ 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6b, 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,
- 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x21,
- 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f,
- 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x4f, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c,
- 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f,
- 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67,
- 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79,
- 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f,
- 0x72, 0x79, 0x22, 0x2a, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64,
- 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61,
- 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x76,
- 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x72,
- 0x6f, 0x6d, 0x52, 0x65, 0x66, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x3f, 0x0a, 0x11,
+ 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72,
+ 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
+ 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x10, 0x73, 0x6f, 0x75,
+ 0x72, 0x63, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x14, 0x0a,
+ 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x72, 0x0a, 0x19, 0x49, 0x73, 0x53, 0x71, 0x75, 0x61, 0x73, 0x68, 0x49,
+ 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65,
0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a,
- 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61,
- 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x61,
- 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x22, 0x35, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
- 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x52, 0x65, 0x66, 0x4c, 0x69, 0x73,
- 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74,
- 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4c, 0x0a,
- 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 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, 0x22, 0x27, 0x0a, 0x11, 0x47,
- 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x71,
+ 0x75, 0x61, 0x73, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73,
+ 0x71, 0x75, 0x61, 0x73, 0x68, 0x49, 0x64, 0x22, 0x3d, 0x0a, 0x1a, 0x49, 0x73, 0x53, 0x71, 0x75,
+ 0x61, 0x73, 0x68, 0x49, 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x67,
+ 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x6e, 0x50, 0x72,
+ 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0x6c, 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x52,
+ 0x4c, 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, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x75, 0x72, 0x6c, 0x22, 0x21, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65,
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x52, 0x4c, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4f, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38,
+ 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f,
+ 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65,
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x2a, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04,
- 0x64, 0x61, 0x74, 0x61, 0x22, 0x8e, 0x02, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66,
- 0x69, 0x67, 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, 0x38, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02,
- 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65,
- 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x45,
- 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x85, 0x01,
- 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x09, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x74, 0x72, 0x12, 0x21, 0x0a, 0x0b, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52,
- 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x1f, 0x0a, 0x0a, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x48,
- 0x00, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x07, 0x0a, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x13, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66,
- 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x63, 0x0a, 0x13, 0x44, 0x65,
- 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 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, 0x6b,
- 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x22,
- 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x69, 0x0a, 0x19, 0x52, 0x65, 0x73, 0x74, 0x6f,
- 0x72, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f,
- 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
- 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6,
- 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x12,
- 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61,
- 0x74, 0x61, 0x22, 0x1c, 0x0a, 0x1a, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x75, 0x73,
- 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x54, 0x0a, 0x18, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d,
- 0x48, 0x6f, 0x6f, 0x6b, 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, 0x22, 0x2f, 0x0a, 0x19, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70,
- 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x71, 0x0a, 0x21, 0x43, 0x72, 0x65, 0x61, 0x74,
- 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x42,
- 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a,
- 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69,
- 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f,
- 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x24, 0x0a, 0x22, 0x43, 0x72,
- 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72,
- 0x6f, 0x6d, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x4e, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52,
+ 0x64, 0x61, 0x74, 0x61, 0x22, 0x76, 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75,
+ 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x52, 0x65, 0x66, 0x4c, 0x69, 0x73, 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,
- 0x22, 0x43, 0x0a, 0x13, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x69, 0x63, 0x65, 0x6e,
- 0x73, 0x65, 0x5f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x10, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x53, 0x68, 0x6f, 0x72,
- 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x54, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f,
- 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 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, 0x22, 0x3b, 0x0a, 0x19, 0x47,
- 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72,
- 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x61, 0x74,
- 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x54, 0x0a, 0x18, 0x43, 0x61, 0x6c, 0x63,
- 0x75, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 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, 0x22, 0x37,
- 0x0a, 0x19, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b,
- 0x73, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63,
- 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63,
- 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x22, 0x4e, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x6e,
- 0x61, 0x70, 0x73, 0x68, 0x6f, 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, 0x22, 0x29, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, 0x6e,
- 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12,
- 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61,
- 0x74, 0x61, 0x22, 0x97, 0x01, 0x0a, 0x23, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70,
- 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73,
- 0x68, 0x6f, 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, 0x19, 0x0a, 0x08, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x75, 0x72, 0x6c,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x68, 0x74, 0x74, 0x70, 0x55, 0x72, 0x6c, 0x12,
- 0x1b, 0x0a, 0x09, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x08, 0x68, 0x74, 0x74, 0x70, 0x41, 0x75, 0x74, 0x68, 0x22, 0x26, 0x0a, 0x24,
- 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79,
- 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x96, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x61, 0x77, 0x43,
- 0x68, 0x61, 0x6e, 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, 0x23, 0x0a, 0x0d, 0x66, 0x72, 0x6f, 0x6d, 0x5f,
- 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
- 0x66, 0x72, 0x6f, 0x6d, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b,
- 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x0a, 0x74, 0x6f, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xbd, 0x04,
- 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x61, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x72, 0x61, 0x77, 0x5f, 0x63,
- 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67,
- 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x61, 0x77, 0x43, 0x68, 0x61, 0x6e,
- 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x61, 0x77, 0x43,
- 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0a, 0x72, 0x61, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65,
- 0x73, 0x1a, 0xd9, 0x03, 0x0a, 0x09, 0x52, 0x61, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12,
- 0x17, 0x0a, 0x07, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x08,
- 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02,
- 0x18, 0x01, 0x52, 0x07, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x08, 0x6f,
- 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18,
- 0x01, 0x52, 0x07, 0x6f, 0x6c, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x4f, 0x0a, 0x09, 0x6f, 0x70,
- 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e,
- 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x61, 0x77, 0x43, 0x68, 0x61,
- 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x61, 0x77,
- 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x72,
- 0x61, 0x77, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x0c, 0x72, 0x61, 0x77, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x6c, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01,
- 0x28, 0x05, 0x52, 0x07, 0x6f, 0x6c, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6e,
- 0x65, 0x77, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e,
- 0x65, 0x77, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x61,
- 0x74, 0x68, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c,
- 0x6e, 0x65, 0x77, 0x50, 0x61, 0x74, 0x68, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0e,
- 0x6f, 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0a,
- 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x6f, 0x6c, 0x64, 0x50, 0x61, 0x74, 0x68, 0x42, 0x79, 0x74,
- 0x65, 0x73, 0x22, 0x69, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
- 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05,
- 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x50, 0x49, 0x45,
- 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x03,
- 0x12, 0x0c, 0x0a, 0x08, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0b,
- 0x0a, 0x07, 0x52, 0x45, 0x4e, 0x41, 0x4d, 0x45, 0x44, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c, 0x54,
- 0x59, 0x50, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x06, 0x22, 0x94, 0x01,
- 0x0a, 0x18, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x4e,
- 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65,
- 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12,
- 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f,
- 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69,
- 0x74, 0x6f, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65,
- 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x16, 0x0a, 0x06,
- 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69,
- 0x6c, 0x74, 0x65, 0x72, 0x22, 0x31, 0x0a, 0x19, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69,
- 0x6c, 0x65, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c,
- 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x1b, 0x53, 0x65, 0x61, 0x72,
- 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 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, 0x22, 0x35, 0x0a, 0x1f,
+ 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x72, 0x6f, 0x6d,
+ 0x52, 0x65, 0x66, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+ 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64,
+ 0x61, 0x74, 0x61, 0x22, 0x4c, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
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, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x68, 0x75,
- 0x6e, 0x6b, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x79, 0x0a, 0x1c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69,
- 0x6c, 0x65, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18,
- 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x1d,
- 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x0c, 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x61, 0x12, 0x20, 0x0a,
- 0x0c, 0x65, 0x6e, 0x64, 0x5f, 0x6f, 0x66, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x0a, 0x65, 0x6e, 0x64, 0x4f, 0x66, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x22,
- 0x89, 0x01, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72,
- 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x3a, 0x0a, 0x19,
- 0x68, 0x74, 0x74, 0x70, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x17, 0x68, 0x74, 0x74, 0x70, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x69, 0x72, 0x72,
- 0x6f, 0x72, 0x5f, 0x72, 0x65, 0x66, 0x6d, 0x61, 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09,
- 0x52, 0x0d, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x66, 0x6d, 0x61, 0x70, 0x73, 0x4a,
- 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x59, 0x0a, 0x1d, 0x47,
- 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72,
- 0x79, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a,
+ 0x79, 0x22, 0x27, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x8e, 0x02, 0x0a, 0x10, 0x53,
+ 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 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, 0x38, 0x0a, 0x07, 0x65, 0x6e, 0x74,
+ 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x69, 0x74,
+ 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72,
+ 0x69, 0x65, 0x73, 0x1a, 0x85, 0x01, 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
+ 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
+ 0x1d, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x74, 0x72, 0x12, 0x21,
+ 0x0a, 0x0b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x03, 0x20,
+ 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x49, 0x6e, 0x74, 0x33,
+ 0x32, 0x12, 0x1f, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18,
+ 0x04, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x6f,
+ 0x6f, 0x6c, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x13, 0x0a, 0x11, 0x53,
+ 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x63, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+ 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, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52,
+ 0x04, 0x6b, 0x65, 0x79, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43,
+ 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x69, 0x0a,
+ 0x19, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f,
+ 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65,
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12,
+ 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f,
+ 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69,
+ 0x74, 0x6f, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x1c, 0x0a, 0x1a, 0x52, 0x65, 0x73, 0x74,
+ 0x6f, 0x72, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x18, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70,
+ 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 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, 0x22, 0x2f, 0x0a, 0x19,
+ 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b,
+ 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74,
+ 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x71, 0x0a,
+ 0x21, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72,
+ 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
+ 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01,
+ 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04,
+ 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61,
+ 0x22, 0x24, 0x0a, 0x22, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69,
+ 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x69,
+ 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a,
0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69,
0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f,
- 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x34, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a,
- 0x65, 0x63, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0xa0, 0x01, 0x0a,
- 0x14, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x6f, 0x6c, 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,
- 0x26, 0x0a, 0x04, 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e,
- 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x6f, 0x6f,
- 0x6c, 0x52, 0x04, 0x70, 0x6f, 0x6f, 0x6c, 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74,
- 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
- 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x22,
- 0x17, 0x0a, 0x15, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x6f, 0x6c,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc1, 0x01, 0x0a, 0x1c, 0x43, 0x6c, 0x6f,
- 0x6e, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
- 0x61, 0x6c, 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, 0x26, 0x0a, 0x04, 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63,
- 0x74, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x04, 0x70, 0x6f, 0x6f, 0x6c, 0x12, 0x3f, 0x0a, 0x11, 0x73,
- 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
- 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x10, 0x73, 0x6f, 0x75, 0x72,
- 0x63, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x1f, 0x0a, 0x1d,
- 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74,
- 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x0a,
- 0x17, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72,
- 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f,
- 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67,
- 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79,
- 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f,
- 0x72, 0x79, 0x22, 0x1a, 0x0a, 0x18, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6f,
- 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x78,
- 0x0a, 0x17, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f,
- 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70,
- 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e,
- 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72,
- 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74,
- 0x6f, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f,
- 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61,
- 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, 0x1a, 0x0a, 0x18, 0x52, 0x65, 0x6e, 0x61,
- 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x1a, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
- 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75,
+ 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x43, 0x0a, 0x13, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x69,
+ 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a,
+ 0x12, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x6e,
+ 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6c, 0x69, 0x63, 0x65, 0x6e,
+ 0x73, 0x65, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x54, 0x0a, 0x18, 0x47,
+ 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 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, 0x22, 0x3b, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e,
+ 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0c, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x54,
+ 0x0a, 0x18, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b,
+ 0x73, 0x75, 0x6d, 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, 0x22, 0x37, 0x0a, 0x19, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74,
+ 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x22, 0x4e, 0x0a,
+ 0x12, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 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, 0x2a, 0x0a,
- 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e,
- 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72,
- 0x79, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x1d, 0x0a, 0x1b, 0x52, 0x65, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x55, 0x0a, 0x19, 0x4f, 0x70, 0x74, 0x69,
- 0x6d, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74,
- 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61,
- 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98,
- 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22,
- 0x1c, 0x0a, 0x1a, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73,
- 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x62, 0x0a,
- 0x12, 0x53, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75,
+ 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x29, 0x0a,
+ 0x13, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x97, 0x01, 0x0a, 0x23, 0x43, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f,
+ 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 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, 0x19, 0x0a, 0x08, 0x68, 0x74,
+ 0x74, 0x70, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x68, 0x74,
+ 0x74, 0x70, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x61, 0x75,
+ 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x74, 0x74, 0x70, 0x41, 0x75,
+ 0x74, 0x68, 0x22, 0x26, 0x0a, 0x24, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f,
+ 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68,
+ 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x96, 0x01, 0x0a, 0x14, 0x47,
+ 0x65, 0x74, 0x52, 0x61, 0x77, 0x43, 0x68, 0x61, 0x6e, 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, 0x12, 0x0a,
- 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74,
- 0x68, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x50, 0x61, 0x74, 0x68,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x8a, 0x20, 0x0a, 0x11, 0x52, 0x65, 0x70,
- 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5d,
- 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x45, 0x78, 0x69, 0x73,
- 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f,
- 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70,
- 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x60, 0x0a,
- 0x11, 0x52, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74,
- 0x61, 0x6c, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x61,
- 0x63, 0x6b, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65,
- 0x70, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12,
- 0x4b, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x46, 0x75, 0x6c, 0x6c, 0x12, 0x19, 0x2e,
- 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x46, 0x75, 0x6c,
- 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
- 0x79, 0x2e, 0x52, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x46, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x4b, 0x0a, 0x0a,
- 0x4d, 0x69, 0x64, 0x78, 0x52, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x12, 0x19, 0x2e, 0x67, 0x69, 0x74,
- 0x61, 0x6c, 0x79, 0x2e, 0x4d, 0x69, 0x64, 0x78, 0x52, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4d,
- 0x69, 0x64, 0x78, 0x52, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x61, 0x72,
- 0x62, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x1d, 0x2e, 0x67, 0x69,
- 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x61, 0x72, 0x62, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6c, 0x6c,
- 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74,
- 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x61, 0x72, 0x62, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65,
- 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02,
- 0x08, 0x01, 0x12, 0x5d, 0x0a, 0x10, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69,
- 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
- 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
- 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x47, 0x72, 0x61, 0x70,
- 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08,
- 0x01, 0x12, 0x57, 0x0a, 0x0e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x53,
- 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70,
- 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f,
- 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x63, 0x0a, 0x12, 0x41, 0x70,
- 0x70, 0x6c, 0x79, 0x47, 0x69, 0x74, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73,
- 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x47,
- 0x69, 0x74, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x41, 0x70, 0x70,
- 0x6c, 0x79, 0x47, 0x69, 0x74, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12,
- 0x4e, 0x0a, 0x0b, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x1a,
- 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x6d,
- 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74,
- 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52,
+ 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x23, 0x0a,
+ 0x0d, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x72, 0x6f, 0x6d, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69,
+ 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
+ 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x6f, 0x52, 0x65, 0x76, 0x69, 0x73,
+ 0x69, 0x6f, 0x6e, 0x22, 0xbd, 0x04, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x61, 0x77, 0x43, 0x68,
+ 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a,
+ 0x0b, 0x72, 0x61, 0x77, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x52,
+ 0x61, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x2e, 0x52, 0x61, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0a, 0x72, 0x61, 0x77,
+ 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x1a, 0xd9, 0x03, 0x0a, 0x09, 0x52, 0x61, 0x77, 0x43,
+ 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x69, 0x64,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x12,
+ 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69,
+ 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x08, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03,
+ 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x74,
+ 0x68, 0x12, 0x1d, 0x0a, 0x08, 0x6f, 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20,
+ 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x6f, 0x6c, 0x64, 0x50, 0x61, 0x74, 0x68,
+ 0x12, 0x4f, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20,
+ 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74,
+ 0x52, 0x61, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x2e, 0x52, 0x61, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x4f, 0x70, 0x65,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x61, 0x77, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x61, 0x77, 0x4f, 0x70, 0x65,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x6c, 0x64, 0x5f, 0x6d, 0x6f,
+ 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6f, 0x6c, 0x64, 0x4d, 0x6f, 0x64,
+ 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x65, 0x77, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20,
+ 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e, 0x65, 0x77, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0e,
+ 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x09,
+ 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x74, 0x68, 0x42, 0x79, 0x74,
+ 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6f, 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x62,
+ 0x79, 0x74, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x6f, 0x6c, 0x64, 0x50,
+ 0x61, 0x74, 0x68, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x69, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e,
+ 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a,
+ 0x06, 0x43, 0x4f, 0x50, 0x49, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x4c,
+ 0x45, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x49,
+ 0x45, 0x44, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x4e, 0x41, 0x4d, 0x45, 0x44, 0x10,
+ 0x05, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45,
+ 0x44, 0x10, 0x06, 0x22, 0x94, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69,
+ 0x6c, 0x65, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65,
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a,
+ 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75,
+ 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79,
+ 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x72,
+ 0x65, 0x66, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x31, 0x0a, 0x19, 0x53, 0x65,
+ 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73,
+ 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, 0xaa, 0x01,
+ 0x0a, 0x1b, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x43,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 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, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x10, 0x0a,
+ 0x03, 0x72, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12,
+ 0x29, 0x0a, 0x10, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x68, 0x75, 0x6e, 0x6b,
+ 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x79, 0x0a, 0x1c, 0x53, 0x65,
+ 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61,
+ 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x61, 0x74,
+ 0x63, 0x68, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x61,
+ 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x44,
+ 0x61, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x5f, 0x6f, 0x66, 0x5f, 0x6d, 0x61,
+ 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x65, 0x6e, 0x64, 0x4f, 0x66,
+ 0x4d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x89, 0x01, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65,
+ 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75,
+ 0x72, 0x6c, 0x12, 0x3a, 0x0a, 0x19, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f,
+ 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x68, 0x74, 0x74, 0x70, 0x41, 0x75, 0x74, 0x68, 0x6f,
+ 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x25,
+ 0x0a, 0x0e, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72, 0x65, 0x66, 0x6d, 0x61, 0x70, 0x73,
+ 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65,
+ 0x66, 0x6d, 0x61, 0x70, 0x73, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d,
+ 0x65, 0x22, 0x59, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x69,
+ 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
+ 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01,
+ 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x34, 0x0a, 0x1e,
+ 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f,
+ 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12,
+ 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69,
+ 0x7a, 0x65, 0x22, 0xa0, 0x01, 0x0a, 0x14, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x72, 0x6f, 0x6d,
+ 0x50, 0x6f, 0x6f, 0x6c, 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, 0x26, 0x0a, 0x04, 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x04, 0x70, 0x6f, 0x6f, 0x6c, 0x12, 0x26, 0x0a,
+ 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e,
+ 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x06, 0x72,
+ 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x72,
+ 0x6f, 0x6d, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc1,
+ 0x01, 0x0a, 0x1c, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x6f, 0x6c,
+ 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 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, 0x26, 0x0a, 0x04, 0x70, 0x6f, 0x6f,
+ 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
+ 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x04, 0x70, 0x6f, 0x6f,
+ 0x6c, 0x12, 0x3f, 0x0a, 0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f,
+ 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67,
+ 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79,
+ 0x52, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f,
+ 0x72, 0x79, 0x22, 0x1f, 0x0a, 0x1d, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x50,
+ 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x53, 0x0a, 0x17, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x70,
+ 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38,
+ 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f,
+ 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65,
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x1a, 0x0a, 0x18, 0x52, 0x65, 0x6d, 0x6f,
+ 0x76, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x78, 0x0a, 0x17, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65,
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70,
+ 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72,
+ 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6c,
+ 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, 0x1a,
+ 0x0a, 0x18, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f,
+ 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x1a, 0x52,
+ 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f,
+ 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70,
+ 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e,
+ 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72,
+ 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74,
+ 0x6f, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70,
+ 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22,
+ 0x1d, 0x0a, 0x1b, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f,
+ 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x55,
+ 0x0a, 0x19, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69,
+ 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72,
+ 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74,
+ 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73,
+ 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x1c, 0x0a, 0x1a, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a,
+ 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x62, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x50, 0x61,
+ 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70,
+ 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e,
+ 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72,
+ 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74,
+ 0x6f, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x46, 0x75,
+ 0x6c, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x93,
+ 0x20, 0x0a, 0x11, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x65, 0x72,
+ 0x76, 0x69, 0x63, 0x65, 0x12, 0x5d, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f,
+ 0x72, 0x79, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
+ 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x45, 0x78, 0x69, 0x73,
+ 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61,
+ 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x45, 0x78, 0x69,
+ 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28,
+ 0x02, 0x08, 0x02, 0x12, 0x60, 0x0a, 0x11, 0x52, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x63,
+ 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
+ 0x79, 0x2e, 0x52, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74,
+ 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa,
+ 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x4b, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x46,
+ 0x75, 0x6c, 0x6c, 0x12, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70,
+ 0x61, 0x63, 0x6b, 0x46, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a,
+ 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x46, 0x75,
+ 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02,
+ 0x08, 0x01, 0x12, 0x4b, 0x0a, 0x0a, 0x4d, 0x69, 0x64, 0x78, 0x52, 0x65, 0x70, 0x61, 0x63, 0x6b,
+ 0x12, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4d, 0x69, 0x64, 0x78, 0x52, 0x65,
+ 0x70, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69,
+ 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4d, 0x69, 0x64, 0x78, 0x52, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12,
- 0x5d, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74,
- 0x6f, 0x72, 0x79, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65,
- 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72,
- 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x4d,
- 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x12, 0x19, 0x2e, 0x67,
- 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
- 0x2e, 0x47, 0x65, 0x74, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x5d, 0x0a,
- 0x10, 0x48, 0x61, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65,
- 0x73, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x48, 0x61, 0x73, 0x4c, 0x6f,
- 0x63, 0x61, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x48, 0x61, 0x73, 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, 0x12, 0x60, 0x0a, 0x11,
- 0x46, 0x65, 0x74, 0x63, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63,
- 0x68, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68,
- 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x65, 0x74,
- 0x63, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x39,
- 0x0a, 0x04, 0x46, 0x73, 0x63, 0x6b, 0x12, 0x13, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
- 0x46, 0x73, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x67, 0x69,
- 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x73, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x45, 0x0a, 0x08, 0x57, 0x72, 0x69,
- 0x74, 0x65, 0x52, 0x65, 0x66, 0x12, 0x17, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x57,
- 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18,
- 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x66,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01,
- 0x12, 0x54, 0x0a, 0x0d, 0x46, 0x69, 0x6e, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x42, 0x61, 0x73,
- 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4d,
- 0x65, 0x72, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4d, 0x65, 0x72,
- 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06,
- 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x4b, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
- 0x46, 0x6f, 0x72, 0x6b, 0x12, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72,
- 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46,
- 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28,
- 0x02, 0x08, 0x01, 0x12, 0x63, 0x0a, 0x12, 0x49, 0x73, 0x53, 0x71, 0x75, 0x61, 0x73, 0x68, 0x49,
- 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61,
- 0x6c, 0x79, 0x2e, 0x49, 0x73, 0x53, 0x71, 0x75, 0x61, 0x73, 0x68, 0x49, 0x6e, 0x50, 0x72, 0x6f,
- 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67,
- 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x49, 0x73, 0x53, 0x71, 0x75, 0x61, 0x73, 0x68, 0x49, 0x6e,
- 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x72, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61,
- 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d,
- 0x55, 0x52, 0x4c, 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65,
- 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f,
- 0x6d, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x69,
- 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73,
- 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x53, 0x0a, 0x0c,
- 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x1b, 0x2e, 0x67,
- 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64,
- 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61,
- 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30,
- 0x01, 0x12, 0x76, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c,
- 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x52, 0x65, 0x66, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x26, 0x2e, 0x67,
- 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64,
- 0x6c, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x52, 0x65, 0x66, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71,
+ 0x57, 0x0a, 0x0e, 0x47, 0x61, 0x72, 0x62, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63,
+ 0x74, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x61, 0x72, 0x62, 0x61,
+ 0x67, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x61, 0x72, 0x62, 0x61, 0x67,
+ 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x5d, 0x0a, 0x10, 0x57, 0x72, 0x69, 0x74,
+ 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x1f, 0x2e, 0x67,
+ 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69,
+ 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e,
+ 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d,
+ 0x69, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x57, 0x0a, 0x0e, 0x52, 0x65, 0x70, 0x6f, 0x73,
+ 0x69, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61,
+ 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x69, 0x7a,
+ 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
+ 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02,
+ 0x12, 0x63, 0x0a, 0x12, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x47, 0x69, 0x74, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
+ 0x41, 0x70, 0x70, 0x6c, 0x79, 0x47, 0x69, 0x74, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61,
+ 0x6c, 0x79, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x47, 0x69, 0x74, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa,
+ 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x4e, 0x0a, 0x0b, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65,
+ 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x65,
+ 0x74, 0x63, 0x68, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52,
+ 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa,
+ 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x5d, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52,
+ 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61,
+ 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74,
+ 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74,
+ 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69,
+ 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97,
+ 0x28, 0x02, 0x08, 0x01, 0x12, 0x4d, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x41, 0x72, 0x63, 0x68, 0x69,
+ 0x76, 0x65, 0x12, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x41,
+ 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e,
+ 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08,
+ 0x02, 0x30, 0x01, 0x12, 0x5d, 0x0a, 0x10, 0x48, 0x61, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42,
+ 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
+ 0x2e, 0x48, 0x61, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65,
+ 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
+ 0x79, 0x2e, 0x48, 0x61, 0x73, 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, 0x12, 0x60, 0x0a, 0x11, 0x46, 0x65, 0x74, 0x63, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
+ 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x72, 0x61, 0x6e,
+ 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61,
+ 0x6c, 0x79, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x72,
+ 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97,
+ 0x28, 0x02, 0x08, 0x01, 0x12, 0x39, 0x0a, 0x04, 0x46, 0x73, 0x63, 0x6b, 0x12, 0x13, 0x2e, 0x67,
+ 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x73, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x14, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x73, 0x63, 0x6b, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12,
+ 0x45, 0x0a, 0x08, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x66, 0x12, 0x17, 0x2e, 0x67, 0x69,
+ 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x66, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x57, 0x72,
+ 0x69, 0x74, 0x65, 0x52, 0x65, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06,
+ 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x54, 0x0a, 0x0d, 0x46, 0x69, 0x6e, 0x64, 0x4d, 0x65,
+ 0x72, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
+ 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46,
+ 0x69, 0x6e, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x4b, 0x0a, 0x0a,
+ 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6b, 0x12, 0x19, 0x2e, 0x67, 0x69, 0x74,
+ 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6b, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43,
+ 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x66, 0x0a, 0x12, 0x49, 0x73, 0x53,
+ 0x71, 0x75, 0x61, 0x73, 0x68, 0x49, 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12,
+ 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x49, 0x73, 0x53, 0x71, 0x75, 0x61, 0x73,
+ 0x68, 0x49, 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x49, 0x73, 0x53, 0x71,
+ 0x75, 0x61, 0x73, 0x68, 0x49, 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x09, 0x88, 0x02, 0x01, 0xfa, 0x97, 0x28, 0x02, 0x08,
+ 0x02, 0x12, 0x72, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73,
+ 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x52, 0x4c, 0x12, 0x26, 0x2e, 0x67,
+ 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f,
+ 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72,
+ 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72,
+ 0x6f, 0x6d, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa,
+ 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x53, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42,
+ 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43,
+ 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x76, 0x0a, 0x17, 0x43, 0x72,
0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x52, 0x65,
- 0x66, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa,
- 0x97, 0x28, 0x02, 0x08, 0x02, 0x28, 0x01, 0x30, 0x01, 0x12, 0x7d, 0x0a, 0x1a, 0x43, 0x72, 0x65,
- 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f,
- 0x6d, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
- 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72,
- 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61,
- 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d,
- 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06,
- 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x28, 0x01, 0x12, 0x4a, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43,
- 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47,
- 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66,
- 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02,
- 0x08, 0x02, 0x30, 0x01, 0x12, 0x48, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69,
- 0x67, 0x12, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f,
- 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x69,
- 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x51,
- 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1b,
- 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f,
- 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x69,
- 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69,
- 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08,
- 0x01, 0x12, 0x4e, 0x0a, 0x0b, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65,
- 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x69,
- 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67,
- 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73,
- 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08,
- 0x02, 0x12, 0x62, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x74, 0x74, 0x72,
- 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
- 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
- 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
- 0x79, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28,
- 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x60, 0x0a, 0x11, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61,
- 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74,
- 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65,
- 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67,
- 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x43,
- 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
- 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x42, 0x0a, 0x07, 0x43, 0x6c, 0x65, 0x61, 0x6e,
- 0x75, 0x70, 0x12, 0x16, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6c, 0x65, 0x61,
- 0x6e, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x67, 0x69, 0x74,
- 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x50, 0x0a, 0x0b, 0x47,
- 0x65, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74,
- 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
- 0x47, 0x65, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x81, 0x01,
- 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f,
- 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x2b,
- 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65,
- 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70,
- 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x67, 0x69,
+ 0x66, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43,
+ 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x52,
+ 0x65, 0x66, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e,
+ 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e,
+ 0x64, 0x6c, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x52, 0x65, 0x66, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x28, 0x01,
+ 0x30, 0x01, 0x12, 0x7d, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f,
+ 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65,
+ 0x12, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x75,
+ 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69,
0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73,
- 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f,
- 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08,
- 0x01, 0x12, 0x56, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, 0x61, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67,
- 0x65, 0x73, 0x12, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x52,
- 0x61, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x61, 0x77,
- 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
- 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x6b, 0x0a, 0x14, 0x53, 0x65, 0x61,
- 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
- 0x74, 0x12, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63,
- 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
- 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x6e,
- 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97,
- 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x62, 0x0a, 0x11, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68,
- 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x2e, 0x67, 0x69,
- 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73,
- 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e,
- 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c,
- 0x65, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x65, 0x0a, 0x12, 0x52, 0x65,
- 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73,
- 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72,
- 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x73,
- 0x74, 0x6f, 0x72, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52,
+ 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x28,
- 0x01, 0x12, 0x62, 0x0a, 0x11, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x75, 0x73, 0x74, 0x6f,
- 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
- 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b,
- 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
- 0x79, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f,
- 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28,
- 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x6f, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65,
- 0x63, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x12,
- 0x25, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65,
- 0x63, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
- 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f,
- 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06,
- 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x54, 0x0a, 0x0d, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46,
- 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
- 0x2e, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43,
- 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x6c, 0x0a, 0x15,
- 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74,
- 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43,
+ 0x01, 0x12, 0x4a, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18,
+ 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69,
+ 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
+ 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x4b, 0x0a,
+ 0x09, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x2e, 0x67, 0x69, 0x74,
+ 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65,
+ 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x09, 0x88, 0x02, 0x01, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x54, 0x0a, 0x0c, 0x44, 0x65,
+ 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1b, 0x2e, 0x67, 0x69, 0x74,
+ 0x61, 0x6c, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
+ 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x09, 0x88, 0x02, 0x01, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01,
+ 0x12, 0x4e, 0x0a, 0x0b, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12,
+ 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x63,
+ 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69,
+ 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02,
+ 0x12, 0x62, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47,
+ 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
+ 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02,
+ 0x08, 0x02, 0x30, 0x01, 0x12, 0x60, 0x0a, 0x11, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74,
+ 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61,
+ 0x6c, 0x79, 0x2e, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63,
+ 0x6b, 0x73, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69,
+ 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x68,
+ 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06,
+ 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x42, 0x0a, 0x07, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75,
+ 0x70, 0x12, 0x16, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e,
+ 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x67, 0x69, 0x74, 0x61,
+ 0x6c, 0x79, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x50, 0x0a, 0x0b, 0x47, 0x65,
+ 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61,
+ 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47,
+ 0x65, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x81, 0x01, 0x0a,
+ 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72,
+ 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x2b, 0x2e,
+ 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70,
+ 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73,
+ 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x67, 0x69, 0x74,
+ 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69,
+ 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01,
+ 0x12, 0x56, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, 0x61, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65,
+ 0x73, 0x12, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x61,
+ 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x61, 0x77, 0x43,
+ 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06,
+ 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x6b, 0x0a, 0x14, 0x53, 0x65, 0x61, 0x72,
+ 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x12, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68,
+ 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53,
+ 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28,
+ 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x62, 0x0a, 0x11, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46,
+ 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74,
+ 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42,
+ 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67,
+ 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65,
+ 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x65, 0x0a, 0x12, 0x52, 0x65, 0x73,
+ 0x74, 0x6f, 0x72, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x12,
+ 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65,
+ 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x74,
+ 0x6f, 0x72, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x28, 0x01,
+ 0x12, 0x62, 0x0a, 0x11, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d,
+ 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x42,
+ 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79,
+ 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f,
+ 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02,
+ 0x08, 0x02, 0x30, 0x01, 0x12, 0x6f, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x25,
+ 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47,
+ 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72,
+ 0x79, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa,
+ 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x54, 0x0a, 0x0d, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x72,
+ 0x6f, 0x6d, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
+ 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6c,
+ 0x6f, 0x6e, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x6c, 0x0a, 0x15, 0x43,
0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x65,
- 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x69,
- 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x6f,
- 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x5d, 0x0a, 0x10, 0x52, 0x65,
- 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1f,
- 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65,
- 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52,
- 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x5d, 0x0a, 0x10, 0x52, 0x65, 0x6e,
- 0x61, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1f, 0x2e,
- 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x70,
+ 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6c,
+ 0x6f, 0x6e, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x65, 0x72,
+ 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x69, 0x74,
+ 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x6f,
+ 0x6c, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x5d, 0x0a, 0x10, 0x52, 0x65, 0x6d,
+ 0x6f, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1f, 0x2e,
+ 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x70,
0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20,
- 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65,
+ 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65,
0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x66, 0x0a, 0x13, 0x52, 0x65, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12,
- 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
- 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01,
- 0x12, 0x63, 0x0a, 0x12, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x70, 0x6f,
- 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e,
- 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f,
- 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61,
- 0x6c, 0x79, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73,
- 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa,
- 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x4e, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c,
- 0x50, 0x61, 0x74, 0x68, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65,
- 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x74, 0x46, 0x75, 0x6c,
- 0x6c, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa,
- 0x97, 0x28, 0x02, 0x08, 0x01, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e,
- 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2d, 0x6f, 0x72, 0x67, 0x2f, 0x67,
- 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2f, 0x76, 0x31, 0x34, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,
- 0x67, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x33,
+ 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x5d, 0x0a, 0x10, 0x52, 0x65, 0x6e, 0x61,
+ 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1f, 0x2e, 0x67,
+ 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6f,
+ 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e,
+ 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x70,
+ 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x66, 0x0a, 0x13, 0x52, 0x65, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x22,
+ 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12,
+ 0x63, 0x0a, 0x12, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73,
+ 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4f,
+ 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72,
+ 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c,
+ 0x79, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69,
+ 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97,
+ 0x28, 0x02, 0x08, 0x01, 0x12, 0x4e, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x50,
+ 0x61, 0x74, 0x68, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x74,
+ 0x46, 0x75, 0x6c, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c,
+ 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97,
+ 0x28, 0x02, 0x08, 0x01, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x63,
+ 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2d, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x69,
+ 0x74, 0x61, 0x6c, 0x79, 0x2f, 0x76, 0x31, 0x34, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67,
+ 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x33,
}
var (
diff --git a/proto/go/gitalypb/repository-service_grpc.pb.go b/proto/go/gitalypb/repository-service_grpc.pb.go
index f9c019181..dfd6b38b3 100644
--- a/proto/go/gitalypb/repository-service_grpc.pb.go
+++ b/proto/go/gitalypb/repository-service_grpc.pb.go
@@ -39,6 +39,8 @@ type RepositoryServiceClient interface {
WriteRef(ctx context.Context, in *WriteRefRequest, opts ...grpc.CallOption) (*WriteRefResponse, error)
FindMergeBase(ctx context.Context, in *FindMergeBaseRequest, opts ...grpc.CallOption) (*FindMergeBaseResponse, error)
CreateFork(ctx context.Context, in *CreateForkRequest, opts ...grpc.CallOption) (*CreateForkResponse, error)
+ // Deprecated: Do not use.
+ // IsSquashInProgress is deprecated and will always return false.
IsSquashInProgress(ctx context.Context, in *IsSquashInProgressRequest, opts ...grpc.CallOption) (*IsSquashInProgressResponse, error)
CreateRepositoryFromURL(ctx context.Context, in *CreateRepositoryFromURLRequest, opts ...grpc.CallOption) (*CreateRepositoryFromURLResponse, error)
// CreateBundle creates a bundle from all refs
@@ -49,7 +51,17 @@ type RepositoryServiceClient interface {
// GetConfig reads the target repository's gitconfig and streams its contents
// back. Returns a NotFound error in case no gitconfig was found.
GetConfig(ctx context.Context, in *GetConfigRequest, opts ...grpc.CallOption) (RepositoryService_GetConfigClient, error)
+ // Deprecated: Do not use.
+ // SetConfig writes a set of config entries into the target repository's
+ // gitconfig. This RPC is deprecated with no general replacement: modifying
+ // the on-disk gitconfig is not supported anymore. The only usecase that is
+ // still supported is writing "gitlab.fullpath" via the new `SetFullPath()`
+ // RPC.
SetConfig(ctx context.Context, in *SetConfigRequest, opts ...grpc.CallOption) (*SetConfigResponse, error)
+ // Deprecated: Do not use.
+ // DeleteConfig deletes a set of config entries from the target repository's
+ // gitconfig. This RPC is deprecated with no replacement: modifying the
+ // on-disk gitconfig is not supported anymore.
DeleteConfig(ctx context.Context, in *DeleteConfigRequest, opts ...grpc.CallOption) (*DeleteConfigResponse, error)
FindLicense(ctx context.Context, in *FindLicenseRequest, opts ...grpc.CallOption) (*FindLicenseResponse, error)
GetInfoAttributes(ctx context.Context, in *GetInfoAttributesRequest, opts ...grpc.CallOption) (RepositoryService_GetInfoAttributesClient, error)
@@ -263,6 +275,7 @@ func (c *repositoryServiceClient) CreateFork(ctx context.Context, in *CreateFork
return out, nil
}
+// Deprecated: Do not use.
func (c *repositoryServiceClient) IsSquashInProgress(ctx context.Context, in *IsSquashInProgressRequest, opts ...grpc.CallOption) (*IsSquashInProgressResponse, error) {
out := new(IsSquashInProgressResponse)
err := c.cc.Invoke(ctx, "/gitaly.RepositoryService/IsSquashInProgress", in, out, opts...)
@@ -410,6 +423,7 @@ func (x *repositoryServiceGetConfigClient) Recv() (*GetConfigResponse, error) {
return m, nil
}
+// Deprecated: Do not use.
func (c *repositoryServiceClient) SetConfig(ctx context.Context, in *SetConfigRequest, opts ...grpc.CallOption) (*SetConfigResponse, error) {
out := new(SetConfigResponse)
err := c.cc.Invoke(ctx, "/gitaly.RepositoryService/SetConfig", in, out, opts...)
@@ -419,6 +433,7 @@ func (c *repositoryServiceClient) SetConfig(ctx context.Context, in *SetConfigRe
return out, nil
}
+// Deprecated: Do not use.
func (c *repositoryServiceClient) DeleteConfig(ctx context.Context, in *DeleteConfigRequest, opts ...grpc.CallOption) (*DeleteConfigResponse, error) {
out := new(DeleteConfigResponse)
err := c.cc.Invoke(ctx, "/gitaly.RepositoryService/DeleteConfig", in, out, opts...)
@@ -787,6 +802,8 @@ type RepositoryServiceServer interface {
WriteRef(context.Context, *WriteRefRequest) (*WriteRefResponse, error)
FindMergeBase(context.Context, *FindMergeBaseRequest) (*FindMergeBaseResponse, error)
CreateFork(context.Context, *CreateForkRequest) (*CreateForkResponse, error)
+ // Deprecated: Do not use.
+ // IsSquashInProgress is deprecated and will always return false.
IsSquashInProgress(context.Context, *IsSquashInProgressRequest) (*IsSquashInProgressResponse, error)
CreateRepositoryFromURL(context.Context, *CreateRepositoryFromURLRequest) (*CreateRepositoryFromURLResponse, error)
// CreateBundle creates a bundle from all refs
@@ -797,7 +814,17 @@ type RepositoryServiceServer interface {
// GetConfig reads the target repository's gitconfig and streams its contents
// back. Returns a NotFound error in case no gitconfig was found.
GetConfig(*GetConfigRequest, RepositoryService_GetConfigServer) error
+ // Deprecated: Do not use.
+ // SetConfig writes a set of config entries into the target repository's
+ // gitconfig. This RPC is deprecated with no general replacement: modifying
+ // the on-disk gitconfig is not supported anymore. The only usecase that is
+ // still supported is writing "gitlab.fullpath" via the new `SetFullPath()`
+ // RPC.
SetConfig(context.Context, *SetConfigRequest) (*SetConfigResponse, error)
+ // Deprecated: Do not use.
+ // DeleteConfig deletes a set of config entries from the target repository's
+ // gitconfig. This RPC is deprecated with no replacement: modifying the
+ // on-disk gitconfig is not supported anymore.
DeleteConfig(context.Context, *DeleteConfigRequest) (*DeleteConfigResponse, error)
FindLicense(context.Context, *FindLicenseRequest) (*FindLicenseResponse, error)
GetInfoAttributes(*GetInfoAttributesRequest, RepositoryService_GetInfoAttributesServer) error
diff --git a/proto/hook.proto b/proto/hook.proto
index 71dd75cd6..1c8a2001f 100644
--- a/proto/hook.proto
+++ b/proto/hook.proto
@@ -36,6 +36,13 @@ service HookService {
op: ACCESSOR
};
}
+ // PackObjectsHookWithSidechannel is an optimized version of PackObjectsHook that uses
+ // a unix socket side channel.
+ rpc PackObjectsHookWithSidechannel(PackObjectsHookWithSidechannelRequest) returns (PackObjectsHookWithSidechannelResponse) {
+ option (op_type) = {
+ op: ACCESSOR
+ };
+ }
}
message PreReceiveHookRequest {
@@ -110,3 +117,11 @@ message PackObjectsHookResponse {
// stderr contains progress messages (such as "Enumerating objects ...")
bytes stderr = 2;
}
+
+message PackObjectsHookWithSidechannelRequest {
+ Repository repository = 1 [(target_repository)=true];
+ // args contains the arguments passed to the pack-objects hook, without the leading "git"
+ repeated string args = 2;
+}
+
+message PackObjectsHookWithSidechannelResponse {}
diff --git a/proto/operations.proto b/proto/operations.proto
index 459e4a29e..2414717d0 100644
--- a/proto/operations.proto
+++ b/proto/operations.proto
@@ -607,10 +607,10 @@ message UserSquashRequest {
Repository repository = 1 [(target_repository)=true];
// user is used for authorization checks.
User user = 2;
- // squash_id is used as a unique identifier for the squash. Internally, this
- // is used to identify the worktree in which the squash shall be computed. No
- // two UserSquash RPCs may run with the same ID.
- string squash_id = 3;
+ // SquashId used to identify the path where the worktree was created. Given
+ // that Gitaly does in-memory squashes now, this is useless and will be
+ // ignored. There is no replacement for this.
+ string squash_id = 3 [deprecated=true];
reserved 4;
// start_sha is the object ID of the start commit of the range which shall be
// squashed. Must be an ancestor of end_sha.
diff --git a/proto/remote.proto b/proto/remote.proto
index 69095e113..c409948af 100644
--- a/proto/remote.proto
+++ b/proto/remote.proto
@@ -8,21 +8,11 @@ import "lint.proto";
import "shared.proto";
service RemoteService {
- rpc AddRemote(AddRemoteRequest) returns (AddRemoteResponse) {
- option (op_type) = {
- op: MUTATOR
- };
- }
rpc FetchInternalRemote(FetchInternalRemoteRequest) returns (FetchInternalRemoteResponse) {
option (op_type) = {
op: MUTATOR
};
}
- rpc RemoveRemote(RemoveRemoteRequest) returns (RemoveRemoteResponse) {
- option (op_type) = {
- op: MUTATOR
- };
- }
// UpdateRemoteMirror compares the references in the target repository and its remote mirror
// repository. Any differences in the references are then addressed by pushing the differing
@@ -53,28 +43,6 @@ service RemoteService {
}
}
-message AddRemoteRequest {
- Repository repository = 1 [(target_repository)=true];
- string name = 2;
- string url = 3;
- // DEPRECATED: https://gitlab.com/gitlab-org/gitaly/proto/merge_requests/137
- reserved 4;
- reserved "mirror_refmap";
- // If any, the remote is configured as a mirror with those mappings
- repeated string mirror_refmaps = 5;
-}
-
-message AddRemoteResponse {}
-
-message RemoveRemoteRequest {
- Repository repository = 1 [(target_repository)=true];
- string name = 2;
-}
-
-message RemoveRemoteResponse {
- bool result = 1;
-}
-
message FetchInternalRemoteRequest {
Repository repository = 1 [(target_repository)=true];
Repository remote_repository = 2;
@@ -95,9 +63,6 @@ message UpdateRemoteMirrorRequest {
// Repository is the repository whose mirror repository to update.
Repository repository = 1 [(target_repository)=true];
- // RefName is actually the remote to update. Deprecated in favor of the
- // Remote field.
- string ref_name = 2;
// Remote contains parameters required to connect to the remote repository.
// This allows Gitaly to use an in-memory remote and does not require any
// on-disk remote configuration.
@@ -118,6 +83,9 @@ message UpdateRemoteMirrorRequest {
// KeepDivergentRefs specifies whether or not to update diverged references
// in the mirror repository.
bool keep_divergent_refs = 6;
+
+ reserved 2;
+ reserved "ref_name";
}
message UpdateRemoteMirrorResponse {
@@ -146,16 +114,14 @@ message FindRemoteRootRefRequest {
// a remote name is given, then this is the repository in which the remote
// will be looked up.
Repository repository = 1 [(target_repository)=true];
- // Remote is the name of the remote of which the root reference shall be
- // looked up. The remote must have been created before this call. This
- // parameter is deprecated in favor of `RemoteUrl`, see
- // https://gitlab.com/gitlab-org/gitaly/-/issues/1773.
- string remote = 2 [deprecated=true];
// RemoteUrl specifies the remote repository URL which should be fetched from.
string remote_url = 3;
// HttpAuthorizationHeader is the HTTP header which should be added to the
// request in order to authenticate against the repository.
string http_authorization_header = 4;
+
+ reserved 2;
+ reserved "remote";
}
// FindRemoteRootRefResponse represents the response for the FindRemoteRootRef
@@ -164,17 +130,3 @@ message FindRemoteRootRefResponse {
// Ref is the name of the remote root reference.
string ref = 1;
}
-
-message ListRemotesRequest {
- Repository repository = 1 [(target_repository)=true];
-}
-
-message ListRemotesResponse {
- message Remote {
- string name = 1;
- string fetch_url = 2;
- string push_url = 3;
- }
-
- repeated Remote remotes = 1;
-}
diff --git a/proto/repository-service.proto b/proto/repository-service.proto
index f4ca95264..bc4b6f245 100644
--- a/proto/repository-service.proto
+++ b/proto/repository-service.proto
@@ -99,7 +99,10 @@ service RepositoryService {
op: MUTATOR
};
}
+
+ // IsSquashInProgress is deprecated and will always return false.
rpc IsSquashInProgress(IsSquashInProgressRequest) returns (IsSquashInProgressResponse) {
+ option deprecated = true;
option (op_type) = {
op: ACCESSOR
};
@@ -139,13 +142,23 @@ service RepositoryService {
};
}
+ // SetConfig writes a set of config entries into the target repository's
+ // gitconfig. This RPC is deprecated with no general replacement: modifying
+ // the on-disk gitconfig is not supported anymore. The only usecase that is
+ // still supported is writing "gitlab.fullpath" via the new `SetFullPath()`
+ // RPC.
rpc SetConfig(SetConfigRequest) returns (SetConfigResponse) {
+ option deprecated = true;
option (op_type) = {
op: MUTATOR
};
}
+ // DeleteConfig deletes a set of config entries from the target repository's
+ // gitconfig. This RPC is deprecated with no replacement: modifying the
+ // on-disk gitconfig is not supported anymore.
rpc DeleteConfig(DeleteConfigRequest) returns (DeleteConfigResponse) {
+ option deprecated = true;
option (op_type) = {
op: MUTATOR
};
@@ -334,10 +347,6 @@ message ApplyGitattributesResponse {}
message FetchRemoteRequest {
Repository repository = 1 [(target_repository)=true];
- // remote is the name of the remote that shall be fetched. This remote must
- // exist in the repository's configuration already. This parameter is
- // deprecated in favor of remote_params.
- string remote = 2;
// force determines if references should be force-updated in case they have
// diverged.
bool force = 3;
@@ -358,6 +367,9 @@ message FetchRemoteRequest {
// tags were modified, returning the result in the tags_changed field of
// FetchRemoteResponse
bool check_tags_changed = 11;
+
+ reserved 2;
+ reserved "remote";
}
message FetchRemoteResponse {
diff --git a/ruby/lib/gitaly_server.rb b/ruby/lib/gitaly_server.rb
index a7526291b..112cc635d 100644
--- a/ruby/lib/gitaly_server.rb
+++ b/ruby/lib/gitaly_server.rb
@@ -8,7 +8,6 @@ require_relative 'gitaly_server/utils.rb'
require_relative 'gitaly_server/operations_service.rb'
require_relative 'gitaly_server/repository_service.rb'
require_relative 'gitaly_server/wiki_service.rb'
-require_relative 'gitaly_server/remote_service.rb'
require_relative 'gitaly_server/health_service.rb'
require_relative 'gitaly_server/feature_flags.rb'
@@ -49,7 +48,6 @@ module GitalyServer
server.handle(OperationsService.new)
server.handle(RepositoryService.new)
server.handle(WikiService.new)
- server.handle(RemoteService.new)
server.handle(HealthService.new)
end
end
diff --git a/ruby/lib/gitaly_server/remote_service.rb b/ruby/lib/gitaly_server/remote_service.rb
deleted file mode 100644
index e19ddd3c3..000000000
--- a/ruby/lib/gitaly_server/remote_service.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-module GitalyServer
- class RemoteService < Gitaly::RemoteService::Service
- include Utils
-
- # Maximum number of divergent refs to return in UpdateRemoteMirrorResponse
- DIVERGENT_REF_LIMIT = 100
-
- def add_remote(request, call)
- repo = Gitlab::Git::Repository.from_gitaly(request.repository, call)
-
- mirror_refmap = parse_refmaps(request.mirror_refmaps)
-
- repo.add_remote(request.name, request.url, mirror_refmap: mirror_refmap)
-
- Gitaly::AddRemoteResponse.new
- end
-
- def update_remote_mirror(call)
- request_enum = call.each_remote_read
- first_request = request_enum.next
-
- only_branches_matching = first_request.only_branches_matching.to_a
- only_branches_matching += request_enum.flat_map(&:only_branches_matching)
-
- remote_mirror = Gitlab::Git::RemoteMirror.new(
- Gitlab::Git::Repository.from_gitaly(first_request.repository, call),
- first_request.ref_name,
- ssh_auth: Gitlab::Git::SshAuth.from_gitaly(first_request),
- only_branches_matching: only_branches_matching,
- keep_divergent_refs: first_request.keep_divergent_refs
- )
-
- remote_mirror.update
-
- Gitaly::UpdateRemoteMirrorResponse.new(
- divergent_refs: remote_mirror.divergent_refs.take(DIVERGENT_REF_LIMIT)
- )
- end
- end
-end
diff --git a/ruby/lib/gitaly_server/utils.rb b/ruby/lib/gitaly_server/utils.rb
index ecb78fd9e..8d4e45c90 100644
--- a/ruby/lib/gitaly_server/utils.rb
+++ b/ruby/lib/gitaly_server/utils.rb
@@ -63,21 +63,5 @@ module GitalyServer
def sanitize_url(str)
str.gsub(URL_HOST_PATTERN, '\1[FILTERED]@\3\4')
end
-
- def parse_refmaps(refmaps)
- return unless refmaps.present?
-
- parsed_refmaps = refmaps.select(&:present?).map do |refmap|
- refmap_spec = refmap.to_sym
-
- if Gitlab::Git::RepositoryMirroring::REFMAPS.key?(refmap_spec)
- refmap_spec
- else
- refmap
- end
- end
-
- parsed_refmaps.presence
- end
end
end
diff --git a/ruby/lib/gitlab/git.rb b/ruby/lib/gitlab/git.rb
index d010aea6c..5ac9a6e0d 100644
--- a/ruby/lib/gitlab/git.rb
+++ b/ruby/lib/gitlab/git.rb
@@ -21,10 +21,8 @@ dir = __dir__
# Some later requires are order-sensitive. Manually require whatever we need.
require_relative "#{dir}/encoding_helper.rb"
require_relative "#{dir}/utils/strong_memoize.rb"
-require_relative "#{dir}/ref_matcher.rb"
require_relative "#{dir}/git/remote_repository.rb"
require_relative "#{dir}/git/popen.rb"
-require_relative "#{dir}/git/repository_mirroring.rb"
# Require all .rb files we can find in the gitlab lib directory
Dir["#{dir}/**/*.rb"].sort.each do |ruby_file|
diff --git a/ruby/lib/gitlab/git/gitlab_projects.rb b/ruby/lib/gitlab/git/gitlab_projects.rb
index 9c11e4815..d90bf7ae8 100644
--- a/ruby/lib/gitlab/git/gitlab_projects.rb
+++ b/ruby/lib/gitlab/git/gitlab_projects.rb
@@ -76,22 +76,6 @@ module Gitlab
true
end
- def delete_remote_branches(remote_name, branch_names, env: {})
- branch_names.each_slice(BRANCHES_PER_PUSH) do |branches|
- logger.info "Pushing #{branches.count} deleted branches from #{repository_absolute_path} to remote #{remote_name}"
-
- cmd = %W(#{Gitlab.config.git.bin_path} push -- #{remote_name})
- branches.each { |branch| cmd << ":#{branch}" }
-
- unless run(cmd, repository_absolute_path, env)
- logger.error("Pushing deleted branches to remote #{remote_name} failed.")
- return false
- end
- end
-
- true
- end
-
protected
def run(*args)
diff --git a/ruby/lib/gitlab/git/remote_mirror.rb b/ruby/lib/gitlab/git/remote_mirror.rb
deleted file mode 100644
index 48f60f28f..000000000
--- a/ruby/lib/gitlab/git/remote_mirror.rb
+++ /dev/null
@@ -1,146 +0,0 @@
-module Gitlab
- module Git
- class RemoteMirror
- attr_reader :repository, :remote_name, :ssh_auth, :only_branches_matching
-
- # An Array of local refnames that have diverged on the remote
- #
- # Only populated when `keep_divergent_refs` is enabled
- attr_reader :divergent_refs
-
- def initialize(repository, remote_name, ssh_auth:, only_branches_matching:, keep_divergent_refs:)
- @repository = repository
- @remote_name = remote_name
- @ssh_auth = ssh_auth
- @only_branches_matching = only_branches_matching
- @keep_divergent_refs = keep_divergent_refs
-
- @divergent_refs = []
- end
-
- def update
- ssh_auth.setup do |env|
- # Retrieve the remote branches first since they may take a while to load,
- # and the local branches may have changed during this time.
- remote_branch_list = remote_branches(env: env)
- updated_branches = changed_refs(local_branches, remote_branch_list)
- push_refs(default_branch_first(updated_branches.keys), env: env)
- delete_refs(local_branches, remote_branches(env: env), env: env)
-
- local_tags = refs_obj(repository.tags)
- remote_tags = refs_obj(repository.remote_tags(remote_name, env: env))
-
- updated_tags = changed_refs(local_tags, remote_tags)
- push_refs(updated_tags.keys, env: env)
- delete_refs(local_tags, remote_tags, env: env)
- end
- end
-
- private
-
- def ref_matchers
- @ref_matchers ||= only_branches_matching.map do |ref|
- GitLab::RefMatcher.new(ref)
- end
- end
-
- def local_branches
- @local_branches ||= refs_obj(
- repository.local_branches,
- match_refs: true
- )
- end
-
- def remote_branches(env:)
- @remote_branches ||= refs_obj(
- repository.remote_branches(remote_name, env: env),
- match_refs: true
- )
- end
-
- def refs_obj(refs, match_refs: false)
- refs.each_with_object({}) do |ref, refs|
- next if match_refs && !include_ref?(ref.name)
-
- key = ref.is_a?(Gitlab::Git::Tag) ? ref.refname : ref.name
- refs[key] = ref
- end
- end
-
- def changed_refs(local_refs, remote_refs)
- local_refs.select do |ref_name, ref|
- remote_ref = remote_refs[ref_name]
-
- # Ref doesn't exist on the remote, it should be created
- next true if remote_ref.nil?
-
- local_target = ref.dereferenced_target
- remote_target = remote_ref.dereferenced_target
-
- if local_target == remote_target
- # Ref is identical on the remote, no point mirroring
- false
- elsif @keep_divergent_refs
- # Mirror the ref if its remote counterpart hasn't diverged
- if repository.ancestor?(remote_target&.id, local_target&.id)
- true
- else
- Gitlab::GitLogger.info("Divergent ref `#{ref_name}` in #{repository.path} due to ancestry -- remote: #{remote_target&.id}, local: #{local_target&.id}")
- @divergent_refs << ref.refname
- false
- end
- else
- # Attempt to overwrite whatever's on the remote; push rules and
- # protected branches may still prevent this
- true
- end
- end
- end
-
- # Put the default branch first so it works fine when remote mirror is empty.
- def default_branch_first(branches)
- return unless branches.present?
-
- default_branch, branches = branches.partition do |branch|
- repository.root_ref == branch
- end
-
- branches.unshift(*default_branch)
- end
-
- def push_refs(refs, env:)
- return unless refs.present?
-
- repository.push_remote_branches(remote_name, refs, env: env)
- end
-
- def delete_refs(local_refs, remote_refs, env:)
- return if @keep_divergent_refs
-
- refs = refs_to_delete(local_refs, remote_refs)
-
- return unless refs.present?
-
- repository.delete_remote_branches(remote_name, refs.keys, env: env)
- end
-
- def refs_to_delete(local_refs, remote_refs)
- default_branch_id = repository.commit.id
-
- remote_refs.select do |remote_ref_name, remote_ref|
- next false if local_refs[remote_ref_name] # skip if branch or tag exist in local repo
-
- remote_ref_id = remote_ref.dereferenced_target.try(:id)
-
- repository.ancestor?(remote_ref_id, default_branch_id)
- end
- end
-
- def include_ref?(ref_name)
- return true unless ref_matchers.present?
-
- ref_matchers.any? { |matcher| matcher.matches?(ref_name) }
- end
- end
- end
-end
diff --git a/ruby/lib/gitlab/git/repository.rb b/ruby/lib/gitlab/git/repository.rb
index ae84b5300..02b9e05e9 100644
--- a/ruby/lib/gitlab/git/repository.rb
+++ b/ruby/lib/gitlab/git/repository.rb
@@ -4,7 +4,6 @@ module Gitlab
module Git
# These are monkey patches on top of the vendored version of Repository.
class Repository
- include Gitlab::Git::RepositoryMirroring
include Gitlab::Git::Popen
include Gitlab::EncodingHelper
include Gitlab::Utils::StrongMemoize
@@ -126,10 +125,6 @@ module Gitlab
branches_filter
end
- def local_branches(sort_by: nil)
- branches_filter(filter: :local, sort_by: sort_by)
- end
-
# Git repository can contains some hidden refs like:
# /refs/notes/*
# /refs/git-as-svn/*
@@ -193,14 +188,6 @@ module Gitlab
end
end
- def ancestor?(from, to)
- return false if from.nil? || to.nil?
-
- merge_base(from, to) == from
- rescue Rugged::OdbError
- false
- end
-
def diff_exists?(sha1, sha2)
rugged.diff(sha1, sha2).size.positive?
end
@@ -354,24 +341,6 @@ module Gitlab
Ref.dereference_object(obj)
end
- def add_remote(remote_name, url, mirror_refmap: nil)
- rugged.remotes.create(remote_name, url)
-
- set_remote_as_mirror(remote_name, refmap: mirror_refmap) if mirror_refmap
- rescue Rugged::ConfigError
- remote_update(remote_name, url: url)
- end
-
- # Update the specified remote using the values in the +options+ hash
- #
- # Example
- # repo.update_remote("origin", url: "path/to/repo")
- def remote_update(remote_name, url:)
- # TODO: Implement other remote options
- rugged.remotes.set_url(remote_name, url)
- nil
- end
-
def commit(ref = nil)
ref ||= root_ref
Gitlab::Git::Commit.find(self, ref)
diff --git a/ruby/lib/gitlab/git/repository_mirroring.rb b/ruby/lib/gitlab/git/repository_mirroring.rb
deleted file mode 100644
index 79073ecb1..000000000
--- a/ruby/lib/gitlab/git/repository_mirroring.rb
+++ /dev/null
@@ -1,113 +0,0 @@
-module Gitlab
- module Git
- module RepositoryMirroring
- GITLAB_PROJECTS_TIMEOUT = 10800
-
- RemoteError = Class.new(StandardError)
-
- REFMAPS = {
- # With `:all_refs`, the repository is equivalent to the result of `git clone --mirror`
- all_refs: '+refs/*:refs/*',
- heads: '+refs/heads/*:refs/heads/*',
- tags: '+refs/tags/*:refs/tags/*'
- }.freeze
-
- def remote_branches(remote_name, env:)
- list_remote_refs(remote_name, env: env).map do |line|
- target, refname = line.strip.split("\t")
-
- if target.nil? || refname.nil?
- Rails.logger.info("Empty or invalid list of heads for remote: #{remote_name}")
- break []
- end
-
- next unless refname.start_with?('refs/heads/')
-
- target_commit = Gitlab::Git::Commit.find(self, target)
- Gitlab::Git::Branch.new(self, refname, target, target_commit)
- end.compact
- end
-
- def push_remote_branches(remote_name, branch_names, forced: true, env: {})
- success = @gitlab_projects.push_branches(remote_name, GITLAB_PROJECTS_TIMEOUT, forced, branch_names, env: env)
-
- success || gitlab_projects_error
- end
-
- def delete_remote_branches(remote_name, branch_names, env: {})
- success = @gitlab_projects.delete_remote_branches(remote_name, branch_names, env: env)
-
- success || gitlab_projects_error
- end
-
- def set_remote_as_mirror(remote_name, refmap: :all_refs)
- set_remote_refmap(remote_name, refmap)
-
- rugged.config["remote.#{remote_name}.mirror"] = true
- rugged.config["remote.#{remote_name}.prune"] = true
- end
-
- def remote_tags(remote, env: {})
- # Each line has this format: "dc872e9fa6963f8f03da6c8f6f264d0845d6b092\trefs/tags/v1.10.0\n"
- # We want to convert it to: [{ 'v1.10.0' => 'dc872e9fa6963f8f03da6c8f6f264d0845d6b092' }, ...]
- list_remote_refs(remote, env: env).map do |line|
- target, refname = line.strip.split("\t")
-
- # When the remote repo does not have tags.
- if target.nil? || refname.nil?
- Rails.logger.info "Empty or invalid list of tags for remote: #{remote}"
- break []
- end
-
- next unless refname.start_with?('refs/tags/')
-
- # We're only interested in tag references
- # See: http://stackoverflow.com/questions/15472107/when-listing-git-ls-remote-why-theres-after-the-tag-name
- next if refname.end_with?('^{}')
-
- target_commit = Gitlab::Git::Commit.find(self, target)
- Gitlab::Git::Tag.new(self,
- name: refname,
- target: target,
- target_commit: target_commit)
- end.compact
- end
-
- private
-
- def set_remote_refmap(remote_name, refmap)
- Array(refmap).each_with_index do |refspec, i|
- refspec = REFMAPS[refspec] || refspec
-
- # We need multiple `fetch` entries, but Rugged only allows replacing a config, not adding to it.
- # To make sure we start from scratch, we set the first using rugged, and use `git` for any others
- if i == 0
- rugged.config["remote.#{remote_name}.fetch"] = refspec
- else
- run_git(%W[config --add remote.#{remote_name}.fetch #{refspec}])
- end
- end
- end
-
- def list_remote_refs(remote, env:)
- @list_remote_refs ||= {}
- @list_remote_refs[remote] ||= begin
- ref_list, exit_code, error = nil
-
- # List heads and tags, ignoring stuff like `refs/merge-requests` and `refs/pull`
- cmd = %W[#{Gitlab.config.git.bin_path} --git-dir=#{path} ls-remote --heads --tags #{remote}]
-
- Open3.popen3(env, *cmd) do |_stdin, stdout, stderr, wait_thr|
- ref_list = stdout.read
- error = stderr.read
- exit_code = wait_thr.value.exitstatus
- end
-
- raise RemoteError, error unless exit_code.zero?
-
- ref_list.each_line(chomp: true)
- end
- end
- end
- end
-end
diff --git a/ruby/lib/gitlab/ref_matcher.rb b/ruby/lib/gitlab/ref_matcher.rb
deleted file mode 100644
index c0bb2163a..000000000
--- a/ruby/lib/gitlab/ref_matcher.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-# frozen_string_literal: true
-
-module GitLab
- class RefMatcher
- def initialize(ref_name_or_pattern)
- @ref_name_or_pattern = ref_name_or_pattern
- end
-
- # Checks if the protected ref matches the given ref name.
- def matches?(ref_name)
- return false if @ref_name_or_pattern.blank?
-
- exact_match?(ref_name) || wildcard_match?(ref_name)
- end
-
- private
-
- # Checks if this protected ref contains a wildcard
- def wildcard?
- @ref_name_or_pattern&.include?('*')
- end
-
- def exact_match?(ref_name)
- @ref_name_or_pattern == ref_name
- end
-
- def wildcard_match?(ref_name)
- return false unless wildcard?
-
- ref_name.match(wildcard_regex).present?
- end
-
- def wildcard_regex
- @wildcard_regex ||= begin
- split = @ref_name_or_pattern.split('*', -1) # Use -1 to correctly handle trailing '*'
- quoted_segments = split.map { |segment| Regexp.quote(segment) }
- /\A#{quoted_segments.join('.*?')}\z/
- end
- end
- end
-end
diff --git a/ruby/proto/gitaly/blob_pb.rb b/ruby/proto/gitaly/blob_pb.rb
index 3ade3769c..65cd29dac 100644
--- a/ruby/proto/gitaly/blob_pb.rb
+++ b/ruby/proto/gitaly/blob_pb.rb
@@ -41,6 +41,7 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
repeated :revisions, :string, 2
optional :limit, :uint32, 3
optional :bytes_limit, :int64, 4
+ optional :with_paths, :bool, 5
end
add_message "gitaly.ListBlobsResponse" do
repeated :blobs, :message, 1, "gitaly.ListBlobsResponse.Blob"
@@ -49,6 +50,7 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
optional :oid, :string, 1
optional :size, :int64, 2
optional :data, :bytes, 3
+ optional :path, :bytes, 4
end
add_message "gitaly.ListAllBlobsRequest" do
optional :repository, :message, 1, "gitaly.Repository"
diff --git a/ruby/proto/gitaly/hook_pb.rb b/ruby/proto/gitaly/hook_pb.rb
index 20c8cb8b1..6ac768187 100644
--- a/ruby/proto/gitaly/hook_pb.rb
+++ b/ruby/proto/gitaly/hook_pb.rb
@@ -66,6 +66,12 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
optional :stdout, :bytes, 1
optional :stderr, :bytes, 2
end
+ add_message "gitaly.PackObjectsHookWithSidechannelRequest" do
+ optional :repository, :message, 1, "gitaly.Repository"
+ repeated :args, :string, 2
+ end
+ add_message "gitaly.PackObjectsHookWithSidechannelResponse" do
+ end
end
end
@@ -81,4 +87,6 @@ module Gitaly
ReferenceTransactionHookResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.ReferenceTransactionHookResponse").msgclass
PackObjectsHookRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.PackObjectsHookRequest").msgclass
PackObjectsHookResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.PackObjectsHookResponse").msgclass
+ PackObjectsHookWithSidechannelRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.PackObjectsHookWithSidechannelRequest").msgclass
+ PackObjectsHookWithSidechannelResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.PackObjectsHookWithSidechannelResponse").msgclass
end
diff --git a/ruby/proto/gitaly/hook_services_pb.rb b/ruby/proto/gitaly/hook_services_pb.rb
index de4048201..1059d58bd 100644
--- a/ruby/proto/gitaly/hook_services_pb.rb
+++ b/ruby/proto/gitaly/hook_services_pb.rb
@@ -22,6 +22,9 @@ module Gitaly
# uploadpack.packObjectsHook mechanism. It generates a stream of packed
# Git objects.
rpc :PackObjectsHook, stream(::Gitaly::PackObjectsHookRequest), stream(::Gitaly::PackObjectsHookResponse)
+ # PackObjectsHookWithSidechannel is an optimized version of PackObjectsHook that uses
+ # a unix socket side channel.
+ rpc :PackObjectsHookWithSidechannel, ::Gitaly::PackObjectsHookWithSidechannelRequest, ::Gitaly::PackObjectsHookWithSidechannelResponse
end
Stub = Service.rpc_stub_class
diff --git a/ruby/proto/gitaly/remote_pb.rb b/ruby/proto/gitaly/remote_pb.rb
index b9f415d7c..78272e164 100644
--- a/ruby/proto/gitaly/remote_pb.rb
+++ b/ruby/proto/gitaly/remote_pb.rb
@@ -7,21 +7,6 @@ require 'lint_pb'
require 'shared_pb'
Google::Protobuf::DescriptorPool.generated_pool.build do
add_file("remote.proto", :syntax => :proto3) do
- add_message "gitaly.AddRemoteRequest" do
- optional :repository, :message, 1, "gitaly.Repository"
- optional :name, :string, 2
- optional :url, :string, 3
- repeated :mirror_refmaps, :string, 5
- end
- add_message "gitaly.AddRemoteResponse" do
- end
- add_message "gitaly.RemoveRemoteRequest" do
- optional :repository, :message, 1, "gitaly.Repository"
- optional :name, :string, 2
- end
- add_message "gitaly.RemoveRemoteResponse" do
- optional :result, :bool, 1
- end
add_message "gitaly.FetchInternalRemoteRequest" do
optional :repository, :message, 1, "gitaly.Repository"
optional :remote_repository, :message, 2, "gitaly.Repository"
@@ -31,7 +16,6 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
end
add_message "gitaly.UpdateRemoteMirrorRequest" do
optional :repository, :message, 1, "gitaly.Repository"
- optional :ref_name, :string, 2
optional :remote, :message, 7, "gitaly.UpdateRemoteMirrorRequest.Remote"
repeated :only_branches_matching, :bytes, 3
optional :ssh_key, :string, 4
@@ -54,32 +38,16 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
end
add_message "gitaly.FindRemoteRootRefRequest" do
optional :repository, :message, 1, "gitaly.Repository"
- optional :remote, :string, 2
optional :remote_url, :string, 3
optional :http_authorization_header, :string, 4
end
add_message "gitaly.FindRemoteRootRefResponse" do
optional :ref, :string, 1
end
- add_message "gitaly.ListRemotesRequest" do
- optional :repository, :message, 1, "gitaly.Repository"
- end
- add_message "gitaly.ListRemotesResponse" do
- repeated :remotes, :message, 1, "gitaly.ListRemotesResponse.Remote"
- end
- add_message "gitaly.ListRemotesResponse.Remote" do
- optional :name, :string, 1
- optional :fetch_url, :string, 2
- optional :push_url, :string, 3
- end
end
end
module Gitaly
- AddRemoteRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.AddRemoteRequest").msgclass
- AddRemoteResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.AddRemoteResponse").msgclass
- RemoveRemoteRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.RemoveRemoteRequest").msgclass
- RemoveRemoteResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.RemoveRemoteResponse").msgclass
FetchInternalRemoteRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.FetchInternalRemoteRequest").msgclass
FetchInternalRemoteResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.FetchInternalRemoteResponse").msgclass
UpdateRemoteMirrorRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.UpdateRemoteMirrorRequest").msgclass
@@ -89,7 +57,4 @@ module Gitaly
FindRemoteRepositoryResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.FindRemoteRepositoryResponse").msgclass
FindRemoteRootRefRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.FindRemoteRootRefRequest").msgclass
FindRemoteRootRefResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.FindRemoteRootRefResponse").msgclass
- ListRemotesRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.ListRemotesRequest").msgclass
- ListRemotesResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.ListRemotesResponse").msgclass
- ListRemotesResponse::Remote = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.ListRemotesResponse.Remote").msgclass
end
diff --git a/ruby/proto/gitaly/remote_services_pb.rb b/ruby/proto/gitaly/remote_services_pb.rb
index f75fc196e..d4be3a3ec 100644
--- a/ruby/proto/gitaly/remote_services_pb.rb
+++ b/ruby/proto/gitaly/remote_services_pb.rb
@@ -14,9 +14,7 @@ module Gitaly
self.unmarshal_class_method = :decode
self.service_name = 'gitaly.RemoteService'
- rpc :AddRemote, ::Gitaly::AddRemoteRequest, ::Gitaly::AddRemoteResponse
rpc :FetchInternalRemote, ::Gitaly::FetchInternalRemoteRequest, ::Gitaly::FetchInternalRemoteResponse
- rpc :RemoveRemote, ::Gitaly::RemoveRemoteRequest, ::Gitaly::RemoveRemoteResponse
# UpdateRemoteMirror compares the references in the target repository and its remote mirror
# repository. Any differences in the references are then addressed by pushing the differing
# references to the mirror. Created and modified references are updated, removed references are
diff --git a/ruby/proto/gitaly/repository-service_pb.rb b/ruby/proto/gitaly/repository-service_pb.rb
index 374b4c74a..f702f902b 100644
--- a/ruby/proto/gitaly/repository-service_pb.rb
+++ b/ruby/proto/gitaly/repository-service_pb.rb
@@ -64,7 +64,6 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
end
add_message "gitaly.FetchRemoteRequest" do
optional :repository, :message, 1, "gitaly.Repository"
- optional :remote, :string, 2
optional :force, :bool, 3
optional :no_tags, :bool, 4
optional :timeout, :int32, 5
diff --git a/ruby/proto/gitaly/repository-service_services_pb.rb b/ruby/proto/gitaly/repository-service_services_pb.rb
index 248d7539b..7fc470362 100644
--- a/ruby/proto/gitaly/repository-service_services_pb.rb
+++ b/ruby/proto/gitaly/repository-service_services_pb.rb
@@ -35,6 +35,7 @@ module Gitaly
rpc :WriteRef, ::Gitaly::WriteRefRequest, ::Gitaly::WriteRefResponse
rpc :FindMergeBase, ::Gitaly::FindMergeBaseRequest, ::Gitaly::FindMergeBaseResponse
rpc :CreateFork, ::Gitaly::CreateForkRequest, ::Gitaly::CreateForkResponse
+ # IsSquashInProgress is deprecated and will always return false.
rpc :IsSquashInProgress, ::Gitaly::IsSquashInProgressRequest, ::Gitaly::IsSquashInProgressResponse
rpc :CreateRepositoryFromURL, ::Gitaly::CreateRepositoryFromURLRequest, ::Gitaly::CreateRepositoryFromURLResponse
# CreateBundle creates a bundle from all refs
@@ -45,7 +46,15 @@ module Gitaly
# GetConfig reads the target repository's gitconfig and streams its contents
# back. Returns a NotFound error in case no gitconfig was found.
rpc :GetConfig, ::Gitaly::GetConfigRequest, stream(::Gitaly::GetConfigResponse)
+ # SetConfig writes a set of config entries into the target repository's
+ # gitconfig. This RPC is deprecated with no general replacement: modifying
+ # the on-disk gitconfig is not supported anymore. The only usecase that is
+ # still supported is writing "gitlab.fullpath" via the new `SetFullPath()`
+ # RPC.
rpc :SetConfig, ::Gitaly::SetConfigRequest, ::Gitaly::SetConfigResponse
+ # DeleteConfig deletes a set of config entries from the target repository's
+ # gitconfig. This RPC is deprecated with no replacement: modifying the
+ # on-disk gitconfig is not supported anymore.
rpc :DeleteConfig, ::Gitaly::DeleteConfigRequest, ::Gitaly::DeleteConfigResponse
rpc :FindLicense, ::Gitaly::FindLicenseRequest, ::Gitaly::FindLicenseResponse
rpc :GetInfoAttributes, ::Gitaly::GetInfoAttributesRequest, stream(::Gitaly::GetInfoAttributesResponse)
diff --git a/ruby/spec/gitaly/remote_service_spec.rb b/ruby/spec/gitaly/remote_service_spec.rb
deleted file mode 100644
index 5dac8a6b4..000000000
--- a/ruby/spec/gitaly/remote_service_spec.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-require 'spec_helper'
-
-describe Gitaly::RemoteService do
- include IntegrationClient
- include TestRepo
-
- subject { gitaly_stub(:RemoteService) }
-
- describe 'UpdateRemoteMirror' do
- let(:call) { double(metadata: { 'gitaly-storage-path' => '/path/to/storage' }) }
- let(:repo) { gitaly_repo('default', 'foobar.git') }
- let(:remote) { 'my-remote' }
-
- context 'request does not have ssh_key and known_hosts set' do
- it 'performs the mirroring update with an empty environment' do
- request = Gitaly::UpdateRemoteMirrorRequest.new(repository: repo, ref_name: remote)
-
- allow(call).to receive(:each_remote_read).and_return(double(next: request, flat_map: []))
- allow(Gitlab::Git::Repository).to receive(:from_gitaly).and_return(repo)
- allow_any_instance_of(Gitlab::Git::RemoteMirror).to receive(:update)
- expect(Gitlab::Git::SshAuth).to receive(:new).with('', '')
-
- GitalyServer::RemoteService.new.update_remote_mirror(call)
- end
- end
-
- context 'request has ssh_key and known_hosts set' do
- it 'calls GitlabProjects#fetch_remote with a custom GIT_SSH_COMMAND' do
- request = Gitaly::UpdateRemoteMirrorRequest.new(
- repository: repo,
- ref_name: remote,
- ssh_key: 'SSH KEY',
- known_hosts: 'KNOWN HOSTS'
- )
-
- allow(call).to receive(:each_remote_read).and_return(double(next: request, flat_map: []))
- allow(Gitlab::Git::Repository).to receive(:from_gitaly).and_return(repo)
- allow_any_instance_of(Gitlab::Git::RemoteMirror).to receive(:update)
- expect(Gitlab::Git::SshAuth).to receive(:new).with('SSH KEY', 'KNOWN HOSTS')
-
- GitalyServer::RemoteService.new.update_remote_mirror(call)
- end
- end
- end
-end
diff --git a/ruby/spec/lib/gitaly_server/remote_service_spec.rb b/ruby/spec/lib/gitaly_server/remote_service_spec.rb
deleted file mode 100644
index 511b4f008..000000000
--- a/ruby/spec/lib/gitaly_server/remote_service_spec.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe GitalyServer::RemoteService do
- describe '#update_remote_mirror' do
- it 'assigns a limited number of divergent refs' do
- stub_const("#{described_class}::DIVERGENT_REF_LIMIT", 2)
-
- mirror = double(
- divergent_refs: %w[refs/heads/master refs/heads/develop refs/heads/stable]
- ).as_null_object
- stub_const('Gitlab::Git::RemoteMirror', mirror)
-
- call = double(to_a: [], to_ary: []).as_null_object
- response = described_class.new.update_remote_mirror(call)
-
- expect(response.divergent_refs).to eq(%w[refs/heads/master refs/heads/develop])
- end
- end
-end
diff --git a/ruby/spec/lib/gitlab/git/gitlab_projects_spec.rb b/ruby/spec/lib/gitlab/git/gitlab_projects_spec.rb
index ac1ae4d67..9f7cf6dc7 100644
--- a/ruby/spec/lib/gitlab/git/gitlab_projects_spec.rb
+++ b/ruby/spec/lib/gitlab/git/gitlab_projects_spec.rb
@@ -94,34 +94,4 @@ describe Gitlab::Git::GitlabProjects do
end
end
end
-
- describe '#delete_remote_branches' do
- let(:remote_name) { 'remote-name' }
- let(:branch_names) { 20.times.map { |i| "branch#{i}" } }
- let(:env) { { 'GIT_SSH_COMMAND' => 'foo-command bar' } }
- let(:cmd1) do
- %W(#{Gitlab.config.git.bin_path} push -- #{remote_name}) +
- branch_names[0, 10].map { |b| ':' + b }
- end
- let(:cmd2) do
- %W(#{Gitlab.config.git.bin_path} push -- #{remote_name}) +
- branch_names[10, 10].map { |b| ':' + b }
- end
-
- subject { gl_projects.delete_remote_branches(remote_name, branch_names, env: env) }
-
- it 'executes the command' do
- stub_unlimited_spawn(cmd1, tmp_repo_path, env, success: true)
- stub_unlimited_spawn(cmd2, tmp_repo_path, env, success: true)
-
- is_expected.to be_truthy
- end
-
- it 'fails' do
- stub_unlimited_spawn(cmd1, tmp_repo_path, env, success: true)
- stub_unlimited_spawn(cmd2, tmp_repo_path, env, success: false)
-
- is_expected.to be_falsy
- end
- end
end
diff --git a/ruby/spec/lib/gitlab/git/remote_mirror_spec.rb b/ruby/spec/lib/gitlab/git/remote_mirror_spec.rb
deleted file mode 100644
index 1821a7aa9..000000000
--- a/ruby/spec/lib/gitlab/git/remote_mirror_spec.rb
+++ /dev/null
@@ -1,121 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::Git::RemoteMirror do
- include TestRepo
-
- let(:repository) { gitlab_git_from_gitaly_with_gitlab_projects(new_mutable_test_repo) }
- let(:gitlab_projects) { repository.gitlab_projects }
- let(:ref_name) { 'remote' }
- let(:ssh_key) { 'SSH KEY' }
- let(:known_hosts) { 'KNOWN HOSTS' }
- let(:ssh_auth) { Gitlab::Git::SshAuth.new(ssh_key, known_hosts) }
- let(:gl_projects_timeout) { Gitlab::Git::RepositoryMirroring::GITLAB_PROJECTS_TIMEOUT }
- let(:gl_projects_force) { true }
- let(:env) { { 'GIT_SSH_COMMAND' => /ssh/ } }
-
- subject(:remote_mirror) do
- described_class.new(
- repository,
- ref_name,
- ssh_auth: ssh_auth,
- only_branches_matching: [],
- keep_divergent_refs: false
- )
- end
-
- def ref(name)
- double("ref-#{name}", name: name, dereferenced_target: double(id: name))
- end
-
- def tag(name)
- Gitlab::Git::Tag.new(nil, name: "refs/tags/#{name}", target_commit: double(id: name))
- end
-
- describe '#update' do
- context 'with wildcard protected branches' do
- subject(:remote_mirror) do
- described_class.new(
- repository,
- ref_name,
- ssh_auth: ssh_auth,
- only_branches_matching: ['master', '*-stable'],
- keep_divergent_refs: false
- )
- end
-
- it 'updates the remote repository' do
- # Stub this check so we try to delete the obsolete tag
- allow(repository).to receive(:ancestor?).and_return(true)
-
- expect(repository).to receive(:local_branches).and_return([ref('master'), ref('11-5-stable'), ref('unprotected')])
- expect(repository).to receive(:remote_branches)
- .with(ref_name, env: env)
- .and_return([ref('master'), ref('obsolete-branch')])
-
- expect(repository).to receive(:tags).and_return([tag('v1.0.0'), tag('new-tag')])
- expect(repository).to receive(:remote_tags)
- .with(ref_name, env: env)
- .and_return([tag('v1.0.0'), tag('obsolete-tag')])
-
- expect(gitlab_projects)
- .to receive(:push_branches)
- .with(ref_name, gl_projects_timeout, gl_projects_force, ['master', '11-5-stable'], env: env)
- .and_return(true)
-
- expect(gitlab_projects)
- .to receive(:push_branches)
- .with(ref_name, gl_projects_timeout, gl_projects_force, ['refs/tags/v1.0.0', 'refs/tags/new-tag'], env: env)
- .and_return(true)
-
- # Leave remote branches that do not match the protected branch filter
- expect(gitlab_projects)
- .not_to receive(:delete_remote_branches)
- .with(ref_name, ['obsolete-branch'], env: env)
-
- expect(gitlab_projects)
- .to receive(:delete_remote_branches)
- .with(ref_name, ['refs/tags/obsolete-tag'], env: env)
- .and_return(true)
-
- remote_mirror.update
- end
- end
-
- it 'updates the remote repository' do
- # Stub this check so we try to delete the obsolete refs
- allow(repository).to receive(:ancestor?).and_return(true)
-
- expect(repository).to receive(:local_branches).and_return([ref('master'), ref('new-branch')])
- expect(repository).to receive(:remote_branches)
- .with(ref_name, env: env)
- .and_return([ref('master'), ref('obsolete-branch')])
-
- expect(repository).to receive(:tags).and_return([tag('v1.0.0'), tag('new-tag')])
- expect(repository).to receive(:remote_tags)
- .with(ref_name, env: env)
- .and_return([tag('v1.0.0'), tag('obsolete-tag')])
-
- expect(gitlab_projects)
- .to receive(:push_branches)
- .with(ref_name, gl_projects_timeout, gl_projects_force, ['master', 'new-branch'], env: env)
- .and_return(true)
-
- expect(gitlab_projects)
- .to receive(:push_branches)
- .with(ref_name, gl_projects_timeout, gl_projects_force, ['refs/tags/v1.0.0', 'refs/tags/new-tag'], env: env)
- .and_return(true)
-
- expect(gitlab_projects)
- .to receive(:delete_remote_branches)
- .with(ref_name, ['obsolete-branch'], env: env)
- .and_return(true)
-
- expect(gitlab_projects)
- .to receive(:delete_remote_branches)
- .with(ref_name, ['refs/tags/obsolete-tag'], env: env)
- .and_return(true)
-
- remote_mirror.update
- end
- end
-end
diff --git a/ruby/spec/lib/gitlab/git/repository_mirroring_spec.rb b/ruby/spec/lib/gitlab/git/repository_mirroring_spec.rb
deleted file mode 100644
index ee9512de4..000000000
--- a/ruby/spec/lib/gitlab/git/repository_mirroring_spec.rb
+++ /dev/null
@@ -1,68 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe Gitlab::Git::RepositoryMirroring do
- class FakeRepository
- include Gitlab::Git::RepositoryMirroring
-
- attr_reader :rugged
-
- def initialize(projects_stub, rugged_instance = nil)
- @gitlab_projects = projects_stub
- @rugged = rugged_instance
- end
-
- def gitlab_projects_error
- raise Gitlab::Git::CommandError, @gitlab_projects.output
- end
- end
-
- describe '#remote_branches' do
- let(:projects_stub) { double.as_null_object }
- let(:rugged_stub) { double.as_null_object }
-
- subject(:repository) { FakeRepository.new(projects_stub, rugged_stub) }
-
- it 'passes environment to `ls-remote`' do
- env = { option_a: true, option_b: false }
-
- expect(repository).to receive(:list_remote_refs)
- .with('remote_a', env: env)
- .and_return([])
-
- repository.remote_branches('remote_a', env: env)
- end
- end
-
- describe '#push_remote_branches' do
- let(:projects_stub) { double.as_null_object }
-
- subject(:repository) { FakeRepository.new(projects_stub) }
-
- context 'with a successful first push' do
- it 'returns true' do
- expect(projects_stub).to receive(:push_branches)
- .with('remote_a', anything, true, %w[master], env: {})
- .once
- .and_return(true)
-
- expect(projects_stub).not_to receive(:output)
-
- expect(repository.push_remote_branches('remote_a', %w[master])).to eq(true)
- end
- end
-
- context 'with a failed push' do
- it 'raises an error' do
- output = "Oh no, push mirroring failed!"
- allow(projects_stub).to receive(:output).and_return(output)
-
- expect(projects_stub).to receive(:push_branches).and_return(false)
-
- expect { repository.push_remote_branches('remote_a', %w[master develop]) }
- .to raise_error(Gitlab::Git::CommandError, output)
- end
- end
- end
-end
diff --git a/ruby/spec/lib/gitlab/git/repository_spec.rb b/ruby/spec/lib/gitlab/git/repository_spec.rb
index 5061d1f41..03e9147d4 100644
--- a/ruby/spec/lib/gitlab/git/repository_spec.rb
+++ b/ruby/spec/lib/gitlab/git/repository_spec.rb
@@ -175,20 +175,6 @@ describe Gitlab::Git::Repository do # rubocop:disable Metrics/BlockLength
end
end
- describe '#local_branches' do
- let(:repository) { mutable_repository }
-
- before do
- create_remote_branch('joe', 'remote_branch', 'master')
- create_branch(repository, 'local_branch', 'master')
- end
-
- it 'returns the local branches' do
- expect(repository.local_branches.any? { |branch| branch.name == 'remote_branch' }).to eq(false)
- expect(repository.local_branches.any? { |branch| branch.name == 'local_branch' }).to eq(true)
- end
- end
-
describe '#with_repo_branch_commit' do
let(:start_repository) { Gitlab::Git::RemoteRepository.new(source_repository) }
let(:start_commit) { source_repository.commit }
@@ -304,30 +290,6 @@ describe Gitlab::Git::Repository do # rubocop:disable Metrics/BlockLength
end
end
- describe 'remotes' do
- let(:repository) { mutable_repository }
- let(:remote_name) { 'my-remote' }
- let(:url) { 'http://my-repo.git' }
-
- describe '#add_remote' do
- let(:mirror_refmap) { '+refs/*:refs/*' }
-
- it 'added the remote' do
- begin
- repository_rugged.remotes.delete(remote_name)
- rescue Rugged::ConfigError # rubocop:disable Lint/HandleExceptions
- end
-
- repository.add_remote(remote_name, url, mirror_refmap: mirror_refmap)
-
- expect(repository_rugged.remotes[remote_name]).not_to be_nil
- expect(repository_rugged.config["remote.#{remote_name}.mirror"]).to eq('true')
- expect(repository_rugged.config["remote.#{remote_name}.prune"]).to eq('true')
- expect(repository_rugged.config["remote.#{remote_name}.fetch"]).to eq(mirror_refmap)
- end
- end
- end
-
describe '#cleanup' do
context 'when Rugged has been called' do
it 'calls close on Rugged::Repository' do
diff --git a/ruby/spec/lib/gitlab/ref_matcher_spec.rb b/ruby/spec/lib/gitlab/ref_matcher_spec.rb
deleted file mode 100644
index 71d06a65d..000000000
--- a/ruby/spec/lib/gitlab/ref_matcher_spec.rb
+++ /dev/null
@@ -1,100 +0,0 @@
-require 'spec_helper'
-
-describe GitLab::RefMatcher do
- subject { described_class.new(pattern) }
-
- describe "#matches?" do
- context "when the ref pattern is not a wildcard" do
- let(:pattern) { 'production/some-branch' }
-
- it "returns true for branch names that are an exact match" do
- expect(subject.matches?('production/some-branch')).to be true
- end
-
- it "returns false for branch names that are not an exact match" do
- expect(subject.matches?("staging/some-branch")).to be false
- end
- end
-
- context "when the ref pattern name contains wildcard(s)" do
- context "when there is a single '*'" do
- let(:pattern) { 'production/*' }
-
- it "returns true for branch names matching the wildcard" do
- expect(subject.matches?("production/some-branch")).to be true
- expect(subject.matches?("production/")).to be true
- end
-
- it "returns false for branch names not matching the wildcard" do
- expect(subject.matches?("staging/some-branch")).to be false
- expect(subject.matches?("production")).to be false
- end
- end
-
- context "when the wildcard begins with a '*'" do
- let(:pattern) { '*-stable' }
-
- it "returns true for branch names matching the wildcard" do
- expect(subject.matches?('11-0-stable')).to be true
- end
-
- it "returns false for branch names not matching the wildcard" do
- expect(subject.matches?('11-0-stable-test')).to be false
- end
- end
-
- context "when the wildcard contains regex symbols other than a '*'" do
- let(:pattern) { "pro.duc.tion/*" }
-
- it "returns true for branch names matching the wildcard" do
- expect(subject.matches?("pro.duc.tion/some-branch")).to be true
- end
-
- it "returns false for branch names not matching the wildcard" do
- expect(subject.matches?("production/some-branch")).to be false
- expect(subject.matches?("proXducYtion/some-branch")).to be false
- end
- end
-
- context "when there are '*'s at either end" do
- let(:pattern) { "*/production/*" }
-
- it "returns true for branch names matching the wildcard" do
- expect(subject.matches?("gitlab/production/some-branch")).to be true
- expect(subject.matches?("/production/some-branch")).to be true
- expect(subject.matches?("gitlab/production/")).to be true
- expect(subject.matches?("/production/")).to be true
- end
-
- it "returns false for branch names not matching the wildcard" do
- expect(subject.matches?("gitlabproductionsome-branch")).to be false
- expect(subject.matches?("production/some-branch")).to be false
- expect(subject.matches?("gitlab/production")).to be false
- expect(subject.matches?("production")).to be false
- end
- end
-
- context "when there are arbitrarily placed '*'s" do
- let(:pattern) { "pro*duction/*/gitlab/*" }
-
- it "returns true for branch names matching the wildcard" do
- expect(subject.matches?("production/some-branch/gitlab/second-branch")).to be true
- expect(subject.matches?("proXYZduction/some-branch/gitlab/second-branch")).to be true
- expect(subject.matches?("proXYZduction/gitlab/gitlab/gitlab")).to be true
- expect(subject.matches?("proXYZduction//gitlab/")).to be true
- expect(subject.matches?("proXYZduction/some-branch/gitlab/")).to be true
- expect(subject.matches?("proXYZduction//gitlab/some-branch")).to be true
- end
-
- it "returns false for branch names not matching the wildcard" do
- expect(subject.matches?("production/some-branch/not-gitlab/second-branch")).to be false
- expect(subject.matches?("prodXYZuction/some-branch/gitlab/second-branch")).to be false
- expect(subject.matches?("proXYZduction/gitlab/some-branch/gitlab")).to be false
- expect(subject.matches?("proXYZduction/gitlab//")).to be false
- expect(subject.matches?("proXYZduction/gitlab/")).to be false
- expect(subject.matches?("proXYZduction//some-branch/gitlab")).to be false
- end
- end
- end
- end
-end