From 68e8f4785a96885f80ce8fe3a1a348b327c81973 Mon Sep 17 00:00:00 2001 From: Bob Van Landuyt Date: Tue, 23 Oct 2018 14:58:16 +0200 Subject: [PATCH 1/2] Remove unused methods --- ruby/lib/gitaly_server/repository_service.rb | 14 ------------- ruby/lib/gitlab/git/repository.rb | 21 -------------------- 2 files changed, 35 deletions(-) diff --git a/ruby/lib/gitaly_server/repository_service.rb b/ruby/lib/gitaly_server/repository_service.rb index 4790b600b8..603a076bbc 100644 --- a/ruby/lib/gitaly_server/repository_service.rb +++ b/ruby/lib/gitaly_server/repository_service.rb @@ -24,20 +24,6 @@ module GitalyServer end end - # TODO: Can be removed once https://gitlab.com/gitlab-org/gitaly/merge_requests/738 - # is well and truly out in the wild. - def fsck(request, call) - repo = Gitlab::Git::Repository.from_gitaly(request.repository, call) - - repo.fsck - - Gitaly::FsckResponse.new - rescue Gitlab::Git::Repository::GitError => ex - Gitaly::FsckResponse.new(error: ex.message.b) - rescue Rugged::RepositoryError => ex - Gitaly::FsckResponse.new(error: ex.message.b) - end - def fetch_remote(request, call) bridge_exceptions do gitlab_projects = Gitlab::Git::GitlabProjects.from_gitaly(request.repository, call) diff --git a/ruby/lib/gitlab/git/repository.rb b/ruby/lib/gitlab/git/repository.rb index f3e6505c96..b7fc6ecbe0 100644 --- a/ruby/lib/gitlab/git/repository.rb +++ b/ruby/lib/gitlab/git/repository.rb @@ -15,8 +15,6 @@ module Gitlab GIT_OBJECT_DIRECTORY_RELATIVE GIT_ALTERNATE_OBJECT_DIRECTORIES_RELATIVE ].freeze - SEARCH_CONTEXT_LINES = 3 - REV_LIST_COMMIT_LIMIT = 2_000 # In https://gitlab.com/gitlab-org/gitaly/merge_requests/698 # We copied these two prefixes into gitaly-go, so don't change these # or things will break! (REBASE_WORKTREE_PREFIX and SQUASH_WORKTREE_PREFIX) @@ -24,19 +22,15 @@ module Gitlab SQUASH_WORKTREE_PREFIX = 'squash'.freeze GITALY_INTERNAL_URL = 'ssh://gitaly/internal.git'.freeze GITLAB_PROJECTS_TIMEOUT = Gitlab.config.gitlab_shell.git_timeout - EMPTY_REPOSITORY_CHECKSUM = '0000000000000000000000000000000000000000'.freeze AUTOCRLF_VALUES = { 'true' => true, 'false' => false, 'input' => :input }.freeze RUGGED_KEY = :rugged_list NoRepository = Class.new(StandardError) - InvalidRepository = Class.new(StandardError) - InvalidBlobName = Class.new(StandardError) InvalidRef = Class.new(StandardError) GitError = Class.new(StandardError) DeleteBranchError = Class.new(StandardError) CreateTreeError = Class.new(StandardError) TagExistsError = Class.new(StandardError) - ChecksumError = Class.new(StandardError) class << self def from_gitaly(gitaly_repository, call) @@ -152,13 +146,6 @@ module Gitlab end end - # TODO: Can be removed once https://gitlab.com/gitlab-org/gitaly/merge_requests/738 - # is well and truly out in the wild. - def fsck - msg, status = run_git(%W[--git-dir=#{path} fsck], nice: true) - raise GitError, "Could not fsck repository: #{msg}" unless status.zero? - end - def exists? File.exist?(File.join(path, 'refs')) end @@ -208,10 +195,6 @@ module Gitlab end end - def tag_names - rugged.tags.map(&:name) - end - def tags rugged.references.each("refs/tags/*").map do |ref| message = nil @@ -832,10 +815,6 @@ module Gitlab output end - def run_git_with_timeout(args, timeout, env: {}) - popen_with_timeout([Gitlab.config.git.bin_path, *args], timeout, path, env) - end - def git_env_for_user(user) { 'GIT_COMMITTER_NAME' => user.name, -- GitLab From e69cdae0a96b58771e33513b35aae0a00b61464a Mon Sep 17 00:00:00 2001 From: Bob Van Landuyt Date: Mon, 22 Oct 2018 16:04:08 +0200 Subject: [PATCH 2/2] Add RPC for applying patches to a branch This adds an RPC that takes a branch and a stream of patches generated using `git format-patch`, the patches are applied to the branch using `git am`. When the specified branch does not exist, it will be created from HEAD, if it existed, the patches will be applied to that branch. If the patches could not be applied, a gRPC `FailedPrecondition` is raised. To apply the patches, a random new temporary branch is created from either the specified branch or HEAD. That branch is checked out in a worktree and we attempt to apply the patches. If it succeeds, then we update the specified branch to the new revision. After the attempt, we remove the temporary branch. The response of the RPC is a `BranchUpdate` response containing whether or not a new branch was created, and the new tip of the branch. --- changelogs/unreleased/bvl-apply-patch-rpc.yml | 5 + internal/service/operations/apply_patch.go | 80 ++++ .../service/operations/apply_patch_test.go | 256 ++++++++++ .../testdata/0001-A-commit-from-a-patch.patch | 20 + ...does-not-apply-to-the-feature-branch.patch | 24 + ruby/Gemfile | 2 +- ruby/Gemfile.lock | 7 +- ruby/lib/gitaly_server/operations_service.rb | 22 + ruby/lib/gitlab/git.rb | 1 + ruby/lib/gitlab/git/commit_patches.rb | 22 + ruby/lib/gitlab/git/repository.rb | 33 +- ruby/lib/gitlab/git/user.rb | 8 + .../lib/gitlab/git/commit_patches_spec.rb | 64 +++ ruby/spec/lib/gitlab/git/repository_spec.rb | 36 ++ .../gitaly-proto/go/gitalypb/blob.pb.go | 2 + .../gitaly-proto/go/gitalypb/diff.pb.go | 137 +++--- .../gitaly-proto/go/gitalypb/operations.pb.go | 436 ++++++++++++++---- vendor/vendor.json | 10 +- 18 files changed, 983 insertions(+), 182 deletions(-) create mode 100644 changelogs/unreleased/bvl-apply-patch-rpc.yml create mode 100644 internal/service/operations/apply_patch.go create mode 100644 internal/service/operations/apply_patch_test.go create mode 100644 internal/service/operations/testdata/0001-A-commit-from-a-patch.patch create mode 100644 internal/service/operations/testdata/0001-This-does-not-apply-to-the-feature-branch.patch create mode 100644 ruby/lib/gitlab/git/commit_patches.rb create mode 100644 ruby/spec/lib/gitlab/git/commit_patches_spec.rb diff --git a/changelogs/unreleased/bvl-apply-patch-rpc.yml b/changelogs/unreleased/bvl-apply-patch-rpc.yml new file mode 100644 index 0000000000..56a597a685 --- /dev/null +++ b/changelogs/unreleased/bvl-apply-patch-rpc.yml @@ -0,0 +1,5 @@ +--- +title: Add an endpoint to apply patches to a branch +merge_request: 926 +author: +type: added diff --git a/internal/service/operations/apply_patch.go b/internal/service/operations/apply_patch.go new file mode 100644 index 0000000000..f616904d46 --- /dev/null +++ b/internal/service/operations/apply_patch.go @@ -0,0 +1,80 @@ +package operations + +import ( + "fmt" + + "gitlab.com/gitlab-org/gitaly-proto/go/gitalypb" + "gitlab.com/gitlab-org/gitaly/internal/rubyserver" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func (s *server) UserApplyPatch(stream gitalypb.OperationService_UserApplyPatchServer) error { + firstRequest, err := stream.Recv() + if err != nil { + return err + } + + header := firstRequest.GetHeader() + if header == nil { + return status.Errorf(codes.InvalidArgument, "UserApplyPatch: empty UserApplyPatch_Header") + } + + if err := validateUserApplyPatchHeader(header); err != nil { + return status.Errorf(codes.InvalidArgument, "UserApplyPatch: %v", err) + } + + requestCtx := stream.Context() + rubyClient, err := s.OperationServiceClient(requestCtx) + if err != nil { + return err + } + + clientCtx, err := rubyserver.SetHeaders(requestCtx, header.GetRepository()) + if err != nil { + return err + } + + rubyStream, err := rubyClient.UserApplyPatch(clientCtx) + if err != nil { + return err + } + + if err := rubyStream.Send(firstRequest); err != nil { + return err + } + + err = rubyserver.Proxy(func() error { + request, err := stream.Recv() + if err != nil { + return err + } + return rubyStream.Send(request) + }) + if err != nil { + return err + } + + response, err := rubyStream.CloseAndRecv() + if err != nil { + return err + } + + return stream.SendAndClose(response) +} + +func validateUserApplyPatchHeader(header *gitalypb.UserApplyPatchRequest_Header) error { + if header.GetRepository() == nil { + return fmt.Errorf("missing Repository") + } + + if header.GetUser() == nil { + return fmt.Errorf("missing User") + } + + if header.GetTargetBranch() == nil { + return fmt.Errorf("missing Branch") + } + + return nil +} diff --git a/internal/service/operations/apply_patch_test.go b/internal/service/operations/apply_patch_test.go new file mode 100644 index 0000000000..d5604047ce --- /dev/null +++ b/internal/service/operations/apply_patch_test.go @@ -0,0 +1,256 @@ +package operations_test + +import ( + "fmt" + "io" + "io/ioutil" + "os" + "strings" + "testing" + "testing/iotest" + + "github.com/stretchr/testify/require" + "gitlab.com/gitlab-org/gitaly-proto/go/gitalypb" + "gitlab.com/gitlab-org/gitaly/internal/service/operations" + "gitlab.com/gitlab-org/gitaly/internal/testhelper" + "gitlab.com/gitlab-org/gitaly/streamio" + "google.golang.org/grpc/codes" +) + +func TestSuccessfulUserApplyPatch(t *testing.T) { + server, serverSocketPath := runFullServer(t) + defer server.Stop() + + client, conn := operations.NewOperationClient(t, serverSocketPath) + defer conn.Close() + + testRepo, testRepoPath, cleanupFn := testhelper.NewTestRepo(t) + defer cleanupFn() + + ctx, cancel := testhelper.Context() + defer cancel() + + user := &gitalypb.User{ + Name: []byte("Jane Doe"), + Email: []byte("janedoe@gitlab.com"), + GlId: "user-1", + } + + testPatchReadme := "testdata/0001-A-commit-from-a-patch.patch" + testPatchFeature := "testdata/0001-This-does-not-apply-to-the-feature-branch.patch" + + testCases := []struct { + desc string + branchName string + branchCreated bool + patches []string + commitMessages []string + }{ + { + desc: "a new branch", + branchName: "patched-branch", + branchCreated: true, + patches: []string{testPatchReadme}, + commitMessages: []string{"A commit from a patch"}, + }, + { + desc: "an existing branch", + branchName: "feature", + branchCreated: false, + patches: []string{testPatchReadme}, + commitMessages: []string{"A commit from a patch"}, + }, + { + desc: "multiple patches", + branchName: "branch-with-multiple-patches", + branchCreated: true, + patches: []string{testPatchReadme, testPatchFeature}, + commitMessages: []string{"A commit from a patch", "This does not apply to the `feature` branch"}, + }, + } + + for _, testCase := range testCases { + t.Run(testCase.desc, func(t *testing.T) { + stream, err := client.UserApplyPatch(ctx) + require.NoError(t, err) + + headerRequest := applyPatchHeaderRequest(testRepo, user, testCase.branchName) + require.NoError(t, stream.Send(headerRequest)) + + writer := streamio.NewWriter(func(p []byte) error { + patchRequest := applyPatchPatchesRequest(p) + + return stream.Send(patchRequest) + }) + + for _, patchFileName := range testCase.patches { + func() { + file, err := os.Open(patchFileName) + require.NoError(t, err) + defer file.Close() + + byteReader := iotest.OneByteReader(file) + _, err = io.Copy(writer, byteReader) + require.NoError(t, err) + }() + } + + response, err := stream.CloseAndRecv() + require.NoError(t, err) + + response.GetBranchUpdate() + require.Equal(t, testCase.branchCreated, response.GetBranchUpdate().GetBranchCreated()) + + branches := testhelper.MustRunCommand(t, nil, "git", "-C", testRepoPath, "branch") + require.Contains(t, string(branches), testCase.branchName) + + maxCount := fmt.Sprintf("--max-count=%d", len(testCase.commitMessages)) + + gitArgs := []string{ + "-C", + testRepoPath, + "log", + testCase.branchName, + "--format=%s", + maxCount, + "--reverse", + } + + output := testhelper.MustRunCommand(t, nil, "git", gitArgs...) + commitMessages := strings.Split(string(output), "\n") + // Throw away the last element, as that's going to be + // an empty string. + if len(commitMessages) > 0 { + commitMessages = commitMessages[:len(commitMessages)-1] + } + require.Equal(t, commitMessages, testCase.commitMessages) + }) + } +} + +func TestFailedPatchApplyPatch(t *testing.T) { + server, serverSocketPath := runFullServer(t) + defer server.Stop() + + client, conn := operations.NewOperationClient(t, serverSocketPath) + defer conn.Close() + + testRepo, _, cleanupFn := testhelper.NewTestRepo(t) + defer cleanupFn() + + ctx, cancel := testhelper.Context() + defer cancel() + + user := &gitalypb.User{ + Name: []byte("Jane Doe"), + Email: []byte("janedoe@gitlab.com"), + GlId: "user-1", + } + + testPatch, err := ioutil.ReadFile("testdata/0001-This-does-not-apply-to-the-feature-branch.patch") + require.NoError(t, err) + + stream, err := client.UserApplyPatch(ctx) + require.NoError(t, err) + + headerRequest := applyPatchHeaderRequest(testRepo, user, "feature") + require.NoError(t, stream.Send(headerRequest)) + + patchRequest := applyPatchPatchesRequest(testPatch) + require.NoError(t, stream.Send(patchRequest)) + + _, err = stream.CloseAndRecv() + testhelper.RequireGrpcError(t, err, codes.FailedPrecondition) +} + +func TestFailedValidationUserApplyPatch(t *testing.T) { + server, serverSocketPath := runFullServer(t) + defer server.Stop() + + client, conn := operations.NewOperationClient(t, serverSocketPath) + defer conn.Close() + + testRepo, _, cleanupFn := testhelper.NewTestRepo(t) + defer cleanupFn() + + ctx, cancel := testhelper.Context() + defer cancel() + + user := &gitalypb.User{ + Name: []byte("Jane Doe"), + Email: []byte("janedoe@gitlab.com"), + GlId: "user-1", + } + + testCases := []struct { + desc string + errorMessage string + repo *gitalypb.Repository + user *gitalypb.User + branchName string + }{ + { + desc: "missing Repository", + errorMessage: "missing Repository", + branchName: "new-branch", + user: user, + }, + { + desc: "missing Branch", + errorMessage: "missing Branch", + repo: testRepo, + user: user, + }, + { + desc: "empty BranchName", + errorMessage: "missing Branch", + repo: testRepo, + user: user, + branchName: "", + }, + { + desc: "missing User", + errorMessage: "missing User", + branchName: "new-branch", + repo: testRepo, + }, + } + + for _, testCase := range testCases { + t.Run(testCase.desc, func(t *testing.T) { + stream, err := client.UserApplyPatch(ctx) + require.NoError(t, err) + + request := applyPatchHeaderRequest(testCase.repo, testCase.user, testCase.branchName) + require.NoError(t, stream.Send(request)) + + _, err = stream.CloseAndRecv() + + testhelper.RequireGrpcError(t, err, codes.InvalidArgument) + require.Contains(t, err.Error(), testCase.errorMessage) + }) + } +} + +func applyPatchHeaderRequest(repo *gitalypb.Repository, user *gitalypb.User, branch string) *gitalypb.UserApplyPatchRequest { + header := &gitalypb.UserApplyPatchRequest_Header_{ + Header: &gitalypb.UserApplyPatchRequest_Header{ + Repository: repo, + User: user, + TargetBranch: []byte(branch), + }, + } + return &gitalypb.UserApplyPatchRequest{ + UserApplyPatchRequestPayload: header, + } +} + +func applyPatchPatchesRequest(patches []byte) *gitalypb.UserApplyPatchRequest { + requestPatches := &gitalypb.UserApplyPatchRequest_Patches{ + Patches: patches, + } + + return &gitalypb.UserApplyPatchRequest{ + UserApplyPatchRequestPayload: requestPatches, + } +} diff --git a/internal/service/operations/testdata/0001-A-commit-from-a-patch.patch b/internal/service/operations/testdata/0001-A-commit-from-a-patch.patch new file mode 100644 index 0000000000..88a714c637 --- /dev/null +++ b/internal/service/operations/testdata/0001-A-commit-from-a-patch.patch @@ -0,0 +1,20 @@ +From 3fee0042e610fb3563e4379e316704cb1210f3de Mon Sep 17 00:00:00 2001 +From: Bob Van Landuyt +Date: Thu, 18 Oct 2018 13:40:35 +0200 +Subject: [PATCH] A commit from a patch + +--- + README | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/README b/README +index 3742e48..e40a3b9 100644 +--- a/README ++++ b/README +@@ -1 +1,3 @@ + Sample repo for testing gitlab features ++ ++This was applied in a patch! +-- +2.19.1 + diff --git a/internal/service/operations/testdata/0001-This-does-not-apply-to-the-feature-branch.patch b/internal/service/operations/testdata/0001-This-does-not-apply-to-the-feature-branch.patch new file mode 100644 index 0000000000..1abcb0e1e1 --- /dev/null +++ b/internal/service/operations/testdata/0001-This-does-not-apply-to-the-feature-branch.patch @@ -0,0 +1,24 @@ +From 00c68c2b4f954370ce82a1162bc29c13f524897e Mon Sep 17 00:00:00 2001 +From: Bob Van Landuyt +Date: Mon, 22 Oct 2018 11:05:48 +0200 +Subject: [PATCH] This does not apply to the `feature` branch + +--- + files/ruby/feature.rb | 5 +++++ + 1 file changed, 5 insertions(+) + create mode 100644 files/ruby/feature.rb + +diff --git a/files/ruby/feature.rb b/files/ruby/feature.rb +new file mode 100644 +index 0000000..fef26e4 +--- /dev/null ++++ b/files/ruby/feature.rb +@@ -0,0 +1,5 @@ ++class Feature ++ def bar ++ puts 'foo' ++ end ++end +-- +2.19.1 + diff --git a/ruby/Gemfile b/ruby/Gemfile index 44accc4052..75792782fa 100644 --- a/ruby/Gemfile +++ b/ruby/Gemfile @@ -6,7 +6,7 @@ gem 'bundler', '>= 1.16.5' gem 'rugged', '~> 0.27' gem 'github-linguist', '~> 6.1', require: 'linguist' gem 'gitlab-markup', '~> 1.6.4' -gem 'gitaly-proto', '~> 0.116.0', require: 'gitaly' +gem 'gitaly-proto', '~> 0.121.0', require: 'gitaly' gem 'activesupport', '~> 5.0.2' gem 'rdoc', '~> 4.2' gem 'gitlab-gollum-lib', '~> 4.2', require: false diff --git a/ruby/Gemfile.lock b/ruby/Gemfile.lock index 20c3165155..6b015029bc 100644 --- a/ruby/Gemfile.lock +++ b/ruby/Gemfile.lock @@ -18,9 +18,8 @@ GEM multipart-post (>= 1.2, < 3) gemojione (3.3.0) json - gitaly-proto (0.116.0) - google-protobuf (~> 3.1) - grpc (~> 1.10) + gitaly-proto (0.121.0) + grpc (~> 1.0) github-linguist (6.2.0) charlock_holmes (~> 0.7.6) escape_utils (~> 1.2.0) @@ -117,7 +116,7 @@ DEPENDENCIES bundler (>= 1.16.5) factory_bot faraday (~> 0.12) - gitaly-proto (~> 0.116.0) + gitaly-proto (~> 0.121.0) github-linguist (~> 6.1) gitlab-gollum-lib (~> 4.2) gitlab-gollum-rugged_adapter (~> 0.4.4) diff --git a/ruby/lib/gitaly_server/operations_service.rb b/ruby/lib/gitaly_server/operations_service.rb index 7b5555cc1e..af73d72cf0 100644 --- a/ruby/lib/gitaly_server/operations_service.rb +++ b/ruby/lib/gitaly_server/operations_service.rb @@ -298,6 +298,28 @@ module GitalyServer end end + def user_apply_patch(call) + bridge_exceptions do + stream = call.each_remote_read + first_request = stream.next + + header = first_request.header + user = Gitlab::Git::User.from_gitaly(header.user) + target_branch = header.target_branch + patches = stream.lazy.map(&:patches) + + branch_update = Gitlab::Git::Repository.from_gitaly_with_block(header.repository, call) do |repo| + begin + Gitlab::Git::CommitPatches.new(user, repo, target_branch, patches).commit + rescue Gitlab::Git::PatchError => e + raise GRPC::FailedPrecondition.new(e.message) + end + end + + Gitaly::UserApplyPatchResponse.new(branch_update: branch_update_result(branch_update)) + end + end + private def commit_files_opts(call, header, actions) diff --git a/ruby/lib/gitlab/git.rb b/ruby/lib/gitlab/git.rb index 24ef40cfde..ce7fc4b2ce 100644 --- a/ruby/lib/gitlab/git.rb +++ b/ruby/lib/gitlab/git.rb @@ -61,6 +61,7 @@ module Gitlab OSError = Class.new(BaseError) UnknownRef = Class.new(BaseError) PreReceiveError = Class.new(BaseError) + PatchError = Class.new(BaseError) class << self include Gitlab::EncodingHelper diff --git a/ruby/lib/gitlab/git/commit_patches.rb b/ruby/lib/gitlab/git/commit_patches.rb new file mode 100644 index 0000000000..137fb23430 --- /dev/null +++ b/ruby/lib/gitlab/git/commit_patches.rb @@ -0,0 +1,22 @@ +module Gitlab + module Git + class CommitPatches + attr_reader :user, :repository, :branch_name, :patches + + def initialize(user, repository, branch_name, patches) + @user = user + @branch_name = branch_name + @patches = patches + @repository = repository + end + + def commit + start_point = repository.find_branch(branch_name)&.target || repository.root_ref + + OperationService.new(user, repository).with_branch(branch_name) do + repository.commit_patches(start_point, patches, extra_env: user.git_env) + end + end + end + end +end diff --git a/ruby/lib/gitlab/git/repository.rb b/ruby/lib/gitlab/git/repository.rb index b7fc6ecbe0..801a1ac88c 100644 --- a/ruby/lib/gitlab/git/repository.rb +++ b/ruby/lib/gitlab/git/repository.rb @@ -1,3 +1,5 @@ +require 'securerandom' + module Gitlab module Git # These are monkey patches on top of the vendored version of Repository. @@ -20,6 +22,7 @@ module Gitlab # or things will break! (REBASE_WORKTREE_PREFIX and SQUASH_WORKTREE_PREFIX) REBASE_WORKTREE_PREFIX = 'rebase'.freeze SQUASH_WORKTREE_PREFIX = 'squash'.freeze + AM_WORKTREE_PREFIX = 'am'.freeze GITALY_INTERNAL_URL = 'ssh://gitaly/internal.git'.freeze GITLAB_PROJECTS_TIMEOUT = Gitlab.config.gitlab_shell.git_timeout AUTOCRLF_VALUES = { 'true' => true, 'false' => false, 'input' => :input }.freeze @@ -46,9 +49,11 @@ module Gitlab def from_gitaly_with_block(gitaly_repository, call) repository = from_gitaly(gitaly_repository, call) - yield repository + result = yield repository repository.cleanup + + result end def create(repo_path) @@ -433,7 +438,7 @@ module Gitlab def rebase(user, rebase_id, branch:, branch_sha:, remote_repository:, remote_branch:) rebase_path = worktree_path(REBASE_WORKTREE_PREFIX, rebase_id) - env = git_env_for_user(user) + env = git_env.merge(user.git_env) if remote_repository.is_a?(RemoteRepository) env.merge!(remote_repository.fetch_env) @@ -458,7 +463,7 @@ module Gitlab def squash(user, squash_id, branch:, start_sha:, end_sha:, author:, message:) squash_path = worktree_path(SQUASH_WORKTREE_PREFIX, squash_id) - env = git_env_for_user(user).merge( + env = git_env.merge(user.git_env).merge( 'GIT_AUTHOR_NAME' => author.name, 'GIT_AUTHOR_EMAIL' => author.email ) @@ -488,6 +493,23 @@ module Gitlab end end + def commit_patches(start_point, patches, extra_env: {}) + worktree_path = worktree_path(AM_WORKTREE_PREFIX, SecureRandom.hex) + env = git_env.merge(extra_env) + + with_worktree(worktree_path, start_point, env: env) do + result, status = run_git(%w[am --quiet --3way], chdir: worktree_path) do |stdin| + loop { stdin.write(patches.next) } + end + + raise Gitlab::Git::PatchError, result unless status == 0 + + run_git!( + %w[rev-parse --quiet --verify HEAD], chdir: worktree_path, env: env + ).chomp + end + end + def push_remote_branches(remote_name, branch_names, forced: true) success = @gitlab_projects.push_branches(remote_name, GITLAB_PROJECTS_TIMEOUT, forced, branch_names) @@ -815,11 +837,8 @@ module Gitlab output end - def git_env_for_user(user) + def git_env { - 'GIT_COMMITTER_NAME' => user.name, - 'GIT_COMMITTER_EMAIL' => user.email, - 'GL_ID' => Gitlab::GlId.gl_id(user), 'GL_PROTOCOL' => Gitlab::Git::Hook::GL_PROTOCOL, 'GL_REPOSITORY' => gl_repository } diff --git a/ruby/lib/gitlab/git/user.rb b/ruby/lib/gitlab/git/user.rb index e573cd0e14..41e14dca86 100644 --- a/ruby/lib/gitlab/git/user.rb +++ b/ruby/lib/gitlab/git/user.rb @@ -30,6 +30,14 @@ module Gitlab def to_gitaly Gitaly::User.new(gl_username: username, gl_id: gl_id, name: name.b, email: email.b) end + + def git_env + { + 'GIT_COMMITTER_NAME' => name, + 'GIT_COMMITTER_EMAIL' => email, + 'GL_ID' => Gitlab::GlId.gl_id(self) + } + end end end end diff --git a/ruby/spec/lib/gitlab/git/commit_patches_spec.rb b/ruby/spec/lib/gitlab/git/commit_patches_spec.rb new file mode 100644 index 0000000000..e79cf4331e --- /dev/null +++ b/ruby/spec/lib/gitlab/git/commit_patches_spec.rb @@ -0,0 +1,64 @@ +require 'spec_helper' + +describe Gitlab::Git::CommitPatches do + include TestRepo + + describe "#commit" do + let(:repository) { gitlab_git_from_gitaly(new_mutable_test_repo) } + let(:testdata_dir) { File.join(File.dirname(__FILE__), '../../../../../internal/service/operations/testdata') } + let(:patches) { File.foreach(File.join(testdata_dir, patch_file_name)) } + let(:user) { Gitlab::Git::User.new('jane', 'Jane Doe', 'jane@doe.org', '123') } + + def apply_patches(branch_name) + described_class.new(user, repository, branch_name, patches).commit + end + + context 'when the patch applies' do + let(:patch_file_name) { '0001-A-commit-from-a-patch.patch' } + + it 'creates the branch and applies the patch' do + branch_update = apply_patches('patched_branch') + commit = repository.commit(branch_update.newrev) + + expect(commit.message).to eq("A commit from a patch\n") + expect(branch_update).to be_branch_created + end + + it 'updates the branch if it already existed' do + branch_update = apply_patches('feature') + commit = repository.commit(branch_update.newrev) + + expect(commit.message).to eq("A commit from a patch\n") + expect(branch_update).not_to be_branch_created + end + end + + context 'when the patch does not apply' do + let(:patch_file_name) { '0001-This-does-not-apply-to-the-feature-branch.patch' } + + it 'raises a PatchError' do + expect { apply_patches('feature') }.to raise_error Gitlab::Git::PatchError + end + + it 'does not update the branch' do + expect do + begin + apply_patches('feature') + rescue Gitlab::Git::PatchError => e + e + end + end.not_to(change { repository.find_branch('feature').target }) + end + + it 'does not leave branches dangling' do + expect do + begin + apply_patches('feature') + rescue Gitlab::Git::PatchError => e + e + end + end.not_to(change { repository.branches.size }) + 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 f7464b8377..2b9f77abb1 100644 --- a/ruby/spec/lib/gitlab/git/repository_spec.rb +++ b/ruby/spec/lib/gitlab/git/repository_spec.rb @@ -31,6 +31,12 @@ describe Gitlab::Git::Repository do expect(repository.rugged).to receive(:close) end end + + it 'returns the passed result of the block passed' do + result = described_class.from_gitaly_with_block(test_repo_read_only, call) { 'Hello world' } + + expect(result).to eq('Hello world') + end end describe '#cleanup' do @@ -112,4 +118,34 @@ describe Gitlab::Git::Repository do end end end + + describe "#commit_patches" do + let(:repository) { gitlab_git_from_gitaly(new_mutable_test_repo) } + let(:testdata_dir) { File.join(File.dirname(__FILE__), '../../../../../internal/service/operations/testdata') } + let(:patches) { File.foreach(File.join(testdata_dir, patch_file_name)) } + + def apply_patches(branch_name) + repository.commit_patches(branch_name, patches) + end + + context 'when the patch applies' do + let(:patch_file_name) { '0001-A-commit-from-a-patch.patch' } + + it 'creates a new rev with the patch' do + new_rev = apply_patches(repository.root_ref) + commit = repository.commit(new_rev) + + expect(new_rev).not_to be_nil + expect(commit.message).to eq("A commit from a patch\n") + end + end + + context 'when the patch does not apply' do + let(:patch_file_name) { '0001-This-does-not-apply-to-the-feature-branch.patch' } + + it 'raises a PatchError' do + expect { apply_patches('feature') }.to raise_error Gitlab::Git::PatchError + end + end + end end diff --git a/vendor/gitlab.com/gitlab-org/gitaly-proto/go/gitalypb/blob.pb.go b/vendor/gitlab.com/gitlab-org/gitaly-proto/go/gitalypb/blob.pb.go index 507883ee43..99b6749108 100644 --- a/vendor/gitlab.com/gitlab-org/gitaly-proto/go/gitalypb/blob.pb.go +++ b/vendor/gitlab.com/gitlab-org/gitaly-proto/go/gitalypb/blob.pb.go @@ -135,6 +135,8 @@ It has these top-level messages: UserRebaseResponse UserSquashRequest UserSquashResponse + UserApplyPatchRequest + UserApplyPatchResponse ListNewBlobsRequest ListNewBlobsResponse FindDefaultBranchNameRequest diff --git a/vendor/gitlab.com/gitlab-org/gitaly-proto/go/gitalypb/diff.pb.go b/vendor/gitlab.com/gitlab-org/gitaly-proto/go/gitalypb/diff.pb.go index a4ae94db6d..6d59b34cc0 100644 --- a/vendor/gitlab.com/gitlab-org/gitaly-proto/go/gitalypb/diff.pb.go +++ b/vendor/gitlab.com/gitlab-org/gitaly-proto/go/gitalypb/diff.pb.go @@ -25,15 +25,18 @@ type CommitDiffRequest struct { Paths [][]byte `protobuf:"bytes,5,rep,name=paths,proto3" json:"paths,omitempty"` CollapseDiffs bool `protobuf:"varint,6,opt,name=collapse_diffs,json=collapseDiffs" json:"collapse_diffs,omitempty"` EnforceLimits bool `protobuf:"varint,7,opt,name=enforce_limits,json=enforceLimits" json:"enforce_limits,omitempty"` - MaxFiles int32 `protobuf:"varint,8,opt,name=max_files,json=maxFiles" json:"max_files,omitempty"` - MaxLines int32 `protobuf:"varint,9,opt,name=max_lines,json=maxLines" json:"max_lines,omitempty"` - MaxBytes int32 `protobuf:"varint,10,opt,name=max_bytes,json=maxBytes" json:"max_bytes,omitempty"` - SafeMaxFiles int32 `protobuf:"varint,11,opt,name=safe_max_files,json=safeMaxFiles" json:"safe_max_files,omitempty"` - SafeMaxLines int32 `protobuf:"varint,12,opt,name=safe_max_lines,json=safeMaxLines" json:"safe_max_lines,omitempty"` - SafeMaxBytes int32 `protobuf:"varint,13,opt,name=safe_max_bytes,json=safeMaxBytes" json:"safe_max_bytes,omitempty"` + // These limits are only enforced when enforce_limits == true. + MaxFiles int32 `protobuf:"varint,8,opt,name=max_files,json=maxFiles" json:"max_files,omitempty"` + MaxLines int32 `protobuf:"varint,9,opt,name=max_lines,json=maxLines" json:"max_lines,omitempty"` + MaxBytes int32 `protobuf:"varint,10,opt,name=max_bytes,json=maxBytes" json:"max_bytes,omitempty"` // Limitation of a single diff patch, // patches surpassing this limit are pruned by default. + // If this is 0 you will get back empty patches. MaxPatchBytes int32 `protobuf:"varint,14,opt,name=max_patch_bytes,json=maxPatchBytes" json:"max_patch_bytes,omitempty"` + // These limits are only enforced if collapse_diffs == true. + SafeMaxFiles int32 `protobuf:"varint,11,opt,name=safe_max_files,json=safeMaxFiles" json:"safe_max_files,omitempty"` + SafeMaxLines int32 `protobuf:"varint,12,opt,name=safe_max_lines,json=safeMaxLines" json:"safe_max_lines,omitempty"` + SafeMaxBytes int32 `protobuf:"varint,13,opt,name=safe_max_bytes,json=safeMaxBytes" json:"safe_max_bytes,omitempty"` } func (m *CommitDiffRequest) Reset() { *m = CommitDiffRequest{} } @@ -111,6 +114,13 @@ func (m *CommitDiffRequest) GetMaxBytes() int32 { return 0 } +func (m *CommitDiffRequest) GetMaxPatchBytes() int32 { + if m != nil { + return m.MaxPatchBytes + } + return 0 +} + func (m *CommitDiffRequest) GetSafeMaxFiles() int32 { if m != nil { return m.SafeMaxFiles @@ -132,13 +142,6 @@ func (m *CommitDiffRequest) GetSafeMaxBytes() int32 { return 0 } -func (m *CommitDiffRequest) GetMaxPatchBytes() int32 { - if m != nil { - return m.MaxPatchBytes - } - return 0 -} - // A CommitDiffResponse corresponds to a single changed file in a commit. type CommitDiffResponse struct { FromPath []byte `protobuf:"bytes,1,opt,name=from_path,json=fromPath,proto3" json:"from_path,omitempty"` @@ -1004,58 +1007,58 @@ func init() { proto.RegisterFile("diff.proto", fileDescriptor3) } var fileDescriptor3 = []byte{ // 864 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0x4d, 0x6f, 0xe3, 0x44, - 0x18, 0xc6, 0xcd, 0x47, 0x9d, 0x37, 0x6e, 0xda, 0x4e, 0x51, 0xd7, 0xcd, 0x72, 0x88, 0x2c, 0xb6, - 0x1b, 0x84, 0x54, 0xa1, 0x72, 0xe1, 0x80, 0x90, 0xd8, 0xad, 0x40, 0x5d, 0xb5, 0x62, 0x65, 0x0e, - 0x1c, 0x38, 0x58, 0xd3, 0xcc, 0x38, 0x1e, 0x61, 0x7b, 0xc2, 0xcc, 0xd0, 0xb4, 0x7f, 0x03, 0xf8, - 0x09, 0x48, 0x5c, 0xb8, 0xf3, 0xd7, 0x38, 0xa2, 0x79, 0xc7, 0x5f, 0x69, 0xa3, 0xbd, 0xec, 0x1e, - 0x7a, 0xcb, 0xfb, 0x3c, 0x8f, 0xdf, 0xef, 0x77, 0x5a, 0x00, 0x26, 0xd2, 0xf4, 0x6c, 0xa5, 0xa4, - 0x91, 0x64, 0xb8, 0x14, 0x86, 0xe6, 0xf7, 0xd3, 0x40, 0x67, 0x54, 0x71, 0xe6, 0xd0, 0xe8, 0xaf, - 0x3e, 0x1c, 0xbe, 0x96, 0x45, 0x21, 0xcc, 0x85, 0x48, 0xd3, 0x98, 0xff, 0xfa, 0x1b, 0xd7, 0x86, - 0x9c, 0x03, 0x28, 0xbe, 0x92, 0x5a, 0x18, 0xa9, 0xee, 0x43, 0x6f, 0xe6, 0xcd, 0xc7, 0xe7, 0xe4, - 0xcc, 0x39, 0x38, 0x8b, 0x1b, 0x26, 0xee, 0xa8, 0xc8, 0xa7, 0x30, 0xc9, 0x79, 0x6a, 0x92, 0x05, - 0x7a, 0x4b, 0x04, 0x0b, 0x77, 0x66, 0xde, 0x7c, 0x14, 0x07, 0x16, 0x75, 0x21, 0x2e, 0x19, 0x39, - 0x85, 0x7d, 0x25, 0x96, 0x59, 0x57, 0xd6, 0x43, 0xd9, 0x1e, 0xc2, 0x8d, 0xee, 0x2b, 0x08, 0xc5, - 0xb2, 0x94, 0x8a, 0x27, 0xeb, 0x4c, 0x18, 0xae, 0x57, 0x74, 0xc1, 0x93, 0x45, 0x46, 0xcb, 0x25, - 0x0f, 0xfb, 0x33, 0x6f, 0xee, 0xc7, 0xc7, 0x8e, 0xff, 0xa9, 0xa1, 0x5f, 0x23, 0x4b, 0x3e, 0x86, - 0xc1, 0x8a, 0x9a, 0x4c, 0x87, 0x83, 0x59, 0x6f, 0x1e, 0xc4, 0xce, 0x20, 0x2f, 0x60, 0xb2, 0x90, - 0x79, 0x4e, 0x57, 0x9a, 0x27, 0xb6, 0x29, 0x3a, 0x1c, 0xa2, 0x97, 0xbd, 0x1a, 0xb5, 0xe5, 0xa3, - 0x8c, 0x97, 0xa9, 0x54, 0x0b, 0x9e, 0xe4, 0xa2, 0x10, 0x46, 0x87, 0xbb, 0x4e, 0x56, 0xa1, 0x57, - 0x08, 0x92, 0xe7, 0x30, 0x2a, 0xe8, 0x5d, 0x92, 0x8a, 0x9c, 0xeb, 0xd0, 0x9f, 0x79, 0xf3, 0x41, - 0xec, 0x17, 0xf4, 0xee, 0x3b, 0x6b, 0xd7, 0x64, 0x2e, 0x4a, 0xae, 0xc3, 0x51, 0x43, 0x5e, 0x59, - 0xbb, 0x26, 0x6f, 0xee, 0x0d, 0xd7, 0x21, 0x34, 0xe4, 0x2b, 0x6b, 0xdb, 0x16, 0x6a, 0x9a, 0xf2, - 0xa4, 0xf5, 0x3d, 0x46, 0x45, 0x60, 0xd1, 0xeb, 0xda, 0x7f, 0x57, 0xe5, 0x82, 0x04, 0x1b, 0x2a, - 0x17, 0xa8, 0xab, 0x72, 0xd1, 0xf6, 0x36, 0x54, 0x2e, 0xe2, 0x29, 0xec, 0x5b, 0xc1, 0x8a, 0x9a, - 0x45, 0x56, 0xc9, 0x26, 0x28, 0xdb, 0x2b, 0xe8, 0xdd, 0x5b, 0x8b, 0xa2, 0x2e, 0xfa, 0x6f, 0x07, - 0x48, 0x77, 0x4d, 0xf4, 0x4a, 0x96, 0x9a, 0xdb, 0x6a, 0x52, 0x25, 0x0b, 0xfb, 0x7d, 0x86, 0x6b, - 0x12, 0xc4, 0xbe, 0x05, 0xde, 0x52, 0x93, 0x91, 0x67, 0xb0, 0x6b, 0xa4, 0xa3, 0x76, 0x90, 0x1a, - 0x1a, 0x59, 0x13, 0xf8, 0x55, 0x33, 0xfb, 0xa1, 0x35, 0x2f, 0x19, 0x39, 0x82, 0x81, 0x91, 0x16, - 0xee, 0x23, 0xdc, 0x37, 0xf2, 0x92, 0x91, 0x13, 0xf0, 0x65, 0xce, 0x92, 0x42, 0x32, 0x1e, 0x0e, - 0x30, 0xb7, 0x5d, 0x99, 0xb3, 0x6b, 0xc9, 0xb8, 0xa5, 0x4a, 0xbe, 0x76, 0xd4, 0xd0, 0x51, 0x25, - 0x5f, 0x23, 0x75, 0x0c, 0xc3, 0x1b, 0x51, 0x52, 0x75, 0x5f, 0x0d, 0xb0, 0xb2, 0x6c, 0x5b, 0x14, - 0x5d, 0x57, 0x05, 0x33, 0x6a, 0x28, 0x4e, 0x28, 0x88, 0x03, 0x45, 0xd7, 0x58, 0xef, 0x05, 0x35, - 0x94, 0xcc, 0x20, 0xe0, 0x25, 0x4b, 0x64, 0xea, 0x84, 0x38, 0x28, 0x3f, 0x06, 0x5e, 0xb2, 0x1f, - 0x52, 0x54, 0x91, 0x97, 0xb0, 0x2f, 0x6f, 0xb9, 0x4a, 0x73, 0xb9, 0x4e, 0x0a, 0xaa, 0x7e, 0xe1, - 0x0a, 0x67, 0xe5, 0xc7, 0x93, 0x1a, 0xbe, 0x46, 0x94, 0x7c, 0x02, 0xa3, 0x7a, 0xc5, 0x18, 0x0e, - 0xca, 0x8f, 0x5b, 0xc0, 0x36, 0xd0, 0x48, 0x99, 0xe4, 0x54, 0x2d, 0x39, 0x0e, 0xc8, 0x8f, 0x7d, - 0x23, 0xe5, 0x95, 0xb5, 0xdf, 0xf4, 0x7d, 0xff, 0x60, 0x14, 0xfd, 0xe3, 0x35, 0xad, 0xe7, 0xb9, - 0xa1, 0x4f, 0xe7, 0x44, 0x9b, 0x43, 0xeb, 0x77, 0x0e, 0x2d, 0xfa, 0xdb, 0x83, 0x71, 0x27, 0xdd, - 0xa7, 0xbb, 0x22, 0xd1, 0x2b, 0x38, 0xda, 0xe8, 0x6b, 0xb5, 0xd3, 0x9f, 0xc3, 0x90, 0x59, 0x40, - 0x87, 0xde, 0xac, 0x37, 0x1f, 0x9f, 0x1f, 0xd5, 0x4d, 0xed, 0x8a, 0x2b, 0x49, 0xc4, 0xea, 0xd9, - 0xe0, 0x56, 0xbc, 0xcf, 0x6c, 0xa6, 0xe0, 0x2b, 0x7e, 0x2b, 0xb4, 0x90, 0x65, 0xd5, 0x8b, 0xc6, - 0x8e, 0x3e, 0xab, 0x33, 0xad, 0xa2, 0x54, 0x99, 0x12, 0xe8, 0xe3, 0x06, 0xbb, 0xae, 0xe2, 0xef, - 0xe8, 0x77, 0x0f, 0x26, 0x31, 0x5d, 0x3f, 0xa9, 0xc7, 0x3c, 0x7a, 0x01, 0xfb, 0x4d, 0x4e, 0xef, - 0xc8, 0xfd, 0x0f, 0x0f, 0x75, 0xef, 0xdd, 0xca, 0x0f, 0x9b, 0xfc, 0x29, 0x1c, 0xb4, 0x49, 0xbd, - 0x23, 0xfb, 0x3f, 0x3d, 0x38, 0xb0, 0x25, 0xfe, 0x68, 0xa8, 0xd1, 0x4f, 0x27, 0xfd, 0x9f, 0x61, - 0xd4, 0x64, 0x65, 0xf3, 0xee, 0xdc, 0x21, 0xfe, 0xb6, 0x0f, 0x14, 0x65, 0x4c, 0x18, 0x21, 0x4b, - 0x8d, 0x91, 0x06, 0x71, 0x0b, 0x58, 0x96, 0xf1, 0x9c, 0x3b, 0xb6, 0xe7, 0xd8, 0x06, 0x88, 0xbe, - 0x86, 0xc3, 0x4e, 0xc9, 0x55, 0x73, 0x5e, 0xc2, 0x40, 0x5b, 0xa0, 0xba, 0x9f, 0xc3, 0xba, 0xdc, - 0x56, 0xe9, 0xf8, 0xf3, 0x7f, 0x7b, 0x30, 0x46, 0x90, 0xab, 0x5b, 0xb1, 0xe0, 0xe4, 0x7b, 0x80, - 0xf6, 0x6f, 0x0c, 0x39, 0x79, 0x70, 0x77, 0xed, 0x46, 0x4f, 0xa7, 0xdb, 0x28, 0x17, 0x3d, 0xfa, - 0xe8, 0x0b, 0x8f, 0xbc, 0xd9, 0x7c, 0x82, 0xa6, 0xdb, 0x2e, 0xb8, 0x72, 0xf5, 0x7c, 0x2b, 0xb7, - 0xcd, 0x97, 0x7b, 0xf7, 0x1f, 0xf8, 0xea, 0xee, 0xea, 0x43, 0x5f, 0x1b, 0x2b, 0x83, 0xbe, 0xbe, - 0x81, 0xdd, 0xea, 0x0e, 0xc8, 0x71, 0xb3, 0x04, 0x1b, 0xc7, 0x3a, 0x7d, 0xf6, 0x08, 0xef, 0x7c, - 0xff, 0x2d, 0xf8, 0xf5, 0x2a, 0x92, 0xae, 0x70, 0x23, 0x8b, 0xf0, 0x31, 0xd1, 0x71, 0x71, 0xd1, - 0x5d, 0x87, 0xf0, 0xf1, 0x68, 0x2a, 0x27, 0x27, 0x5b, 0x98, 0xd6, 0xcb, 0xcd, 0x10, 0xff, 0x79, - 0xfc, 0xf2, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4e, 0x5a, 0xc7, 0xa7, 0x60, 0x0a, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0xcb, 0x6e, 0x23, 0x45, + 0x14, 0xa5, 0xe3, 0x47, 0xda, 0xd7, 0x1d, 0x27, 0xa9, 0xa0, 0x4c, 0xc7, 0xc3, 0xc2, 0x6a, 0xcd, + 0xc3, 0x08, 0x29, 0x42, 0x61, 0xc3, 0x02, 0x21, 0x31, 0x13, 0x81, 0x32, 0x4a, 0xc4, 0xa8, 0x59, + 0xb0, 0x60, 0xd1, 0xaa, 0xb8, 0xaa, 0xdd, 0x25, 0xba, 0xbb, 0x4c, 0x55, 0x11, 0x27, 0xbf, 0x01, + 0x7c, 0x02, 0x12, 0x1b, 0xf6, 0xfc, 0x1a, 0x4b, 0x54, 0xb7, 0xfa, 0xe5, 0xc4, 0x9a, 0x4d, 0x58, + 0x64, 0xe7, 0x7b, 0xce, 0xe9, 0x5b, 0xa7, 0xee, 0xa3, 0x12, 0x00, 0x26, 0xd2, 0xf4, 0x74, 0xa5, + 0xa4, 0x91, 0x64, 0xb8, 0x14, 0x86, 0xe6, 0x77, 0xd3, 0x40, 0x67, 0x54, 0x71, 0xe6, 0xd0, 0xe8, + 0xcf, 0x3e, 0x1c, 0xbe, 0x95, 0x45, 0x21, 0xcc, 0xb9, 0x48, 0xd3, 0x98, 0xff, 0xf2, 0x2b, 0xd7, + 0x86, 0x9c, 0x01, 0x28, 0xbe, 0x92, 0x5a, 0x18, 0xa9, 0xee, 0x42, 0x6f, 0xe6, 0xcd, 0xc7, 0x67, + 0xe4, 0xd4, 0x25, 0x38, 0x8d, 0x1b, 0x26, 0xee, 0xa8, 0xc8, 0x0b, 0x98, 0xe4, 0x3c, 0x35, 0xc9, + 0x02, 0xb3, 0x25, 0x82, 0x85, 0x3b, 0x33, 0x6f, 0x3e, 0x8a, 0x03, 0x8b, 0xba, 0x23, 0x2e, 0x18, + 0x79, 0x05, 0xfb, 0x4a, 0x2c, 0xb3, 0xae, 0xac, 0x87, 0xb2, 0x3d, 0x84, 0x1b, 0xdd, 0x97, 0x10, + 0x8a, 0x65, 0x29, 0x15, 0x4f, 0xd6, 0x99, 0x30, 0x5c, 0xaf, 0xe8, 0x82, 0x27, 0x8b, 0x8c, 0x96, + 0x4b, 0x1e, 0xf6, 0x67, 0xde, 0xdc, 0x8f, 0x8f, 0x1d, 0xff, 0x63, 0x43, 0xbf, 0x45, 0x96, 0x7c, + 0x0c, 0x83, 0x15, 0x35, 0x99, 0x0e, 0x07, 0xb3, 0xde, 0x3c, 0x88, 0x5d, 0x40, 0x5e, 0xc2, 0x64, + 0x21, 0xf3, 0x9c, 0xae, 0x34, 0x4f, 0x6c, 0x51, 0x74, 0x38, 0xc4, 0x2c, 0x7b, 0x35, 0x6a, 0xaf, + 0x8f, 0x32, 0x5e, 0xa6, 0x52, 0x2d, 0x78, 0x92, 0x8b, 0x42, 0x18, 0x1d, 0xee, 0x3a, 0x59, 0x85, + 0x5e, 0x22, 0x48, 0x9e, 0xc3, 0xa8, 0xa0, 0xb7, 0x49, 0x2a, 0x72, 0xae, 0x43, 0x7f, 0xe6, 0xcd, + 0x07, 0xb1, 0x5f, 0xd0, 0xdb, 0x6f, 0x6d, 0x5c, 0x93, 0xb9, 0x28, 0xb9, 0x0e, 0x47, 0x0d, 0x79, + 0x69, 0xe3, 0x9a, 0xbc, 0xbe, 0x33, 0x5c, 0x87, 0xd0, 0x90, 0x6f, 0x6c, 0x6c, 0x8b, 0x63, 0xc9, + 0x15, 0x35, 0x8b, 0xac, 0x92, 0x4c, 0x50, 0xb2, 0x57, 0xd0, 0xdb, 0xf7, 0x16, 0x75, 0xba, 0x17, + 0x30, 0xd1, 0x34, 0xe5, 0x49, 0xeb, 0x61, 0x8c, 0xb2, 0xc0, 0xa2, 0x57, 0xb5, 0x8f, 0xae, 0xca, + 0x99, 0x09, 0x36, 0x54, 0xce, 0x50, 0x57, 0xe5, 0x8e, 0xdc, 0xdb, 0x50, 0xe1, 0x89, 0xd1, 0xbf, + 0x3b, 0x40, 0xba, 0x63, 0xa2, 0x57, 0xb2, 0xd4, 0xdc, 0xde, 0x26, 0x55, 0xb2, 0xb0, 0x8e, 0x33, + 0x1c, 0x93, 0x20, 0xf6, 0x2d, 0xf0, 0x9e, 0x9a, 0x8c, 0x3c, 0x83, 0x5d, 0x23, 0x1d, 0xb5, 0x83, + 0xd4, 0xd0, 0xc8, 0x9a, 0xc0, 0xaf, 0x9a, 0xde, 0x0f, 0x6d, 0x78, 0xc1, 0xc8, 0x11, 0x0c, 0x8c, + 0xb4, 0x70, 0x1f, 0xe1, 0xbe, 0x91, 0x17, 0x8c, 0x9c, 0x80, 0x2f, 0x73, 0x96, 0x14, 0x92, 0xf1, + 0x70, 0x80, 0xd6, 0x76, 0x65, 0xce, 0xae, 0x24, 0xe3, 0x96, 0x2a, 0xf9, 0xda, 0x51, 0x43, 0x47, + 0x95, 0x7c, 0x8d, 0xd4, 0x31, 0x0c, 0xaf, 0x45, 0x49, 0xd5, 0x5d, 0xd5, 0xc0, 0x2a, 0xb2, 0xd7, + 0x55, 0x74, 0x5d, 0x95, 0x98, 0x51, 0x43, 0xb1, 0x43, 0x41, 0x1c, 0x28, 0xba, 0xc6, 0x0a, 0x9f, + 0x53, 0x43, 0xc9, 0x0c, 0x02, 0x5e, 0xb2, 0x44, 0xa6, 0x4e, 0x88, 0x8d, 0xf2, 0x63, 0xe0, 0x25, + 0xfb, 0x3e, 0x45, 0x15, 0x79, 0x0d, 0xfb, 0xf2, 0x86, 0xab, 0x34, 0x97, 0xeb, 0xa4, 0xa0, 0xea, + 0x67, 0xae, 0xb0, 0x07, 0x7e, 0x3c, 0xa9, 0xe1, 0x2b, 0x44, 0xc9, 0x27, 0x30, 0xaa, 0x47, 0x8c, + 0x61, 0x03, 0xfc, 0xb8, 0x05, 0x6c, 0x01, 0x8d, 0x94, 0x49, 0x4e, 0xd5, 0x92, 0x63, 0xe1, 0xfd, + 0xd8, 0x37, 0x52, 0x5e, 0xda, 0xf8, 0x5d, 0xdf, 0xf7, 0x0f, 0x46, 0xd1, 0xdf, 0x5e, 0x53, 0x7a, + 0x9e, 0x1b, 0xfa, 0x74, 0x56, 0xb4, 0x59, 0xb4, 0x7e, 0x67, 0xd1, 0xa2, 0xbf, 0x3c, 0x18, 0x77, + 0xec, 0x3e, 0xdd, 0x11, 0x89, 0xde, 0xc0, 0xd1, 0x46, 0x5d, 0xab, 0x99, 0xfe, 0x0c, 0x86, 0xcc, + 0x02, 0x3a, 0xf4, 0x66, 0xbd, 0xf9, 0xf8, 0xec, 0xa8, 0x2e, 0x6a, 0x57, 0x5c, 0x49, 0x22, 0x56, + 0xf7, 0x06, 0xa7, 0xe2, 0x31, 0xbd, 0x99, 0x82, 0xaf, 0xf8, 0x8d, 0xd0, 0x42, 0x96, 0x55, 0x2d, + 0x9a, 0x38, 0xfa, 0xb4, 0x76, 0x5a, 0x9d, 0x52, 0x39, 0x25, 0xd0, 0xc7, 0x09, 0x76, 0x55, 0xc5, + 0xdf, 0xd1, 0x6f, 0x1e, 0x4c, 0x62, 0xba, 0x7e, 0x52, 0x8f, 0x79, 0xf4, 0x12, 0xf6, 0x1b, 0x4f, + 0x1f, 0xf0, 0xfe, 0xbb, 0x87, 0xba, 0x47, 0x97, 0xf2, 0xff, 0x35, 0xff, 0x0a, 0x0e, 0x5a, 0x53, + 0x1f, 0x70, 0xff, 0x87, 0x07, 0x07, 0xf6, 0x8a, 0x3f, 0x18, 0x6a, 0xf4, 0xd3, 0xb1, 0xff, 0x13, + 0x8c, 0x1a, 0x57, 0xd6, 0x77, 0x67, 0x0f, 0xf1, 0xb7, 0x7d, 0xa0, 0x28, 0x63, 0xc2, 0x08, 0x59, + 0x6a, 0x3c, 0x69, 0x10, 0xb7, 0x80, 0x65, 0x19, 0xcf, 0xb9, 0x63, 0x7b, 0x8e, 0x6d, 0x80, 0xe8, + 0x2b, 0x38, 0xec, 0x5c, 0xb9, 0x2a, 0xce, 0x6b, 0x18, 0x68, 0x0b, 0x54, 0xfb, 0x73, 0x58, 0x5f, + 0xb7, 0x55, 0x3a, 0xfe, 0xec, 0x9f, 0x1e, 0x8c, 0x11, 0xe4, 0xea, 0x46, 0x2c, 0x38, 0xf9, 0x0e, + 0xa0, 0xfd, 0x1b, 0x43, 0x4e, 0xee, 0xed, 0x5d, 0x3b, 0xd1, 0xd3, 0xe9, 0x36, 0xca, 0x9d, 0x1e, + 0x7d, 0xf4, 0xb9, 0x47, 0xde, 0x6d, 0x3e, 0x41, 0xd3, 0x6d, 0x1b, 0x5c, 0xa5, 0x7a, 0xbe, 0x95, + 0xdb, 0x96, 0xcb, 0xbd, 0xfb, 0xf7, 0x72, 0x75, 0x67, 0xf5, 0x7e, 0xae, 0x8d, 0x91, 0xc1, 0x5c, + 0x5f, 0xc3, 0x6e, 0xb5, 0x07, 0xe4, 0xb8, 0x19, 0x82, 0x8d, 0x65, 0x9d, 0x3e, 0x7b, 0x80, 0x77, + 0xbe, 0xff, 0x06, 0xfc, 0x7a, 0x14, 0x49, 0x57, 0xb8, 0xe1, 0x22, 0x7c, 0x48, 0x74, 0x52, 0x9c, + 0x77, 0xc7, 0x21, 0x7c, 0xd8, 0x9a, 0x2a, 0xc9, 0xc9, 0x16, 0xa6, 0xcd, 0x72, 0x3d, 0xc4, 0x7f, + 0x1e, 0xbf, 0xf8, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xbb, 0xf5, 0x8b, 0xe3, 0x60, 0x0a, 0x00, 0x00, } diff --git a/vendor/gitlab.com/gitlab-org/gitaly-proto/go/gitalypb/operations.pb.go b/vendor/gitlab.com/gitlab-org/gitaly-proto/go/gitalypb/operations.pb.go index 9890491d09..7c78f83ea5 100644 --- a/vendor/gitlab.com/gitlab-org/gitaly-proto/go/gitalypb/operations.pb.go +++ b/vendor/gitlab.com/gitlab-org/gitaly-proto/go/gitalypb/operations.pb.go @@ -1338,6 +1338,171 @@ func (m *UserSquashResponse) GetGitError() string { return "" } +type UserApplyPatchRequest struct { + // Types that are valid to be assigned to UserApplyPatchRequestPayload: + // *UserApplyPatchRequest_Header_ + // *UserApplyPatchRequest_Patches + UserApplyPatchRequestPayload isUserApplyPatchRequest_UserApplyPatchRequestPayload `protobuf_oneof:"user_apply_patch_request_payload"` +} + +func (m *UserApplyPatchRequest) Reset() { *m = UserApplyPatchRequest{} } +func (m *UserApplyPatchRequest) String() string { return proto.CompactTextString(m) } +func (*UserApplyPatchRequest) ProtoMessage() {} +func (*UserApplyPatchRequest) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{28} } + +type isUserApplyPatchRequest_UserApplyPatchRequestPayload interface{ isUserApplyPatchRequest_UserApplyPatchRequestPayload() } + +type UserApplyPatchRequest_Header_ struct { + Header *UserApplyPatchRequest_Header `protobuf:"bytes,1,opt,name=header,oneof"` +} +type UserApplyPatchRequest_Patches struct { + Patches []byte `protobuf:"bytes,2,opt,name=patches,proto3,oneof"` +} + +func (*UserApplyPatchRequest_Header_) isUserApplyPatchRequest_UserApplyPatchRequestPayload() {} +func (*UserApplyPatchRequest_Patches) isUserApplyPatchRequest_UserApplyPatchRequestPayload() {} + +func (m *UserApplyPatchRequest) GetUserApplyPatchRequestPayload() isUserApplyPatchRequest_UserApplyPatchRequestPayload { + if m != nil { + return m.UserApplyPatchRequestPayload + } + return nil +} + +func (m *UserApplyPatchRequest) GetHeader() *UserApplyPatchRequest_Header { + if x, ok := m.GetUserApplyPatchRequestPayload().(*UserApplyPatchRequest_Header_); ok { + return x.Header + } + return nil +} + +func (m *UserApplyPatchRequest) GetPatches() []byte { + if x, ok := m.GetUserApplyPatchRequestPayload().(*UserApplyPatchRequest_Patches); ok { + return x.Patches + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*UserApplyPatchRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _UserApplyPatchRequest_OneofMarshaler, _UserApplyPatchRequest_OneofUnmarshaler, _UserApplyPatchRequest_OneofSizer, []interface{}{ + (*UserApplyPatchRequest_Header_)(nil), + (*UserApplyPatchRequest_Patches)(nil), + } +} + +func _UserApplyPatchRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*UserApplyPatchRequest) + // user_apply_patch_request_payload + switch x := m.UserApplyPatchRequestPayload.(type) { + case *UserApplyPatchRequest_Header_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Header); err != nil { + return err + } + case *UserApplyPatchRequest_Patches: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeRawBytes(x.Patches) + case nil: + default: + return fmt.Errorf("UserApplyPatchRequest.UserApplyPatchRequestPayload has unexpected type %T", x) + } + return nil +} + +func _UserApplyPatchRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*UserApplyPatchRequest) + switch tag { + case 1: // user_apply_patch_request_payload.header + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(UserApplyPatchRequest_Header) + err := b.DecodeMessage(msg) + m.UserApplyPatchRequestPayload = &UserApplyPatchRequest_Header_{msg} + return true, err + case 2: // user_apply_patch_request_payload.patches + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.UserApplyPatchRequestPayload = &UserApplyPatchRequest_Patches{x} + return true, err + default: + return false, nil + } +} + +func _UserApplyPatchRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*UserApplyPatchRequest) + // user_apply_patch_request_payload + switch x := m.UserApplyPatchRequestPayload.(type) { + case *UserApplyPatchRequest_Header_: + s := proto.Size(x.Header) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *UserApplyPatchRequest_Patches: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Patches))) + n += len(x.Patches) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type UserApplyPatchRequest_Header struct { + Repository *Repository `protobuf:"bytes,1,opt,name=repository" json:"repository,omitempty"` + User *User `protobuf:"bytes,2,opt,name=user" json:"user,omitempty"` + TargetBranch []byte `protobuf:"bytes,3,opt,name=target_branch,json=targetBranch,proto3" json:"target_branch,omitempty"` +} + +func (m *UserApplyPatchRequest_Header) Reset() { *m = UserApplyPatchRequest_Header{} } +func (m *UserApplyPatchRequest_Header) String() string { return proto.CompactTextString(m) } +func (*UserApplyPatchRequest_Header) ProtoMessage() {} +func (*UserApplyPatchRequest_Header) Descriptor() ([]byte, []int) { + return fileDescriptor6, []int{28, 0} +} + +func (m *UserApplyPatchRequest_Header) GetRepository() *Repository { + if m != nil { + return m.Repository + } + return nil +} + +func (m *UserApplyPatchRequest_Header) GetUser() *User { + if m != nil { + return m.User + } + return nil +} + +func (m *UserApplyPatchRequest_Header) GetTargetBranch() []byte { + if m != nil { + return m.TargetBranch + } + return nil +} + +type UserApplyPatchResponse struct { + BranchUpdate *OperationBranchUpdate `protobuf:"bytes,1,opt,name=branch_update,json=branchUpdate" json:"branch_update,omitempty"` +} + +func (m *UserApplyPatchResponse) Reset() { *m = UserApplyPatchResponse{} } +func (m *UserApplyPatchResponse) String() string { return proto.CompactTextString(m) } +func (*UserApplyPatchResponse) ProtoMessage() {} +func (*UserApplyPatchResponse) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{29} } + +func (m *UserApplyPatchResponse) GetBranchUpdate() *OperationBranchUpdate { + if m != nil { + return m.BranchUpdate + } + return nil +} + func init() { proto.RegisterType((*UserCreateBranchRequest)(nil), "gitaly.UserCreateBranchRequest") proto.RegisterType((*UserCreateBranchResponse)(nil), "gitaly.UserCreateBranchResponse") @@ -1367,6 +1532,9 @@ func init() { proto.RegisterType((*UserRebaseResponse)(nil), "gitaly.UserRebaseResponse") proto.RegisterType((*UserSquashRequest)(nil), "gitaly.UserSquashRequest") proto.RegisterType((*UserSquashResponse)(nil), "gitaly.UserSquashResponse") + proto.RegisterType((*UserApplyPatchRequest)(nil), "gitaly.UserApplyPatchRequest") + proto.RegisterType((*UserApplyPatchRequest_Header)(nil), "gitaly.UserApplyPatchRequest.Header") + proto.RegisterType((*UserApplyPatchResponse)(nil), "gitaly.UserApplyPatchResponse") proto.RegisterEnum("gitaly.UserCommitFilesActionHeader_ActionType", UserCommitFilesActionHeader_ActionType_name, UserCommitFilesActionHeader_ActionType_value) } @@ -1393,6 +1561,7 @@ type OperationServiceClient interface { UserCommitFiles(ctx context.Context, opts ...grpc.CallOption) (OperationService_UserCommitFilesClient, error) UserRebase(ctx context.Context, in *UserRebaseRequest, opts ...grpc.CallOption) (*UserRebaseResponse, error) UserSquash(ctx context.Context, in *UserSquashRequest, opts ...grpc.CallOption) (*UserSquashResponse, error) + UserApplyPatch(ctx context.Context, opts ...grpc.CallOption) (OperationService_UserApplyPatchClient, error) } type operationServiceClient struct { @@ -1558,6 +1727,40 @@ func (c *operationServiceClient) UserSquash(ctx context.Context, in *UserSquashR return out, nil } +func (c *operationServiceClient) UserApplyPatch(ctx context.Context, opts ...grpc.CallOption) (OperationService_UserApplyPatchClient, error) { + stream, err := grpc.NewClientStream(ctx, &_OperationService_serviceDesc.Streams[2], c.cc, "/gitaly.OperationService/UserApplyPatch", opts...) + if err != nil { + return nil, err + } + x := &operationServiceUserApplyPatchClient{stream} + return x, nil +} + +type OperationService_UserApplyPatchClient interface { + Send(*UserApplyPatchRequest) error + CloseAndRecv() (*UserApplyPatchResponse, error) + grpc.ClientStream +} + +type operationServiceUserApplyPatchClient struct { + grpc.ClientStream +} + +func (x *operationServiceUserApplyPatchClient) Send(m *UserApplyPatchRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *operationServiceUserApplyPatchClient) CloseAndRecv() (*UserApplyPatchResponse, error) { + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + m := new(UserApplyPatchResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + // Server API for OperationService service type OperationServiceServer interface { @@ -1573,6 +1776,7 @@ type OperationServiceServer interface { UserCommitFiles(OperationService_UserCommitFilesServer) error UserRebase(context.Context, *UserRebaseRequest) (*UserRebaseResponse, error) UserSquash(context.Context, *UserSquashRequest) (*UserSquashResponse, error) + UserApplyPatch(OperationService_UserApplyPatchServer) error } func RegisterOperationServiceServer(s *grpc.Server, srv OperationServiceServer) { @@ -1811,6 +2015,32 @@ func _OperationService_UserSquash_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _OperationService_UserApplyPatch_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(OperationServiceServer).UserApplyPatch(&operationServiceUserApplyPatchServer{stream}) +} + +type OperationService_UserApplyPatchServer interface { + SendAndClose(*UserApplyPatchResponse) error + Recv() (*UserApplyPatchRequest, error) + grpc.ServerStream +} + +type operationServiceUserApplyPatchServer struct { + grpc.ServerStream +} + +func (x *operationServiceUserApplyPatchServer) SendAndClose(m *UserApplyPatchResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *operationServiceUserApplyPatchServer) Recv() (*UserApplyPatchRequest, error) { + m := new(UserApplyPatchRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + var _OperationService_serviceDesc = grpc.ServiceDesc{ ServiceName: "gitaly.OperationService", HandlerType: (*OperationServiceServer)(nil), @@ -1868,6 +2098,11 @@ var _OperationService_serviceDesc = grpc.ServiceDesc{ Handler: _OperationService_UserCommitFiles_Handler, ClientStreams: true, }, + { + StreamName: "UserApplyPatch", + Handler: _OperationService_UserApplyPatch_Handler, + ClientStreams: true, + }, }, Metadata: "operations.proto", } @@ -1875,102 +2110,107 @@ var _OperationService_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("operations.proto", fileDescriptor6) } var fileDescriptor6 = []byte{ - // 1545 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcd, 0x6f, 0x1b, 0xd5, - 0x16, 0xf7, 0xd8, 0xce, 0xd8, 0x39, 0x71, 0x1c, 0xe7, 0xf6, 0xcb, 0x75, 0x9b, 0x26, 0x9d, 0xb6, - 0xef, 0xb5, 0xd5, 0x53, 0xf4, 0x94, 0xf7, 0x04, 0xab, 0x82, 0x9a, 0xc4, 0x21, 0x05, 0xd2, 0x86, - 0x69, 0x52, 0xd8, 0x8d, 0x6e, 0xed, 0x8b, 0x3d, 0xc2, 0xf6, 0x4c, 0xef, 0x8c, 0x43, 0x83, 0x10, - 0x3b, 0x60, 0xcb, 0x8a, 0x35, 0x88, 0x1d, 0x62, 0xc3, 0x86, 0x05, 0x0b, 0xc4, 0x9a, 0x15, 0x52, - 0x17, 0xfc, 0x03, 0xfc, 0x21, 0xe8, 0xde, 0x73, 0xc6, 0x9e, 0x19, 0x8f, 0xa3, 0xb4, 0x24, 0xa2, - 0x42, 0xec, 0x3c, 0xbf, 0x73, 0xe6, 0xcc, 0x39, 0xbf, 0xf3, 0x71, 0x3f, 0x0c, 0x35, 0xcf, 0x17, - 0x92, 0x87, 0xae, 0x37, 0x08, 0x56, 0x7d, 0xe9, 0x85, 0x1e, 0x33, 0x3b, 0x6e, 0xc8, 0x7b, 0x87, - 0x8d, 0x4a, 0xd0, 0xe5, 0x52, 0xb4, 0x11, 0xb5, 0xbe, 0x37, 0xe0, 0xc2, 0x7e, 0x20, 0xe4, 0x86, - 0x14, 0x3c, 0x14, 0xeb, 0x92, 0x0f, 0x5a, 0x5d, 0x5b, 0x3c, 0x19, 0x8a, 0x20, 0x64, 0x6b, 0x00, - 0x52, 0xf8, 0x5e, 0xe0, 0x86, 0x9e, 0x3c, 0xac, 0x1b, 0x2b, 0xc6, 0xcd, 0xb9, 0x35, 0xb6, 0x8a, - 0x66, 0x56, 0xed, 0x91, 0xc4, 0x8e, 0x69, 0xb1, 0x65, 0x98, 0x7b, 0xac, 0x8d, 0x38, 0x03, 0xde, - 0x17, 0xf5, 0xfc, 0x8a, 0x71, 0xb3, 0x62, 0x03, 0x42, 0xf7, 0x79, 0x5f, 0xb0, 0x15, 0x28, 0x0e, - 0x03, 0x21, 0xeb, 0x05, 0x6d, 0xae, 0x12, 0x99, 0x53, 0x3e, 0xd8, 0x5a, 0xa2, 0x4c, 0x04, 0x21, - 0x97, 0xa1, 0xe3, 0x7b, 0xee, 0x20, 0xac, 0x17, 0xd1, 0x84, 0x86, 0x76, 0x15, 0x62, 0x0d, 0xa0, - 0x3e, 0xe9, 0x72, 0xe0, 0x7b, 0x83, 0x40, 0xb0, 0x7f, 0x81, 0x89, 0x1f, 0x23, 0x7f, 0xab, 0xd1, - 0x07, 0x48, 0x8f, 0xa4, 0xec, 0x36, 0x2c, 0xfa, 0x52, 0x38, 0x52, 0xb4, 0x84, 0x7b, 0x20, 0x1c, - 0x21, 0xa5, 0x27, 0xb5, 0xb7, 0xb3, 0xf6, 0x82, 0x2f, 0x85, 0x8d, 0x78, 0x53, 0xc1, 0xd6, 0xcf, - 0xc4, 0xd1, 0xbe, 0xdf, 0x7e, 0x59, 0x38, 0x3a, 0x0f, 0xe6, 0x40, 0x7c, 0x28, 0xc5, 0x01, 0xd1, - 0x43, 0x4f, 0x0a, 0xf7, 0x7a, 0x6d, 0x85, 0xcf, 0x20, 0x8e, 0x4f, 0xd6, 0x16, 0x52, 0x96, 0x8c, - 0x80, 0x28, 0xcb, 0xa4, 0xc2, 0xc8, 0xa6, 0xe2, 0x0b, 0xa2, 0x62, 0x53, 0xf4, 0xc4, 0xcb, 0x41, - 0x45, 0x14, 0x5a, 0xd2, 0xa3, 0x17, 0x08, 0xed, 0x73, 0x03, 0xce, 0x8e, 0x0d, 0xed, 0xf1, 0xce, - 0x9f, 0x89, 0xeb, 0x22, 0x94, 0x43, 0xde, 0x89, 0x07, 0x55, 0x0a, 0x79, 0xe7, 0x98, 0x11, 0x6d, - 0xc0, 0xb9, 0x94, 0x23, 0x2f, 0x10, 0xce, 0x2f, 0x14, 0x0e, 0x76, 0xc9, 0x5f, 0x18, 0x0e, 0xfb, - 0x37, 0x2c, 0x84, 0x5c, 0x76, 0x44, 0xe8, 0x48, 0x71, 0xe0, 0x06, 0xae, 0x37, 0xa0, 0xa2, 0xad, - 0x22, 0x6c, 0x13, 0xca, 0xea, 0x50, 0xea, 0x8b, 0x20, 0xe0, 0x1d, 0x41, 0xd5, 0x1b, 0x3d, 0x5a, - 0x1f, 0x21, 0x23, 0xb1, 0x58, 0x88, 0x91, 0x25, 0x28, 0x84, 0xbc, 0x43, 0x51, 0xcc, 0x45, 0x1f, - 0x57, 0x1a, 0x0a, 0x57, 0xed, 0x20, 0x9e, 0xba, 0x41, 0x18, 0x68, 0xaf, 0xcb, 0x36, 0x3d, 0x65, - 0x13, 0x59, 0xc8, 0x26, 0xf2, 0x99, 0x01, 0xe7, 0xd5, 0xc7, 0x77, 0x84, 0xec, 0x9c, 0x40, 0xc5, - 0x47, 0x7c, 0xe5, 0xa7, 0xf2, 0x75, 0x09, 0x66, 0x5b, 0x5e, 0xbf, 0xef, 0x86, 0x8e, 0xdb, 0x26, - 0xa7, 0xca, 0x08, 0xdc, 0x6b, 0xab, 0x88, 0x68, 0xbe, 0x51, 0xe3, 0xd3, 0x3c, 0x9b, 0xca, 0x1d, - 0x3b, 0x0b, 0x33, 0xdc, 0xf7, 0x7b, 0x87, 0x75, 0x53, 0x53, 0x80, 0x0f, 0xd6, 0x77, 0xd4, 0xc8, - 0x89, 0xa8, 0x88, 0xd4, 0x84, 0x03, 0x46, 0xca, 0x81, 0x75, 0x98, 0xa7, 0x8e, 0x1d, 0xea, 0x61, - 0x42, 0x89, 0x5f, 0x8a, 0x02, 0x79, 0x10, 0xad, 0x3b, 0x68, 0x14, 0x27, 0x8e, 0x5d, 0x79, 0x1c, - 0x7b, 0xca, 0xa6, 0xbf, 0x98, 0x49, 0xff, 0x9b, 0xc5, 0x72, 0xbe, 0x56, 0xb0, 0x3e, 0x81, 0x73, - 0x99, 0x86, 0x8f, 0xf6, 0xf5, 0x2a, 0x54, 0x14, 0xf3, 0x4e, 0x4b, 0xd7, 0x4d, 0x9b, 0x8a, 0x60, - 0x4e, 0x61, 0x58, 0x4a, 0x6d, 0x76, 0x03, 0xaa, 0x14, 0x4e, 0xa4, 0x54, 0xd0, 0x4a, 0x14, 0x24, - 0xa9, 0x59, 0x5f, 0x19, 0x70, 0x46, 0xd1, 0xb5, 0xb5, 0xf5, 0xb2, 0x56, 0x80, 0xf5, 0x19, 0x35, - 0xfc, 0xd8, 0x45, 0x4a, 0xe7, 0x44, 0xc6, 0x8c, 0x13, 0xca, 0xd8, 0x94, 0xe5, 0xf2, 0xa7, 0x3c, - 0x75, 0x6b, 0x57, 0x48, 0x79, 0xb8, 0xeb, 0xb6, 0x3e, 0x38, 0x5d, 0xb6, 0x6e, 0x81, 0x89, 0xe4, - 0x50, 0x29, 0x2e, 0x46, 0x3a, 0x6f, 0xb8, 0xe1, 0x86, 0x16, 0xd8, 0xa4, 0x90, 0x5e, 0x6e, 0x8a, - 0x13, 0xcb, 0xcd, 0xf4, 0x36, 0xba, 0x0d, 0x8b, 0xb8, 0x2b, 0x89, 0x1b, 0x30, 0xb5, 0xce, 0x82, - 0x16, 0xac, 0x8f, 0xad, 0xdc, 0x81, 0x1a, 0xea, 0xc6, 0xa2, 0x2d, 0x4d, 0x8d, 0x16, 0x5f, 0x1f, - 0x03, 0xd6, 0x6f, 0x34, 0x71, 0xe2, 0x04, 0x9e, 0x6c, 0x2e, 0xb1, 0xd6, 0x9d, 0x50, 0x8a, 0x54, - 0x2e, 0x51, 0xb0, 0x27, 0x05, 0xe6, 0x52, 0x75, 0x10, 0x55, 0x62, 0x7c, 0x46, 0xce, 0x21, 0x86, - 0x2a, 0xcf, 0xd1, 0xcc, 0xd6, 0x8f, 0x79, 0x58, 0xd4, 0x99, 0x13, 0x07, 0x42, 0x85, 0xfc, 0x4f, - 0x59, 0x3c, 0x47, 0x59, 0x3c, 0x33, 0x80, 0xc5, 0xc9, 0xfb, 0x7b, 0x94, 0xc4, 0xaf, 0x79, 0xb8, - 0xa4, 0x8b, 0x5d, 0xbf, 0xbf, 0xe5, 0xf6, 0x44, 0x70, 0xb7, 0xa5, 0xdc, 0xdd, 0x16, 0xbc, 0x2d, - 0x24, 0xdb, 0x02, 0x93, 0xeb, 0x67, 0x1d, 0x57, 0x75, 0x6d, 0x35, 0x9e, 0xea, 0x29, 0x2f, 0xad, - 0xe2, 0xc3, 0xde, 0xa1, 0x2f, 0x6c, 0x7a, 0x5b, 0xcd, 0xd4, 0xf7, 0xdd, 0x9e, 0x70, 0x7c, 0x1e, - 0x76, 0x69, 0x0f, 0x53, 0x56, 0xc0, 0x2e, 0x0f, 0xbb, 0xec, 0x1a, 0xcc, 0xfb, 0x6a, 0x73, 0xe2, - 0x0d, 0x03, 0x54, 0x28, 0x68, 0x85, 0x4a, 0x04, 0x6a, 0x25, 0xb5, 0x54, 0xf0, 0x40, 0xbc, 0xf2, - 0x7f, 0xa7, 0xe5, 0x0d, 0x42, 0x41, 0x47, 0x13, 0xb5, 0x54, 0x68, 0x74, 0x03, 0x41, 0x76, 0x0b, - 0x6a, 0xe2, 0xa9, 0x68, 0x0d, 0x43, 0xe1, 0x28, 0xfb, 0x7d, 0xaf, 0x8d, 0x45, 0x53, 0xb6, 0x17, - 0x08, 0xdf, 0x22, 0xd8, 0xda, 0x07, 0x18, 0x7b, 0xca, 0x00, 0xcc, 0x0d, 0xbb, 0x79, 0x77, 0xaf, - 0x59, 0xcb, 0xb1, 0x2a, 0x00, 0xfe, 0x76, 0x36, 0xef, 0xd9, 0x35, 0x43, 0xc9, 0xf6, 0x77, 0x37, - 0x95, 0x2c, 0xcf, 0xca, 0x50, 0xdc, 0x79, 0xf0, 0xa8, 0x59, 0x2b, 0x28, 0x74, 0xb3, 0xf9, 0x76, - 0x73, 0xaf, 0x59, 0x2b, 0xb2, 0x59, 0x98, 0xd9, 0xd8, 0xde, 0x79, 0xb0, 0x59, 0x9b, 0xb1, 0xbe, - 0x34, 0x68, 0x00, 0xa7, 0xd9, 0x61, 0x77, 0xc0, 0xec, 0x6a, 0x86, 0xa8, 0x48, 0xae, 0x1d, 0x83, - 0xcc, 0xed, 0x9c, 0x4d, 0x2f, 0xb1, 0x06, 0x94, 0xa2, 0xd0, 0x35, 0x83, 0xdb, 0x39, 0x3b, 0x02, - 0xd6, 0x2d, 0x58, 0x51, 0x6d, 0xe7, 0x50, 0x6d, 0xa8, 0xd0, 0x03, 0x07, 0xb9, 0x77, 0x7c, 0x7e, - 0xd8, 0xf3, 0x78, 0xdb, 0xfa, 0xb4, 0x00, 0x97, 0x53, 0x5f, 0xa2, 0x19, 0x40, 0xc9, 0x3e, 0x9d, - 0x49, 0x90, 0x6a, 0xef, 0xc2, 0x44, 0x7b, 0xdf, 0x80, 0x2a, 0xb9, 0x1d, 0x75, 0x39, 0x8e, 0x80, - 0x79, 0x44, 0x77, 0xa8, 0xd7, 0xff, 0x03, 0x8c, 0xd4, 0xf8, 0x30, 0xec, 0x7a, 0x12, 0xcd, 0xe1, - 0x40, 0xa8, 0xa1, 0xe4, 0xae, 0x16, 0x68, 0xa3, 0xab, 0x70, 0x26, 0xa9, 0x2d, 0xfa, 0xdc, 0xed, - 0xd1, 0x6c, 0x58, 0x8c, 0xab, 0x37, 0x95, 0x20, 0x7b, 0x92, 0x94, 0x8e, 0x3f, 0x49, 0xca, 0xc7, - 0x9f, 0x24, 0x3f, 0x44, 0x0b, 0xcc, 0x44, 0x1e, 0xd8, 0x6b, 0xa9, 0x0a, 0xb9, 0x3e, 0xa5, 0x42, - 0x12, 0x79, 0x8b, 0x95, 0xc8, 0xab, 0xa3, 0x76, 0xcd, 0x27, 0xc7, 0x50, 0x76, 0x85, 0xe5, 0xa2, - 0xfe, 0x5c, 0xbf, 0x06, 0x57, 0x27, 0xeb, 0x47, 0xe2, 0x57, 0x46, 0x05, 0xf4, 0x6d, 0x74, 0x5b, - 0x11, 0x77, 0xe4, 0x04, 0xe7, 0xe0, 0x32, 0xcc, 0xb9, 0x83, 0xb6, 0x78, 0x9a, 0x98, 0x80, 0xa0, - 0xa1, 0x23, 0x26, 0xdb, 0x94, 0x83, 0xc3, 0x37, 0xa3, 0xc5, 0x4e, 0x0d, 0x88, 0x53, 0xdf, 0x31, - 0x4a, 0xfd, 0x99, 0xd8, 0x8e, 0x11, 0x81, 0x23, 0xce, 0x0c, 0x4b, 0x40, 0x4d, 0xe0, 0x04, 0x5d, - 0xae, 0xeb, 0x78, 0xd6, 0x9e, 0x45, 0xe4, 0x61, 0x97, 0xb3, 0xd7, 0x61, 0x51, 0x8a, 0xbe, 0x17, - 0x8a, 0x78, 0x95, 0x99, 0x53, 0x1d, 0xae, 0xa1, 0xf2, 0x18, 0x51, 0x53, 0x95, 0x0c, 0xd0, 0xe7, - 0xb1, 0x9a, 0x2b, 0x08, 0x62, 0x1a, 0xac, 0x8f, 0xa3, 0x45, 0x0d, 0x49, 0x1a, 0x9d, 0xeb, 0x80, - 0xe2, 0x51, 0xae, 0xe1, 0xbe, 0x9e, 0x22, 0x54, 0xae, 0x3d, 0xc7, 0x76, 0x54, 0x51, 0xd3, 0x49, - 0x2d, 0x56, 0xe5, 0x0e, 0xad, 0x54, 0xd6, 0xd7, 0x94, 0xa3, 0x87, 0x4f, 0x86, 0x3c, 0x38, 0xfd, - 0x5d, 0x7d, 0xa0, 0x3f, 0x13, 0xcb, 0x11, 0x02, 0x47, 0xe4, 0x48, 0xbd, 0xa4, 0x3b, 0x7d, 0x9c, - 0xa2, 0xb2, 0x06, 0x14, 0x0d, 0x17, 0xa0, 0x24, 0x06, 0x6d, 0x2d, 0x32, 0xb5, 0xc8, 0x14, 0x83, - 0xb6, 0x12, 0x5c, 0x07, 0x13, 0x87, 0x0e, 0xed, 0x2f, 0x92, 0xee, 0x90, 0x2c, 0x63, 0xec, 0x95, - 0x33, 0xc6, 0x9e, 0xe5, 0x62, 0x86, 0x22, 0x8a, 0xc6, 0x19, 0xa2, 0x68, 0x62, 0x19, 0x42, 0x44, - 0x79, 0x70, 0x14, 0xeb, 0x78, 0xa6, 0xb3, 0x27, 0x53, 0xb8, 0xf6, 0x7b, 0x09, 0x6a, 0xa3, 0x3e, - 0x7d, 0x28, 0xe4, 0x81, 0xdb, 0x12, 0xec, 0x5d, 0xa8, 0xa5, 0xaf, 0xfb, 0xd8, 0x72, 0x62, 0xac, - 0x4c, 0xde, 0x5d, 0x36, 0x56, 0xa6, 0x2b, 0x60, 0x00, 0x56, 0x2e, 0x32, 0x1c, 0xbf, 0x14, 0x4b, - 0x1a, 0xce, 0xb8, 0xf0, 0x4b, 0x1a, 0xce, 0xba, 0x4f, 0x1b, 0x1b, 0x8e, 0x5f, 0x49, 0x25, 0x0d, - 0x67, 0x5c, 0x9f, 0x25, 0x0d, 0x67, 0xdd, 0x66, 0x59, 0x39, 0x76, 0x1f, 0xe6, 0x13, 0xf7, 0x20, - 0xec, 0xf2, 0x64, 0x98, 0xe3, 0xab, 0x9e, 0xc6, 0xd2, 0x14, 0x69, 0xda, 0xde, 0xe8, 0xa6, 0x29, - 0x69, 0x2f, 0x7d, 0x13, 0x96, 0xb4, 0x37, 0x71, 0x3d, 0x65, 0xe5, 0xd8, 0x7b, 0xb0, 0x90, 0xba, - 0x54, 0x60, 0x57, 0xe2, 0xef, 0x4c, 0xde, 0xa1, 0x34, 0x96, 0xa7, 0xca, 0x23, 0xab, 0x37, 0x8d, - 0xff, 0x1a, 0xec, 0x2d, 0xa8, 0xc4, 0x0f, 0xb7, 0xec, 0x52, 0xfc, 0xb5, 0xd4, 0xa9, 0xbc, 0x71, - 0x39, 0x5b, 0x38, 0x72, 0xf3, 0x1d, 0xa8, 0x26, 0xcf, 0x57, 0x2c, 0xc9, 0x54, 0xfa, 0xe0, 0xda, - 0xb8, 0x32, 0x4d, 0x3c, 0x32, 0xd9, 0x04, 0x18, 0xef, 0xcd, 0xd9, 0xc5, 0x44, 0xbf, 0xc5, 0x0f, - 0x3b, 0x8d, 0x46, 0x96, 0x68, 0x64, 0xe6, 0x11, 0x12, 0x18, 0x5b, 0xdf, 0x92, 0x04, 0x4e, 0xae, - 0xc0, 0x49, 0x02, 0x33, 0x16, 0x46, 0x45, 0xe0, 0xd8, 0x3d, 0x35, 0x41, 0xd3, 0xee, 0xc5, 0x96, - 0xa7, 0xb4, 0x7b, 0xf1, 0xa1, 0x3c, 0x8e, 0x12, 0x47, 0x41, 0xd2, 0x4c, 0x62, 0x82, 0x26, 0xcd, - 0x24, 0x27, 0x87, 0x95, 0x7b, 0x6c, 0xea, 0xff, 0x1e, 0xfe, 0xf7, 0x47, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x63, 0x19, 0x77, 0x57, 0xa5, 0x18, 0x00, 0x00, + // 1626 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcd, 0x6f, 0x1b, 0x55, + 0x10, 0xf7, 0xda, 0xc9, 0xc6, 0x99, 0x38, 0x89, 0xf3, 0xfa, 0x95, 0xba, 0x4d, 0x93, 0x6e, 0x5a, + 0x68, 0x2b, 0x64, 0xa1, 0x80, 0xe0, 0x54, 0x50, 0x3e, 0x1c, 0x52, 0x20, 0x6d, 0xd8, 0x24, 0x85, + 0x03, 0xd2, 0x6a, 0x6b, 0x3f, 0xec, 0x15, 0xb6, 0x77, 0xfb, 0x76, 0x1d, 0x1a, 0x84, 0xb8, 0x20, + 0xe0, 0xca, 0x89, 0x1b, 0x12, 0x88, 0x1b, 0xe2, 0xc2, 0x05, 0x09, 0x0e, 0x88, 0x33, 0x27, 0xa4, + 0x1e, 0xf8, 0x77, 0xd0, 0x7b, 0x33, 0xeb, 0xfd, 0x74, 0x94, 0x96, 0x44, 0x54, 0x88, 0x9b, 0x77, + 0x66, 0x76, 0x76, 0xe6, 0x37, 0x5f, 0xef, 0x8d, 0xa1, 0xea, 0x7a, 0x5c, 0xd8, 0x81, 0xe3, 0xf6, + 0xfd, 0xba, 0x27, 0xdc, 0xc0, 0x65, 0x7a, 0xdb, 0x09, 0xec, 0xee, 0x61, 0xad, 0xe2, 0x77, 0x6c, + 0xc1, 0x5b, 0x48, 0x35, 0x7e, 0xd2, 0xe0, 0xc2, 0xbe, 0xcf, 0xc5, 0xba, 0xe0, 0x76, 0xc0, 0xd7, + 0x84, 0xdd, 0x6f, 0x76, 0x4c, 0xfe, 0x70, 0xc0, 0xfd, 0x80, 0xad, 0x00, 0x08, 0xee, 0xb9, 0xbe, + 0x13, 0xb8, 0xe2, 0x70, 0x5e, 0x5b, 0xd2, 0x6e, 0x4c, 0xad, 0xb0, 0x3a, 0xaa, 0xa9, 0x9b, 0x43, + 0x8e, 0x19, 0x93, 0x62, 0x8b, 0x30, 0xf5, 0x40, 0x29, 0xb1, 0xfa, 0x76, 0x8f, 0xcf, 0x17, 0x97, + 0xb4, 0x1b, 0x15, 0x13, 0x90, 0x74, 0xd7, 0xee, 0x71, 0xb6, 0x04, 0x63, 0x03, 0x9f, 0x8b, 0xf9, + 0x92, 0x52, 0x57, 0x09, 0xd5, 0x49, 0x1b, 0x4c, 0xc5, 0x91, 0x2a, 0xfc, 0xc0, 0x16, 0x81, 0xe5, + 0xb9, 0x4e, 0x3f, 0x98, 0x1f, 0x43, 0x15, 0x8a, 0xb4, 0x23, 0x29, 0x46, 0x1f, 0xe6, 0xb3, 0x26, + 0xfb, 0x9e, 0xdb, 0xf7, 0x39, 0x7b, 0x0e, 0x74, 0xfc, 0x18, 0xd9, 0x3b, 0x13, 0x7e, 0x80, 0xe4, + 0x88, 0xcb, 0x6e, 0xc1, 0x9c, 0x27, 0xb8, 0x25, 0x78, 0x93, 0x3b, 0x07, 0xdc, 0xe2, 0x42, 0xb8, + 0x42, 0x59, 0x3b, 0x69, 0xce, 0x7a, 0x82, 0x9b, 0x48, 0x6f, 0x48, 0xb2, 0xf1, 0x3b, 0x61, 0xb4, + 0xef, 0xb5, 0x9e, 0x15, 0x8c, 0xce, 0x83, 0xde, 0xe7, 0x1f, 0x09, 0x7e, 0x40, 0xf0, 0xd0, 0x93, + 0xa4, 0xbb, 0xdd, 0x96, 0xa4, 0x8f, 0x23, 0x1d, 0x9f, 0x8c, 0x4d, 0x84, 0x2c, 0xe9, 0x01, 0x41, + 0x96, 0x0b, 0x85, 0x96, 0x0f, 0xc5, 0x57, 0x04, 0xc5, 0x06, 0xef, 0xf2, 0x67, 0x03, 0x8a, 0xd0, + 0xb5, 0xa4, 0x45, 0x4f, 0xe1, 0xda, 0x97, 0x1a, 0x9c, 0x8d, 0x14, 0xed, 0xd9, 0xed, 0x7f, 0xe2, + 0xd7, 0x45, 0x28, 0x07, 0x76, 0x3b, 0xee, 0xd4, 0x44, 0x60, 0xb7, 0x8f, 0xe9, 0xd1, 0x3a, 0x9c, + 0x4b, 0x19, 0xf2, 0x14, 0xee, 0xfc, 0x41, 0xee, 0x60, 0x95, 0xfc, 0x8b, 0xee, 0xb0, 0xe7, 0x61, + 0x36, 0xb0, 0x45, 0x9b, 0x07, 0x96, 0xe0, 0x07, 0x8e, 0xef, 0xb8, 0x7d, 0x4a, 0xda, 0x19, 0x24, + 0x9b, 0x44, 0x65, 0xf3, 0x30, 0xd1, 0xe3, 0xbe, 0x6f, 0xb7, 0x39, 0x65, 0x6f, 0xf8, 0x68, 0x7c, + 0x8c, 0x88, 0xc4, 0x7c, 0x21, 0x44, 0x16, 0xa0, 0x14, 0xd8, 0x6d, 0xf2, 0x62, 0x2a, 0xfc, 0xb8, + 0x94, 0x90, 0x74, 0x59, 0x0e, 0xfc, 0x91, 0xe3, 0x07, 0xbe, 0xb2, 0xba, 0x6c, 0xd2, 0x53, 0x3e, + 0x90, 0xa5, 0x7c, 0x20, 0x1f, 0x6b, 0x70, 0x5e, 0x7e, 0x7c, 0x9b, 0x8b, 0xf6, 0x09, 0x64, 0x7c, + 0x88, 0x57, 0x71, 0x24, 0x5e, 0x97, 0x60, 0xb2, 0xe9, 0xf6, 0x7a, 0x4e, 0x60, 0x39, 0x2d, 0x32, + 0xaa, 0x8c, 0x84, 0x3b, 0x2d, 0xe9, 0x11, 0xf5, 0x37, 0x2a, 0x7c, 0xea, 0x67, 0x23, 0xb1, 0x63, + 0x67, 0x61, 0xdc, 0xf6, 0xbc, 0xee, 0xe1, 0xbc, 0xae, 0x20, 0xc0, 0x07, 0xe3, 0x47, 0x2a, 0xe4, + 0x84, 0x57, 0x04, 0x6a, 0xc2, 0x00, 0x2d, 0x65, 0xc0, 0x1a, 0x4c, 0x53, 0xc5, 0x0e, 0x54, 0x33, + 0xa1, 0xc0, 0x2f, 0x84, 0x8e, 0xdc, 0x0b, 0xe7, 0x0e, 0x2a, 0xc5, 0x8e, 0x63, 0x56, 0x1e, 0xc4, + 0x9e, 0xf2, 0xe1, 0x1f, 0xcb, 0x85, 0xff, 0xcd, 0xb1, 0x72, 0xb1, 0x5a, 0x32, 0x3e, 0x85, 0x73, + 0xb9, 0x8a, 0x8f, 0xb6, 0xf5, 0x2a, 0x54, 0x24, 0xf2, 0x56, 0x53, 0xe5, 0x4d, 0x8b, 0x92, 0x60, + 0x4a, 0xd2, 0x30, 0x95, 0x5a, 0xec, 0x3a, 0xcc, 0x90, 0x3b, 0xa1, 0x50, 0x49, 0x09, 0x91, 0x93, + 0x24, 0x66, 0x7c, 0xab, 0xc1, 0x19, 0x09, 0xd7, 0xe6, 0xe6, 0xb3, 0x9a, 0x01, 0xc6, 0x17, 0x54, + 0xf0, 0x91, 0x89, 0x14, 0xce, 0x4c, 0xc4, 0xb4, 0x13, 0x8a, 0xd8, 0x88, 0x71, 0xf9, 0x5b, 0x91, + 0xaa, 0xb5, 0xc3, 0x85, 0x38, 0xdc, 0x71, 0x9a, 0x1f, 0x9e, 0x2e, 0x5a, 0x37, 0x41, 0x47, 0x70, + 0x28, 0x15, 0xe7, 0x42, 0x99, 0x37, 0x9c, 0x60, 0x5d, 0x31, 0x4c, 0x12, 0x48, 0x8f, 0x9b, 0xb1, + 0xcc, 0xb8, 0x19, 0x5d, 0x46, 0xb7, 0x60, 0x0e, 0x4f, 0x25, 0x71, 0x05, 0xba, 0x92, 0x99, 0x55, + 0x8c, 0xb5, 0x48, 0xcb, 0x6d, 0xa8, 0xa2, 0x6c, 0xcc, 0xdb, 0x89, 0x91, 0xde, 0xe2, 0xeb, 0x11, + 0xc1, 0xf8, 0x8b, 0x3a, 0x4e, 0x1c, 0xc0, 0x93, 0x8d, 0x25, 0xe6, 0xba, 0x15, 0x08, 0x9e, 0x8a, + 0x25, 0x32, 0xf6, 0x04, 0xc7, 0x58, 0xca, 0x0a, 0xa2, 0x4c, 0x8c, 0xf7, 0xc8, 0x29, 0xa4, 0xa1, + 0xc8, 0x13, 0x14, 0xb3, 0xf1, 0x6b, 0x11, 0xe6, 0x54, 0xe4, 0xf8, 0x01, 0x97, 0x2e, 0xff, 0x9f, + 0x16, 0x4f, 0x90, 0x16, 0x8f, 0x35, 0x60, 0x71, 0xf0, 0xfe, 0x1b, 0x29, 0xf1, 0x67, 0x11, 0x2e, + 0xa9, 0x64, 0x57, 0xef, 0x6f, 0x3a, 0x5d, 0xee, 0xaf, 0x36, 0xa5, 0xb9, 0x5b, 0xdc, 0x6e, 0x71, + 0xc1, 0x36, 0x41, 0xb7, 0xd5, 0xb3, 0xf2, 0x6b, 0x66, 0xa5, 0x1e, 0x0f, 0xf5, 0x88, 0x97, 0xea, + 0xf8, 0xb0, 0x77, 0xe8, 0x71, 0x93, 0xde, 0x96, 0x3d, 0xf5, 0x03, 0xa7, 0xcb, 0x2d, 0xcf, 0x0e, + 0x3a, 0x74, 0x86, 0x29, 0x4b, 0xc2, 0x8e, 0x1d, 0x74, 0xd8, 0x32, 0x4c, 0x7b, 0xf2, 0x70, 0xe2, + 0x0e, 0x7c, 0x14, 0x28, 0x29, 0x81, 0x4a, 0x48, 0x54, 0x42, 0x72, 0x54, 0xd8, 0x3e, 0x7f, 0xe5, + 0x65, 0xab, 0xe9, 0xf6, 0x03, 0x4e, 0x57, 0x13, 0x39, 0x2a, 0x14, 0x75, 0x1d, 0x89, 0xec, 0x26, + 0x54, 0xf9, 0x23, 0xde, 0x1c, 0x04, 0xdc, 0x92, 0xfa, 0x7b, 0x6e, 0x0b, 0x93, 0xa6, 0x6c, 0xce, + 0x12, 0x7d, 0x93, 0xc8, 0xc6, 0x3e, 0x40, 0x64, 0x29, 0x03, 0xd0, 0xd7, 0xcd, 0xc6, 0xea, 0x5e, + 0xa3, 0x5a, 0x60, 0x33, 0x00, 0xf8, 0xdb, 0xda, 0xb8, 0x63, 0x56, 0x35, 0xc9, 0xdb, 0xdf, 0xd9, + 0x90, 0xbc, 0x22, 0x2b, 0xc3, 0xd8, 0xf6, 0xbd, 0xfb, 0x8d, 0x6a, 0x49, 0x52, 0x37, 0x1a, 0x6f, + 0x37, 0xf6, 0x1a, 0xd5, 0x31, 0x36, 0x09, 0xe3, 0xeb, 0x5b, 0xdb, 0xf7, 0x36, 0xaa, 0xe3, 0xc6, + 0xd7, 0x1a, 0x35, 0xe0, 0x34, 0x3a, 0xec, 0x36, 0xe8, 0x1d, 0x85, 0x10, 0x25, 0xc9, 0xf2, 0x31, + 0xc0, 0xdc, 0x2a, 0x98, 0xf4, 0x12, 0xab, 0xc1, 0x44, 0xe8, 0xba, 0x42, 0x70, 0xab, 0x60, 0x86, + 0x84, 0x35, 0x03, 0x96, 0x64, 0xd9, 0x59, 0x94, 0x1b, 0xd2, 0x75, 0xdf, 0x42, 0xec, 0x2d, 0xcf, + 0x3e, 0xec, 0xba, 0x76, 0xcb, 0xf8, 0xbc, 0x04, 0x97, 0x53, 0x5f, 0xa2, 0x1e, 0x40, 0xc1, 0x3e, + 0x9d, 0x4e, 0x90, 0x2a, 0xef, 0x52, 0xa6, 0xbc, 0xaf, 0xc3, 0x0c, 0x99, 0x1d, 0x56, 0x39, 0xb6, + 0x80, 0x69, 0xa4, 0x6e, 0x53, 0xad, 0xbf, 0x00, 0x8c, 0xc4, 0xec, 0x41, 0xd0, 0x71, 0x05, 0xaa, + 0xc3, 0x86, 0x50, 0x45, 0xce, 0xaa, 0x62, 0x28, 0xa5, 0x75, 0x38, 0x93, 0x94, 0xe6, 0x3d, 0xdb, + 0xe9, 0x52, 0x6f, 0x98, 0x8b, 0x8b, 0x37, 0x24, 0x23, 0xbf, 0x93, 0x4c, 0x1c, 0xbf, 0x93, 0x94, + 0x8f, 0xdf, 0x49, 0x7e, 0x0e, 0x07, 0x4c, 0x26, 0x0e, 0xec, 0xb5, 0x54, 0x86, 0x5c, 0x1b, 0x91, + 0x21, 0x89, 0xb8, 0xc5, 0x52, 0xe4, 0xd5, 0x61, 0xb9, 0x16, 0x93, 0x6d, 0x28, 0x3f, 0xc3, 0x0a, + 0x61, 0x7d, 0xae, 0x2d, 0xc3, 0xd5, 0x6c, 0xfe, 0x08, 0xfc, 0xca, 0x30, 0x81, 0x7e, 0x08, 0xb7, + 0x15, 0x71, 0x43, 0x4e, 0xb0, 0x0f, 0x2e, 0xc2, 0x94, 0xd3, 0x6f, 0xf1, 0x47, 0x89, 0x0e, 0x08, + 0x8a, 0x74, 0x44, 0x67, 0x1b, 0x71, 0x71, 0xf8, 0x7e, 0x38, 0xec, 0x64, 0x83, 0x38, 0xf5, 0x13, + 0xa3, 0x50, 0x9f, 0x89, 0x9d, 0x18, 0x91, 0x70, 0xc4, 0x9d, 0x61, 0x01, 0xa8, 0x08, 0x2c, 0xbf, + 0x63, 0xab, 0x3c, 0x9e, 0x34, 0x27, 0x91, 0xb2, 0xdb, 0xb1, 0xd9, 0xeb, 0x30, 0x27, 0x78, 0xcf, + 0x0d, 0x78, 0x3c, 0xcb, 0xf4, 0x91, 0x06, 0x57, 0x51, 0x38, 0xa2, 0xc8, 0xae, 0x4a, 0x0a, 0xe8, + 0xf3, 0x98, 0xcd, 0x15, 0x24, 0x62, 0x18, 0x8c, 0x4f, 0xc2, 0xa1, 0x86, 0x20, 0x0d, 0xef, 0x75, + 0x40, 0xfe, 0x48, 0xd3, 0xf0, 0x5c, 0x4f, 0x1e, 0x4a, 0xd3, 0x9e, 0xe0, 0x38, 0x2a, 0xa1, 0x69, + 0xa7, 0x86, 0x55, 0xb9, 0x4d, 0x93, 0xca, 0xf8, 0x8e, 0x62, 0xb4, 0xfb, 0x70, 0x60, 0xfb, 0xa7, + 0x7f, 0xaa, 0xf7, 0xd5, 0x67, 0x62, 0x31, 0x42, 0xc2, 0x11, 0x31, 0x92, 0x2f, 0xa9, 0x4a, 0x8f, + 0x42, 0x54, 0x56, 0x04, 0x09, 0xc3, 0x05, 0x98, 0xe0, 0xfd, 0x96, 0x62, 0xe9, 0x8a, 0xa5, 0xf3, + 0x7e, 0x4b, 0x32, 0xae, 0x81, 0x8e, 0x4d, 0x87, 0xce, 0x17, 0x49, 0x73, 0x88, 0x97, 0xd3, 0xf6, + 0xca, 0x39, 0x6d, 0xcf, 0x70, 0x30, 0x42, 0x21, 0x44, 0x51, 0x84, 0xc8, 0x9b, 0x58, 0x84, 0x90, + 0x22, 0x2d, 0x38, 0x0a, 0x75, 0xbc, 0xd3, 0x99, 0xd9, 0x10, 0x1a, 0xdf, 0xd0, 0xd5, 0x61, 0x55, + 0xde, 0x51, 0x77, 0xec, 0x20, 0xba, 0x68, 0x1d, 0xd9, 0x97, 0x32, 0xe2, 0xf5, 0xbc, 0xd1, 0xe5, + 0x49, 0x01, 0xee, 0x47, 0xa3, 0x8b, 0x08, 0xb5, 0xcf, 0x34, 0xd0, 0x4f, 0x75, 0x00, 0x2d, 0xc3, + 0x34, 0x6d, 0x40, 0x28, 0xc6, 0x74, 0xbc, 0x40, 0x22, 0x16, 0xc2, 0x70, 0x80, 0xaa, 0xfb, 0xb9, + 0xa5, 0x6c, 0xcb, 0xf4, 0xbf, 0xf7, 0xb1, 0x6f, 0xc7, 0xfd, 0x3d, 0xb9, 0xee, 0xb7, 0xf2, 0x4b, + 0x19, 0xaa, 0x43, 0xb9, 0x5d, 0x2e, 0x0e, 0x9c, 0x26, 0x67, 0xef, 0x42, 0x35, 0xbd, 0x6c, 0x65, + 0x8b, 0x89, 0xa6, 0x9e, 0xdd, 0x1c, 0xd7, 0x96, 0x46, 0x0b, 0xa0, 0xbd, 0x46, 0x21, 0x54, 0x1c, + 0x5f, 0x49, 0x26, 0x15, 0xe7, 0xac, 0x5b, 0x93, 0x8a, 0xf3, 0xb6, 0x99, 0x91, 0xe2, 0xf8, 0x42, + 0x30, 0xa9, 0x38, 0x67, 0x79, 0x99, 0x54, 0x9c, 0xb7, 0x4b, 0x34, 0x0a, 0xec, 0x2e, 0x4c, 0x27, + 0xb6, 0x50, 0xec, 0x72, 0xd6, 0xcd, 0x68, 0xd1, 0x56, 0x5b, 0x18, 0xc1, 0x4d, 0xeb, 0x1b, 0xee, + 0xf9, 0x92, 0xfa, 0xd2, 0x7b, 0xc8, 0xa4, 0xbe, 0xcc, 0x72, 0xd0, 0x28, 0xb0, 0xf7, 0x60, 0x36, + 0xb5, 0xd2, 0x61, 0x57, 0xe2, 0xef, 0x64, 0x37, 0x58, 0xb5, 0xc5, 0x91, 0xfc, 0x50, 0xeb, 0x0d, + 0xed, 0x45, 0x8d, 0xbd, 0x05, 0x95, 0xf8, 0x6a, 0x81, 0x5d, 0x8a, 0xbf, 0x96, 0xda, 0x89, 0xd4, + 0x2e, 0xe7, 0x33, 0x87, 0x66, 0xbe, 0x03, 0x33, 0xc9, 0xdb, 0x2d, 0x4b, 0x22, 0x95, 0x5e, 0x1b, + 0xd4, 0xae, 0x8c, 0x62, 0x0f, 0x55, 0x36, 0x00, 0xa2, 0x9b, 0x11, 0xbb, 0x98, 0x28, 0xc1, 0xf8, + 0x55, 0xb3, 0x56, 0xcb, 0x63, 0x0d, 0xd5, 0xdc, 0x47, 0x00, 0x63, 0xa7, 0x8b, 0x24, 0x80, 0xd9, + 0xf3, 0x4f, 0x12, 0xc0, 0x9c, 0x63, 0x89, 0x04, 0x30, 0x32, 0x4f, 0xce, 0xaf, 0xb4, 0x79, 0xb1, + 0xc3, 0x41, 0xda, 0xbc, 0xf8, 0x48, 0x8c, 0xbc, 0xc4, 0x46, 0x9c, 0x54, 0x93, 0x98, 0x5f, 0x49, + 0x35, 0xc9, 0xbe, 0x6d, 0x14, 0xd8, 0x2e, 0xe2, 0x1f, 0x35, 0x91, 0x24, 0xfe, 0x99, 0x66, 0x9a, + 0xc4, 0x3f, 0xdb, 0x7b, 0xa4, 0x8b, 0x0f, 0x74, 0xf5, 0x77, 0xd2, 0x4b, 0x7f, 0x07, 0x00, 0x00, + 0xff, 0xff, 0xe8, 0xc5, 0xbe, 0x70, 0x78, 0x1a, 0x00, 0x00, } diff --git a/vendor/vendor.json b/vendor/vendor.json index 82f0a934d6..c33f95433f 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -213,12 +213,12 @@ "revisionTime": "2017-12-31T12:27:32Z" }, { - "checksumSHA1": "7DDyruoxYwkzwvNiWIqfw79gUqA=", + "checksumSHA1": "sgtWlz2r6XUcjr+eXvBrb9JqgVs=", "path": "gitlab.com/gitlab-org/gitaly-proto/go/gitalypb", - "revision": "790a4f7603441ddc6d703c2eb9394212992114a3", - "revisionTime": "2018-10-04T12:44:29Z", - "version": "v0.120.0", - "versionExact": "v0.120.0" + "revision": "43fb53d30d4eba169e663f708544c3b813eb0c9a", + "revisionTime": "2018-10-22T12:10:33Z", + "version": "v0.121.0", + "versionExact": "v0.121.0" }, { "checksumSHA1": "nqWNlnMmVpt628zzvyo6Yv2CX5Q=", -- GitLab