diff options
author | Ahmad Sherif <ahmad.m.sherif@gmail.com> | 2018-03-16 02:31:03 +0300 |
---|---|---|
committer | Ahmad Sherif <ahmad.m.sherif@gmail.com> | 2018-03-16 02:31:03 +0300 |
commit | 1882d71eeabd58894860b6176f51836d5634e8e4 (patch) | |
tree | b7034857d4d696ff3ce258070f446593dc213deb | |
parent | db8b9e4331be2e4044455724626100267a8a8b53 (diff) | |
parent | 2ce237ad11db1ecb9f68d8d34e480fc4c7c05b38 (diff) |
Merge branch 'bench-shell-has-local-branches' into 'master'
Rewrite Repo::HasLocalBranches in Go
See merge request gitlab-org/gitaly!629
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | internal/service/repository/repository.go | 24 | ||||
-rw-r--r-- | ruby/lib/gitaly_server/repository_service.rb | 6 |
3 files changed, 20 insertions, 12 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c3216c15..c1ac74637 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ UNRELEASED +- Rewrite RepositoryService.HasLocalBranches in Go + https://gitlab.com/gitlab-org/gitaly/merge_requests/629 - Rewrite RepositoryService.MergeBase in Go https://gitlab.com/gitlab-org/gitaly/merge_requests/632 - Encode OperationsService errors in UTF-8 before sending them diff --git a/internal/service/repository/repository.go b/internal/service/repository/repository.go index 726b04f0b..27ae78b83 100644 --- a/internal/service/repository/repository.go +++ b/internal/service/repository/repository.go @@ -1,11 +1,15 @@ package repository import ( + "io/ioutil" + "golang.org/x/net/context" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" pb "gitlab.com/gitlab-org/gitaly-proto/go" + "gitlab.com/gitlab-org/gitaly/internal/git" "gitlab.com/gitlab-org/gitaly/internal/helper" - "gitlab.com/gitlab-org/gitaly/internal/rubyserver" ) // Deprecated @@ -23,15 +27,23 @@ func (s *server) RepositoryExists(ctx context.Context, in *pb.RepositoryExistsRe } func (s *server) HasLocalBranches(ctx context.Context, in *pb.HasLocalBranchesRequest) (*pb.HasLocalBranchesResponse, error) { - client, err := s.RepositoryServiceClient(ctx) + args := []string{"for-each-ref", "--count=1", "refs/heads"} + cmd, err := git.Command(ctx, in.GetRepository(), args...) if err != nil { - return nil, err + if _, ok := status.FromError(err); ok { + return nil, err + } + return nil, status.Errorf(codes.Internal, "HasLocalBranches: gitCommand: %v", err) } - clientCtx, err := rubyserver.SetHeaders(ctx, in.GetRepository()) + buff, err := ioutil.ReadAll(cmd) if err != nil { - return nil, err + return nil, status.Errorf(codes.Internal, "HasLocalBranches: read: %v", err) + } + + if err := cmd.Wait(); err != nil { + return nil, status.Errorf(codes.Internal, "HasLocalBranches: cmd wait: %v", err) } - return client.HasLocalBranches(clientCtx, in) + return &pb.HasLocalBranchesResponse{Value: len(buff) > 0}, nil } diff --git a/ruby/lib/gitaly_server/repository_service.rb b/ruby/lib/gitaly_server/repository_service.rb index cddb4e351..baec95884 100644 --- a/ruby/lib/gitaly_server/repository_service.rb +++ b/ruby/lib/gitaly_server/repository_service.rb @@ -14,12 +14,6 @@ module GitalyServer end end - def has_local_branches(request, call) # rubocop:disable Naming/PredicateName - repo = Gitlab::Git::Repository.from_gitaly(request.repository, call) - - Gitaly::HasLocalBranchesResponse.new(value: repo.has_local_branches?) - end - def fetch_source_branch(request, call) bridge_exceptions do source_repository = Gitlab::Git::GitalyRemoteRepository.new(request.source_repository, call) |