diff options
author | Stan Hu <stanhu@gmail.com> | 2021-02-19 10:31:55 +0300 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2021-02-19 10:31:55 +0300 |
commit | 39eb8e22213fa33fa58a12a28b5c8098ef428c8e (patch) | |
tree | 697d29f6cd5af54697fd46ca4685b3c840884173 | |
parent | 31a14c8d720e3fbe217d6956dc22efce97ecf5cd (diff) |
Test fix for #3461sh-fix-issue-3461
-rw-r--r-- | cmd/gitaly-git2go/commit/commit.go | 10 | ||||
-rw-r--r-- | internal/git2go/commit.go | 6 | ||||
-rw-r--r-- | internal/gitaly/service/operations/commit_files.go | 2 | ||||
-rw-r--r-- | internal/gitaly/service/operations/commit_files_test.go | 12 |
4 files changed, 30 insertions, 0 deletions
diff --git a/cmd/gitaly-git2go/commit/commit.go b/cmd/gitaly-git2go/commit/commit.go index c8051c7a2..8522e7f7c 100644 --- a/cmd/gitaly-git2go/commit/commit.go +++ b/cmd/gitaly-git2go/commit/commit.go @@ -88,6 +88,16 @@ func commit(ctx context.Context, params git2go.CommitParams) (string, error) { } func apply(action git2go.Action, repo *git.Repository, index *git.Index) error { + err := applyHelper(action, repo, index) + + if git.IsErrorClass(err, git.ErrClassIndex) { + return git2go.IndexError(err.Error()) + } + + return err +} + +func applyHelper(action git2go.Action, repo *git.Repository, index *git.Index) error { switch action := action.(type) { case git2go.ChangeFileMode: return applyChangeFileMode(action, index) diff --git a/internal/git2go/commit.go b/internal/git2go/commit.go index 2a9478609..f512643ce 100644 --- a/internal/git2go/commit.go +++ b/internal/git2go/commit.go @@ -33,6 +33,12 @@ func (err DirectoryExistsError) Error() string { return fmt.Sprintf("directory exists: %q", string(err)) } +type IndexError string + +func (err IndexError) Error() string { + return fmt.Sprintf("index error: %q", string(err)) +} + // CommitParams contains the information and the steps to build a commit. type CommitParams struct { // Repository is the path of the repository to operate on. diff --git a/internal/gitaly/service/operations/commit_files.go b/internal/gitaly/service/operations/commit_files.go index 2e8d70f29..d72f8e796 100644 --- a/internal/gitaly/service/operations/commit_files.go +++ b/internal/gitaly/service/operations/commit_files.go @@ -81,6 +81,8 @@ func (s *Server) UserCommitFiles(stream gitalypb.OperationService_UserCommitFile switch { case errors.As(err, &indexError): response = gitalypb.UserCommitFilesResponse{IndexError: indexError.Error()} + case errors.As(err, new(git2go.IndexError)): + response = gitalypb.UserCommitFilesResponse{IndexError: err.Error()} case errors.As(err, new(git2go.DirectoryExistsError)): response = gitalypb.UserCommitFilesResponse{IndexError: "A directory with this name already exists"} case errors.As(err, new(git2go.FileExistsError)): diff --git a/internal/gitaly/service/operations/commit_files_test.go b/internal/gitaly/service/operations/commit_files_test.go index e72151e9f..d2f7415ec 100644 --- a/internal/gitaly/service/operations/commit_files_test.go +++ b/internal/gitaly/service/operations/commit_files_test.go @@ -233,6 +233,18 @@ func testUserCommitFiles(t *testing.T, ctx context.Context) { }, }, { + desc: "create file with .git/hooks/pre-commit", + steps: []step{ + { + actions: []*gitalypb.UserCommitFilesRequest{ + createFileHeaderRequest(".git/hooks/pre-commit"), + actionContentRequest("content-1"), + }, + indexError: "invalid path: '.git/hooks/pre-commit'", + }, + }, + }, + { desc: "create file without content", steps: []step{ { |