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:
authorJames Fargher <jfargher@gitlab.com>2023-06-01 07:07:34 +0300
committerJames Fargher <jfargher@gitlab.com>2023-06-02 00:26:16 +0300
commit8e23e474cbef5c82c29db72c3f21fac9925220a9 (patch)
tree96fc0b5a9682ecc9e8e1f85087ce11932c95b784
parent76f60b767b821fb9ae92109fcc46981e4619b4e5 (diff)
ref service: Implement HeadOnly option for FindDefaultBranchNameuse_head_reference
-rw-r--r--internal/gitaly/service/ref/refs.go11
-rw-r--r--internal/gitaly/service/ref/refs_test.go53
2 files changed, 60 insertions, 4 deletions
diff --git a/internal/gitaly/service/ref/refs.go b/internal/gitaly/service/ref/refs.go
index b1c9b5c79..5627a0073 100644
--- a/internal/gitaly/service/ref/refs.go
+++ b/internal/gitaly/service/ref/refs.go
@@ -76,11 +76,18 @@ func (s *server) FindDefaultBranchName(ctx context.Context, in *gitalypb.FindDef
}
repo := s.localrepo(repository)
+ if in.GetHeadOnly() {
+ head, err := repo.HeadReference(ctx)
+ if err != nil {
+ return nil, structerr.NewInternal("head reference: %w", err)
+ }
+ return &gitalypb.FindDefaultBranchNameResponse{Name: []byte(head)}, nil
+ }
+
defaultBranch, err := repo.GetDefaultBranch(ctx)
if err != nil {
- return nil, structerr.NewInternal("%w", err)
+ return nil, structerr.NewInternal("get default branch: %w", err)
}
-
return &gitalypb.FindDefaultBranchNameResponse{Name: []byte(defaultBranch)}, nil
}
diff --git a/internal/gitaly/service/ref/refs_test.go b/internal/gitaly/service/ref/refs_test.go
index 3af702173..557d12820 100644
--- a/internal/gitaly/service/ref/refs_test.go
+++ b/internal/gitaly/service/ref/refs_test.go
@@ -53,6 +53,25 @@ func TestFindDefaultBranchName(t *testing.T) {
expectedName: git.DefaultRef,
},
{
+ desc: "successful, HEAD only",
+ setup: func(t *testing.T, ctx context.Context, cfg config.Cfg) setupData {
+ repo, repoPath := gittest.CreateRepository(t, ctx, cfg)
+
+ oid := gittest.WriteCommit(t, cfg, repoPath, gittest.WithReference(git.DefaultRef.String()))
+ gittest.WriteCommit(t, cfg, repoPath, gittest.WithReference(git.LegacyDefaultRef.String()), gittest.WithParents(oid))
+ gittest.WriteCommit(t, cfg, repoPath, gittest.WithBranch("apple"), gittest.WithParents(oid))
+ gittest.WriteCommit(t, cfg, repoPath, gittest.WithBranch("banana"), gittest.WithParents(oid))
+
+ return setupData{
+ request: &gitalypb.FindDefaultBranchNameRequest{
+ Repository: repo,
+ HeadOnly: true,
+ },
+ }
+ },
+ expectedName: git.DefaultRef,
+ },
+ {
desc: "successful, single branch",
setup: func(t *testing.T, ctx context.Context, cfg config.Cfg) setupData {
repo, repoPath := gittest.CreateRepository(t, ctx, cfg)
@@ -68,6 +87,22 @@ func TestFindDefaultBranchName(t *testing.T) {
expectedName: "refs/heads/banana",
},
{
+ desc: "successful, single branch, HEAD only",
+ setup: func(t *testing.T, ctx context.Context, cfg config.Cfg) setupData {
+ repo, repoPath := gittest.CreateRepository(t, ctx, cfg)
+
+ gittest.WriteCommit(t, cfg, repoPath, gittest.WithBranch("banana"))
+
+ return setupData{
+ request: &gitalypb.FindDefaultBranchNameRequest{
+ Repository: repo,
+ HeadOnly: true,
+ },
+ }
+ },
+ expectedName: git.DefaultRef,
+ },
+ {
desc: "successful, updated default",
setup: func(t *testing.T, ctx context.Context, cfg config.Cfg) setupData {
repo, repoPath := gittest.CreateRepository(t, ctx, cfg)
@@ -99,6 +134,20 @@ func TestFindDefaultBranchName(t *testing.T) {
},
},
{
+ desc: "empty repository, HEAD only",
+ setup: func(t *testing.T, ctx context.Context, cfg config.Cfg) setupData {
+ repo, _ := gittest.CreateRepository(t, ctx, cfg)
+
+ return setupData{
+ request: &gitalypb.FindDefaultBranchNameRequest{
+ Repository: repo,
+ HeadOnly: true,
+ },
+ }
+ },
+ expectedName: git.DefaultRef,
+ },
+ {
desc: "repository not provided",
setup: func(t *testing.T, ctx context.Context, cfg config.Cfg) setupData {
return setupData{
@@ -118,7 +167,7 @@ func TestFindDefaultBranchName(t *testing.T) {
Repository: &gitalypb.Repository{StorageName: cfg.Storages[0].Name, RelativePath: "made/up/path"},
},
expectedErr: status.Error(codes.NotFound, testhelper.GitalyOrPraefect(
- `GetRepoPath: not a git repository: "`+cfg.Storages[0].Path+`/made/up/path"`,
+ `get default branch: GetRepoPath: not a git repository: "`+cfg.Storages[0].Path+`/made/up/path"`,
`accessor call: route repository accessor: consistent storages: repository "default"/"made/up/path" not found`,
)),
}
@@ -134,7 +183,7 @@ func TestFindDefaultBranchName(t *testing.T) {
Repository: &gitalypb.Repository{StorageName: "invalid", RelativePath: repo.GetRelativePath()},
},
expectedErr: status.Error(codes.InvalidArgument, testhelper.GitalyOrPraefect(
- `GetStorageByName: no such storage: "invalid"`,
+ `get default branch: GetStorageByName: no such storage: "invalid"`,
"repo scoped: invalid Repository",
)),
}