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:
authorKim Carlbäcker <kim.carlbacker@gmail.com>2018-01-17 21:20:56 +0300
committerKim Carlbäcker <kim.carlbacker@gmail.com>2018-01-17 21:20:56 +0300
commitb428a650bfaefdd1e65631dd54d9f455fc60d67c (patch)
treec5d2091d15628ab486ac7578d13ce4bab3592814
parent59467cb9a9526abf28d78d8cec01f366c5cef2cd (diff)
parent19e8e8552776dfb73d5eb4407b3b6ec786210e0d (diff)
Merge branch 'fix-write-ref-validation' into 'master'
Fix Validation for Repository::WriteRef See merge request gitlab-org/gitaly!542
-rw-r--r--CHANGELOG.md2
-rw-r--r--internal/service/repository/write_ref.go2
-rw-r--r--internal/service/repository/write_ref_test.go30
3 files changed, 32 insertions, 2 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d82c7da5c..5df5ef2ec 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,8 @@ UNRELEASED
- Add tempdir package
https://gitlab.com/gitlab-org/gitaly/merge_requests/538
+- Fix validation for Repositoryservice::WriteRef
+ https://gitlab.com/gitlab-org/gitaly/merge_requests/542
v0.70.0
diff --git a/internal/service/repository/write_ref.go b/internal/service/repository/write_ref.go
index 61726d3f1..86de86038 100644
--- a/internal/service/repository/write_ref.go
+++ b/internal/service/repository/write_ref.go
@@ -44,7 +44,7 @@ func validateWriteRefRequest(req *pb.WriteRefRequest) error {
}
}
- if !bytes.HasPrefix(req.Ref, []byte("refs/")) {
+ if !bytes.Equal(req.Ref, []byte("HEAD")) && !bytes.HasPrefix(req.Ref, []byte("refs/")) {
return fmt.Errorf("Ref has to be a full reference")
}
return nil
diff --git a/internal/service/repository/write_ref_test.go b/internal/service/repository/write_ref_test.go
index 18196076a..9be86546c 100644
--- a/internal/service/repository/write_ref_test.go
+++ b/internal/service/repository/write_ref_test.go
@@ -2,6 +2,7 @@ package repository
import (
"bytes"
+ "path"
"testing"
"github.com/stretchr/testify/require"
@@ -34,6 +35,24 @@ func TestWriteRefSuccessful(t *testing.T) {
},
},
{
+ desc: "rugged update refs/keep-around/4a24d82dbca5c11c61556f3b35ca472b7463187e",
+ req: &pb.WriteRefRequest{
+ Repository: testRepo,
+ Ref: []byte("refs/keep-around/4a24d82dbca5c11c61556f3b35ca472b7463187e"),
+ Revision: []byte("4a24d82dbca5c11c61556f3b35ca472b7463187e"),
+ Shell: false,
+ },
+ },
+ {
+ desc: "rugged update HEAD to refs/heads/master",
+ req: &pb.WriteRefRequest{
+ Repository: testRepo,
+ Ref: []byte("HEAD"),
+ Revision: []byte("refs/heads/master"),
+ Shell: false,
+ },
+ },
+ {
desc: "shell update refs/heads/master",
req: &pb.WriteRefRequest{
Repository: testRepo,
@@ -62,6 +81,14 @@ func TestWriteRefSuccessful(t *testing.T) {
require.NoError(t, err)
+ if bytes.Equal(tc.req.Ref, []byte("HEAD")) {
+ content := testhelper.MustReadFile(t, path.Join(testRepoPath, "HEAD"))
+
+ refRevision := bytes.Join([][]byte{[]byte("ref: "), tc.req.Revision, []byte("\n")}, nil)
+
+ require.EqualValues(t, content, refRevision)
+ return
+ }
rev := testhelper.MustRunCommand(t, nil, "git", "--git-dir", testRepoPath, "log", "--pretty=%H", "-1", string(tc.req.Ref))
rev = bytes.Replace(rev, []byte("\n"), nil, 1)
@@ -100,11 +127,12 @@ func TestWriteRefValidationError(t *testing.T) {
},
},
{
- desc: "non-prefixed ref name",
+ desc: "non-prefixed ref name for shell",
req: &pb.WriteRefRequest{
Repository: testRepo,
Ref: []byte("master"),
Revision: []byte("498214de67004b1da3d820901307bed2a68a8ef6"),
+ Shell: true,
},
},
{