diff --git a/changelogs/unreleased/rewrite-fetch-remote.yml b/changelogs/unreleased/rewrite-fetch-remote.yml new file mode 100644 index 0000000000000000000000000000000000000000..cae0417bff7adeb2dbe534e6b8185b1b5f6dbc88 --- /dev/null +++ b/changelogs/unreleased/rewrite-fetch-remote.yml @@ -0,0 +1,5 @@ +--- +title: Reimplement FetchRemote in go +merge_request: 1071 +author: +type: performance diff --git a/internal/service/repository/fetch_remote.go b/internal/service/repository/fetch_remote.go index b29db8b56a57ace184f2f471fa76e859bd76a7c1..6d90b3dc87df602f7d61190a7628ec1bae56dfe7 100644 --- a/internal/service/repository/fetch_remote.go +++ b/internal/service/repository/fetch_remote.go @@ -3,31 +3,37 @@ package repository import ( "context" - grpc_logrus "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus" - log "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly-proto/go/gitalypb" - "gitlab.com/gitlab-org/gitaly/internal/rubyserver" + "gitlab.com/gitlab-org/gitaly/internal/git" ) func (s *server) FetchRemote(ctx context.Context, in *gitalypb.FetchRemoteRequest) (*gitalypb.FetchRemoteResponse, error) { - grpc_logrus.Extract(ctx).WithFields(log.Fields{ - "Remote": in.GetRemote(), - "Force": in.GetForce(), - "NoTags": in.GetNoTags(), - "Timeout": in.GetTimeout(), - "SSHKey": in.GetSshKey(), - "KnownHosts": in.GetKnownHosts(), - }).Debug("FetchRemote") - - client, err := s.RepositoryServiceClient(ctx) + repo := in.GetRepository() + + force := "" + if in.GetForce() { + force = "--force" + } + + prune := "--prune" + if in.GetNoPrune() { + prune = "" + } + + tags := "--tags" + if in.GetNoTags() { + tags = "--no-tags" + } + + cmd, err := git.Command(ctx, repo, "fetch", in.GetRemote(), prune, force, tags, "--quiet") if err != nil { return nil, err } - clientCtx, err := rubyserver.SetHeaders(ctx, in.GetRepository()) - if err != nil { + if err := cmd.Wait(); err != nil { return nil, err } - return client.FetchRemote(clientCtx, in) + return &gitalypb.FetchRemoteResponse{}, nil + }