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:
authorJacob Vosmaer <jacob@gitlab.com>2018-12-18 14:34:19 +0300
committerJacob Vosmaer <jacob@gitlab.com>2018-12-18 14:34:19 +0300
commit93c2bcc4c6dc88b73ddd94cbe1bcc165397f0840 (patch)
treeecb1265d29680a5e941ebdcff382020592155427
parentca64e5c24c564dff5e5a68f0bf4f5759a6401ecb (diff)
parentee9f0abe06c9967cf7b0ce29749f8af3bd618f75 (diff)
Merge branch '1293-re-implement-findbranch-in-go' into 'master'
Re-implemented FindBranch in Go See merge request gitlab-org/gitaly!981
-rw-r--r--changelogs/unreleased/1293-re-implement-findbranch-in-go.yml5
-rw-r--r--internal/service/ref/branches.go44
-rw-r--r--ruby/lib/gitaly_server/ref_service.rb1
3 files changed, 47 insertions, 3 deletions
diff --git a/changelogs/unreleased/1293-re-implement-findbranch-in-go.yml b/changelogs/unreleased/1293-re-implement-findbranch-in-go.yml
new file mode 100644
index 000000000..73adc15d6
--- /dev/null
+++ b/changelogs/unreleased/1293-re-implement-findbranch-in-go.yml
@@ -0,0 +1,5 @@
+---
+title: Re-implemented FindBranch in Go
+merge_request: 981
+author:
+type: performance
diff --git a/internal/service/ref/branches.go b/internal/service/ref/branches.go
index 6d03816f7..09aa25189 100644
--- a/internal/service/ref/branches.go
+++ b/internal/service/ref/branches.go
@@ -1,9 +1,17 @@
package ref
import (
+ "bufio"
+ "io"
+ "strings"
+
"gitlab.com/gitlab-org/gitaly-proto/go/gitalypb"
+ "gitlab.com/gitlab-org/gitaly/internal/git"
+ "gitlab.com/gitlab-org/gitaly/internal/git/log"
"gitlab.com/gitlab-org/gitaly/internal/rubyserver"
"golang.org/x/net/context"
+ "google.golang.org/grpc/codes"
+ "google.golang.org/grpc/status"
)
func (s *server) CreateBranch(ctx context.Context, req *gitalypb.CreateBranchRequest) (*gitalypb.CreateBranchResponse, error) {
@@ -35,15 +43,45 @@ func (s *server) DeleteBranch(ctx context.Context, req *gitalypb.DeleteBranchReq
}
func (s *server) FindBranch(ctx context.Context, req *gitalypb.FindBranchRequest) (*gitalypb.FindBranchResponse, error) {
- client, err := s.RefServiceClient(ctx)
+ refName := string(req.GetName())
+ if len(refName) == 0 {
+ return nil, status.Errorf(codes.InvalidArgument, "Branch name cannot be empty")
+ }
+ repo := req.GetRepository()
+
+ if strings.HasPrefix(refName, "refs/heads/") {
+ refName = strings.TrimPrefix(refName, "refs/heads/")
+ } else if strings.HasPrefix(refName, "heads/") {
+ refName = strings.TrimPrefix(refName, "heads/")
+ }
+
+ cmd, err := git.Command(ctx, repo, "for-each-ref", "--format", "%(objectname)", "refs/heads/"+refName)
if err != nil {
return nil, err
}
- clientCtx, err := rubyserver.SetHeaders(ctx, req.GetRepository())
+ reader := bufio.NewReader(cmd)
+ revision, _, err := reader.ReadLine()
if err != nil {
+ if err == io.EOF {
+ return &gitalypb.FindBranchResponse{}, nil
+ }
+ return nil, err
+ }
+
+ commit, err := log.GetCommit(ctx, repo, string(revision))
+ if err != nil {
+ return nil, err
+ }
+
+ if err := cmd.Wait(); err != nil {
return nil, err
}
- return client.FindBranch(clientCtx, req)
+ return &gitalypb.FindBranchResponse{
+ Branch: &gitalypb.Branch{
+ Name: []byte(refName),
+ TargetCommit: commit,
+ },
+ }, nil
}
diff --git a/ruby/lib/gitaly_server/ref_service.rb b/ruby/lib/gitaly_server/ref_service.rb
index 4c0497cf9..9b3fa036c 100644
--- a/ruby/lib/gitaly_server/ref_service.rb
+++ b/ruby/lib/gitaly_server/ref_service.rb
@@ -44,6 +44,7 @@ module GitalyServer
raise GRPC::Internal.new(e.to_s)
end
+ # Deprecated: Will be removed in GitLab 11.8
def find_branch(request, call)
branch_name = request.name
raise GRPC::InvalidArgument.new("empty Name") if branch_name.empty?