diff options
author | Kim Carlbäcker <kim.carlbacker@gmail.com> | 2018-03-15 22:39:14 +0300 |
---|---|---|
committer | Kim Carlbäcker <kim.carlbacker@gmail.com> | 2018-03-15 22:39:14 +0300 |
commit | db8b9e4331be2e4044455724626100267a8a8b53 (patch) | |
tree | 27d929e385b57c1c73bf90df9b86957e3761bf08 | |
parent | 4b492807ea2e82850aef36829780402c6c2d7c52 (diff) | |
parent | abceaf2520e229c092dca7a5dd6ae667dae3bc9e (diff) |
Merge branch '1091-rewrite-findmergebase-in-go' into 'master'
Resolve "Rewrite FindMergeBase in Go"
Closes #1091
See merge request gitlab-org/gitaly!632
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | internal/service/repository/merge_base.go | 30 | ||||
-rw-r--r-- | ruby/lib/gitaly_server/repository_service.rb | 13 |
3 files changed, 26 insertions, 19 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b064ef18..5c3216c15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ UNRELEASED +- Rewrite RepositoryService.MergeBase in Go + https://gitlab.com/gitlab-org/gitaly/merge_requests/632 - Encode OperationsService errors in UTF-8 before sending them https://gitlab.com/gitlab-org/gitaly/merge_requests/627 - Add param logging in NamespaceService RPCs diff --git a/internal/service/repository/merge_base.go b/internal/service/repository/merge_base.go index 192cc3a25..a9c5692e1 100644 --- a/internal/service/repository/merge_base.go +++ b/internal/service/repository/merge_base.go @@ -1,9 +1,11 @@ package repository import ( - "gitlab.com/gitlab-org/gitaly/internal/rubyserver" + "io/ioutil" + "strings" pb "gitlab.com/gitlab-org/gitaly-proto/go" + "gitlab.com/gitlab-org/gitaly/internal/git" "golang.org/x/net/context" "google.golang.org/grpc/codes" @@ -11,19 +13,35 @@ import ( ) func (s *server) FindMergeBase(ctx context.Context, req *pb.FindMergeBaseRequest) (*pb.FindMergeBaseResponse, error) { - if len(req.Revisions) != 2 { + revisions := req.GetRevisions() + if len(revisions) != 2 { return nil, status.Errorf(codes.InvalidArgument, "FindMergeBase: 2 revisions are required") } - client, err := s.RepositoryServiceClient(ctx) + args := []string{"merge-base"} + for _, revision := range revisions { + args = append(args, string(revision)) + } + + cmd, err := git.Command(ctx, req.GetRepository(), args...) if err != nil { - return nil, err + if _, ok := status.FromError(err); ok { + return nil, err + } + return nil, status.Errorf(codes.Internal, "FindMergeBase: cmd: %v", err) } - clientCtx, err := rubyserver.SetHeaders(ctx, req.GetRepository()) + mergeBase, err := ioutil.ReadAll(cmd) if err != nil { return nil, err } - return client.FindMergeBase(clientCtx, req) + mergeBaseStr := strings.TrimSpace(string(mergeBase)) + + if err := cmd.Wait(); err != nil { + // On error just return an empty merge base + return &pb.FindMergeBaseResponse{Base: ""}, nil + } + + return &pb.FindMergeBaseResponse{Base: mergeBaseStr}, nil } diff --git a/ruby/lib/gitaly_server/repository_service.rb b/ruby/lib/gitaly_server/repository_service.rb index 33227becd..cddb4e351 100644 --- a/ruby/lib/gitaly_server/repository_service.rb +++ b/ruby/lib/gitaly_server/repository_service.rb @@ -42,19 +42,6 @@ module GitalyServer Gitaly::FsckResponse.new(error: ex.message.b) end - def find_merge_base(request, call) - bridge_exceptions do - begin - repo = Gitlab::Git::Repository.from_gitaly(request.repository, call) - base = repo.merge_base(*request.revisions) - - Gitaly::FindMergeBaseResponse.new(base: base.to_s) - rescue Rugged::ReferenceError - Gitaly::FindMergeBaseResponse.new - end - end - end - def fetch_remote(request, call) bridge_exceptions do gitlab_projects = Gitlab::Git::GitlabProjects.from_gitaly(request.repository, call) |