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 (GitLab) <jacob@gitlab.com>2018-05-31 12:27:12 +0300
committerJacob Vosmaer (GitLab) <jacob@gitlab.com>2018-05-31 12:27:12 +0300
commit23b02b7a1eec41875fe7cb9ea61559ea4eadd3b5 (patch)
tree9be4854bc821f8fb49c92be403ea760bfac2d2f2
parent1e22488dd549bc435e5c047bd364efd9a0fdf939 (diff)
parentd7de4c2697655a3480986a63e70f815f44f9a7ee (diff)
Merge branch '1175-rewrite-repositoryservice-fsck-in-go' into 'master'
Rewrite Repository::Fsck in Go Closes #1175 See merge request gitlab-org/gitaly!738
-rw-r--r--.ruby-version1
-rw-r--r--changelogs/unreleased/1175-rewrite-repositoryservice-fsck-in-go.yml5
-rw-r--r--internal/service/repository/fsck.go21
-rw-r--r--internal/service/repository/fsck_test.go2
-rw-r--r--internal/testhelper/testhelper.go4
-rw-r--r--ruby/lib/gitaly_server/repository_service.rb2
-rw-r--r--ruby/lib/gitlab/git/repository.rb3
7 files changed, 29 insertions, 9 deletions
diff --git a/.ruby-version b/.ruby-version
new file mode 100644
index 000000000..00355e29d
--- /dev/null
+++ b/.ruby-version
@@ -0,0 +1 @@
+2.3.7
diff --git a/changelogs/unreleased/1175-rewrite-repositoryservice-fsck-in-go.yml b/changelogs/unreleased/1175-rewrite-repositoryservice-fsck-in-go.yml
new file mode 100644
index 000000000..149d680a9
--- /dev/null
+++ b/changelogs/unreleased/1175-rewrite-repositoryservice-fsck-in-go.yml
@@ -0,0 +1,5 @@
+---
+title: Rewrite Repository::Fsck in Go
+merge_request: 738
+author:
+type: changed
diff --git a/internal/service/repository/fsck.go b/internal/service/repository/fsck.go
index 6286160b2..a7764661e 100644
--- a/internal/service/repository/fsck.go
+++ b/internal/service/repository/fsck.go
@@ -1,23 +1,34 @@
package repository
import (
+ "bytes"
+ "os/exec"
+
pb "gitlab.com/gitlab-org/gitaly-proto/go"
+ "gitlab.com/gitlab-org/gitaly/internal/command"
+ "gitlab.com/gitlab-org/gitaly/internal/git/alternates"
"golang.org/x/net/context"
-
- "gitlab.com/gitlab-org/gitaly/internal/rubyserver"
)
func (s *server) Fsck(ctx context.Context, req *pb.FsckRequest) (*pb.FsckResponse, error) {
- client, err := s.RepositoryServiceClient(ctx)
+ var stdout, stderr bytes.Buffer
+
+ repoPath, env, err := alternates.PathAndEnv(req.GetRepository())
if err != nil {
return nil, err
}
- clientCtx, err := rubyserver.SetHeaders(ctx, req.GetRepository())
+ args := []string{"--git-dir", repoPath, "fsck"}
+
+ cmd, err := command.New(ctx, exec.Command(command.GitPath(), args...), nil, &stdout, &stderr, env...)
if err != nil {
return nil, err
}
- return client.Fsck(clientCtx, req)
+ if err = cmd.Wait(); err != nil {
+ return &pb.FsckResponse{Error: append(stdout.Bytes(), stderr.Bytes()...)}, nil
+ }
+
+ return &pb.FsckResponse{}, nil
}
diff --git a/internal/service/repository/fsck_test.go b/internal/service/repository/fsck_test.go
index 6e457f924..e8777df67 100644
--- a/internal/service/repository/fsck_test.go
+++ b/internal/service/repository/fsck_test.go
@@ -78,5 +78,5 @@ func TestFsckFailureSlightlyBrokenRepo(t *testing.T) {
assert.NoError(t, err)
assert.NotNil(t, c)
assert.NotEmpty(t, string(c.GetError()))
- assert.Contains(t, string(c.GetError()), "Could not fsck repository")
+ assert.Contains(t, string(c.GetError()), "error: HEAD: invalid sha1 pointer")
}
diff --git a/internal/testhelper/testhelper.go b/internal/testhelper/testhelper.go
index d856fada2..31b90e8c6 100644
--- a/internal/testhelper/testhelper.go
+++ b/internal/testhelper/testhelper.go
@@ -133,11 +133,11 @@ func AssertGrpcError(t *testing.T, err error, expectedCode codes.Code, _deprecat
// Check that the code matches
status, _ := status.FromError(err)
if code := status.Code(); code != expectedCode {
- t.Fatalf("Expected an error with code %v, got %v. The error was %v", expectedCode, code, err)
+ t.Fatalf("Expected an error with code '%v', got '%v'. The error was '%v'", expectedCode, code, err)
}
if _deprecated != "" && !strings.Contains(err.Error(), _deprecated) {
- t.Fatalf("Expected an error message containing %v, got %v", _deprecated, err.Error())
+ t.Fatalf("Expected an error message containing '%v', got '%v'", _deprecated, err.Error())
}
}
diff --git a/ruby/lib/gitaly_server/repository_service.rb b/ruby/lib/gitaly_server/repository_service.rb
index 48ee81a1a..ec913c363 100644
--- a/ruby/lib/gitaly_server/repository_service.rb
+++ b/ruby/lib/gitaly_server/repository_service.rb
@@ -24,6 +24,8 @@ 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)
diff --git a/ruby/lib/gitlab/git/repository.rb b/ruby/lib/gitlab/git/repository.rb
index b61c03b97..97d956309 100644
--- a/ruby/lib/gitlab/git/repository.rb
+++ b/ruby/lib/gitlab/git/repository.rb
@@ -94,7 +94,8 @@ module Gitlab
end
# This method is mandatory and no longer exists in gitlab-ce.
- # TODO: implement it in Go because it is slow, and gitaly-ruby gets restarted a lot.
+ # 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.new("Could not fsck repository: #{msg}") unless status.zero?