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:
authorStan Hu <stanhu@gmail.com>2021-02-19 10:31:55 +0300
committerStan Hu <stanhu@gmail.com>2021-02-19 10:31:55 +0300
commit39eb8e22213fa33fa58a12a28b5c8098ef428c8e (patch)
tree697d29f6cd5af54697fd46ca4685b3c840884173
parent31a14c8d720e3fbe217d6956dc22efce97ecf5cd (diff)
Test fix for #3461sh-fix-issue-3461
-rw-r--r--cmd/gitaly-git2go/commit/commit.go10
-rw-r--r--internal/git2go/commit.go6
-rw-r--r--internal/gitaly/service/operations/commit_files.go2
-rw-r--r--internal/gitaly/service/operations/commit_files_test.go12
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{
{