From 779eac1cc50936a84d34bab08d729193fbb0b7ea Mon Sep 17 00:00:00 2001 From: Quang-Minh Nguyen Date: Fri, 22 Dec 2023 14:47:53 +0700 Subject: Refactor transaction manager's packed-refs assertion In some prior commits, we added pack-refs housekeeping task support to the transaction manager. We introduced a new assertion helper to verify the content of packed-refs file. That helper reads the content and compares with the expected packed-refs text. That approach makes the test setup hard because the expected packed-refs must match the actual content of packed-refs on disk, line by line. This commit enhances that helper. It now parses the content of packed-refs file. The expected value becomes a map of ref name to its object ID. --- .../gitaly/storage/storagemgr/testhelper_test.go | 76 +++-- .../transaction_manager_alternate_test.go | 126 +++++--- .../transaction_manager_default_branch_test.go | 44 ++- .../storagemgr/transaction_manager_hook_test.go | 36 ++- .../transaction_manager_housekeeping_test.go | 320 +++++++-------------- .../storagemgr/transaction_manager_refs_test.go | 158 +++++++--- .../storagemgr/transaction_manager_repo_test.go | 44 ++- .../storage/storagemgr/transaction_manager_test.go | 72 +++-- 8 files changed, 499 insertions(+), 377 deletions(-) diff --git a/internal/gitaly/storage/storagemgr/testhelper_test.go b/internal/gitaly/storage/storagemgr/testhelper_test.go index 73b2cdd71..214e8783e 100644 --- a/internal/gitaly/storage/storagemgr/testhelper_test.go +++ b/internal/gitaly/storage/storagemgr/testhelper_test.go @@ -42,23 +42,21 @@ func TestMain(m *testing.M) { type RepositoryState struct { // DefaultBranch is the expected refname that HEAD points to. DefaultBranch git.ReferenceName - // References are references expected to exist. - References []git.Reference // CustomHooks is the expected state of the custom hooks. CustomHooks testhelper.DirectoryState // Objects are the objects that are expected to exist. Objects []git.ObjectID // Alternate is the content of 'objects/info/alternates'. Alternate string - // PackedRefs is the expected state of the packed-refs and loose references. - PackedRefs *PackedRefsState + // References is the references that should exist, including ones in the packed-refs file and loose references. + References *ReferencesState } -// PackedRefsState describes the asserted state of packed-refs and loose references. It's mostly used for verifying +// ReferencesState describes the asserted state of packed-refs and loose references. It's mostly used for verifying // pack-refs housekeeping task. -type PackedRefsState struct { - // PackedRefsContent is the content of pack-refs file, line by line - PackedRefsContent []string +type ReferencesState struct { + // PackedReferences is the content of pack-refs file, line by line + PackedReferences map[git.ReferenceName]git.ObjectID // LooseReferences is the exact list of loose references outside packed-refs. LooseReferences map[git.ReferenceName]git.ObjectID } @@ -73,11 +71,27 @@ func RequireRepositoryState(tb testing.TB, ctx context.Context, cfg config.Cfg, headReference, err := repo.HeadReference(ctx) require.NoError(tb, err) - actualReferences, err := repo.GetReferences(ctx) + actualReferencesState, err := collectReferencesState(tb, expected, repoPath) require.NoError(tb, err) - actualPackedRefsState, err := collectPackedRefsState(tb, expected, repoPath) + // Verify if the combination of packed-refs and loose refs match the point of view of Git. + referencesFromFile := map[git.ReferenceName]git.ObjectID{} + if actualReferencesState != nil { + for name, oid := range actualReferencesState.PackedReferences { + referencesFromFile[name] = oid + } + for name, oid := range actualReferencesState.LooseReferences { + referencesFromFile[name] = oid + } + } + + actualGitReferences := map[git.ReferenceName]git.ObjectID{} + gitReferences, err := repo.GetReferences(ctx) require.NoError(tb, err) + for _, ref := range gitReferences { + actualGitReferences[ref.Name] = git.ObjectID(ref.Target) + } + require.Equalf(tb, referencesFromFile, actualGitReferences, "references perceived by Git don't match the ones in loose reference and packed-refs file") // Assert if there is any empty directory in the refs hierarchy excepts for heads and tags rootRefsDir := filepath.Join(repoPath, "refs") @@ -121,24 +135,22 @@ func RequireRepositoryState(tb testing.TB, ctx context.Context, cfg config.Cfg, require.Equal(tb, RepositoryState{ DefaultBranch: expected.DefaultBranch, - References: expected.References, Objects: expectedObjects, Alternate: expected.Alternate, - PackedRefs: expected.PackedRefs, + References: expected.References, }, RepositoryState{ DefaultBranch: headReference, - References: actualReferences, Objects: actualObjects, Alternate: string(alternate), - PackedRefs: actualPackedRefsState, + References: actualReferencesState, }, ) testhelper.RequireDirectoryState(tb, filepath.Join(repoPath, repoutil.CustomHooksDir), "", expected.CustomHooks) } -func collectPackedRefsState(tb testing.TB, expected RepositoryState, repoPath string) (*PackedRefsState, error) { - if expected.PackedRefs == nil { +func collectReferencesState(tb testing.TB, expected RepositoryState, repoPath string) (*ReferencesState, error) { + if expected.References == nil { return nil, nil } @@ -149,6 +161,32 @@ func collectPackedRefsState(tb testing.TB, expected RepositoryState, repoPath st } else { require.NoError(tb, err) } + + // Parse packed-refs file + var packedReferences map[git.ReferenceName]git.ObjectID + if len(packRefsFile) != 0 { + packedReferences = make(map[git.ReferenceName]git.ObjectID) + lines := strings.Split(string(packRefsFile), "\n") + require.Equalf(tb, strings.TrimSpace(lines[0]), "# pack-refs with: peeled fully-peeled sorted", "invalid packed-refs header") + lines = lines[1:] + for _, line := range lines { + line = strings.TrimSpace(line) + + if len(line) == 0 { + continue + } + + // We don't care about the peeled object ID. + if strings.HasPrefix(line, "^") { + continue + } + + parts := strings.Split(line, " ") + require.Equalf(tb, 2, len(parts), "invalid packed-refs format: %q", line) + packedReferences[git.ReferenceName(parts[1])] = git.ObjectID(parts[0]) + } + } + // Walk and collect loose refs. looseReferences := map[git.ReferenceName]git.ObjectID{} refsPath := filepath.Join(repoPath, "refs") @@ -169,9 +207,9 @@ func collectPackedRefsState(tb testing.TB, expected RepositoryState, repoPath st return nil })) - return &PackedRefsState{ - PackedRefsContent: strings.Split(strings.TrimSpace(string(packRefsFile)), "\n"), - LooseReferences: looseReferences, + return &ReferencesState{ + PackedReferences: packedReferences, + LooseReferences: looseReferences, }, nil } diff --git a/internal/gitaly/storage/storagemgr/transaction_manager_alternate_test.go b/internal/gitaly/storage/storagemgr/transaction_manager_alternate_test.go index 4583e5e63..c709e57b2 100644 --- a/internal/gitaly/storage/storagemgr/transaction_manager_alternate_test.go +++ b/internal/gitaly/storage/storagemgr/transaction_manager_alternate_test.go @@ -56,8 +56,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact }, Repositories: RepositoryStates{ "pool": { - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -134,8 +136,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact }, Repositories: RepositoryStates{ "pool": { - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -225,8 +229,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact }, Repositories: RepositoryStates{ "pool": { - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -779,8 +785,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact }, Repositories: RepositoryStates{ "pool": { - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -788,8 +796,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact }, }, "member": { - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -864,8 +874,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact }, Repositories: RepositoryStates{ "pool": { - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -873,8 +885,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact }, }, "member": { - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.Second.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.Second.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -956,8 +970,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact Repositories: RepositoryStates{ "pool": { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -984,8 +1000,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact }, Repositories: RepositoryStates{ "pool": { - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -1094,8 +1112,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact Repositories: RepositoryStates{ "repository-1": { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -1113,8 +1133,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact }, "repository-2": { DefaultBranch: "refs/heads/branch", - References: []git.Reference{ - {Name: "refs/heads/branch", Target: setup.Commits.Third.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/branch": setup.Commits.Third.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -1145,8 +1167,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact }, Repositories: RepositoryStates{ "repository-1": { - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -1164,8 +1188,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact }, "repository-2": { DefaultBranch: "refs/heads/branch", - References: []git.Reference{ - {Name: "refs/heads/branch", Target: setup.Commits.Third.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/branch": setup.Commits.Third.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -1267,8 +1293,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact Repositories: RepositoryStates{ "pool": { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -1277,8 +1305,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact }, "member": { DefaultBranch: "refs/heads/branch", - References: []git.Reference{ - {Name: "refs/heads/branch", Target: setup.Commits.Second.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/branch": setup.Commits.Second.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -1299,8 +1329,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact }, Repositories: RepositoryStates{ "pool": { - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -1309,8 +1341,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact }, "member": { DefaultBranch: "refs/heads/branch", - References: []git.Reference{ - {Name: "refs/heads/branch", Target: setup.Commits.Second.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/branch": setup.Commits.Second.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -1399,8 +1433,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact Repositories: RepositoryStates{ "pool": { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -1409,8 +1445,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact }, "member": { DefaultBranch: "refs/heads/branch", - References: []git.Reference{ - {Name: "refs/heads/branch", Target: setup.Commits.Second.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/branch": setup.Commits.Second.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -1431,8 +1469,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact }, Repositories: RepositoryStates{ "pool": { - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -1441,8 +1481,10 @@ func generateAlternateTests(t *testing.T, setup testTransactionSetup) []transact }, "member": { DefaultBranch: "refs/heads/branch", - References: []git.Reference{ - {Name: "refs/heads/branch", Target: setup.Commits.Second.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/branch": setup.Commits.Second.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, diff --git a/internal/gitaly/storage/storagemgr/transaction_manager_default_branch_test.go b/internal/gitaly/storage/storagemgr/transaction_manager_default_branch_test.go index 200877c9a..e77094fbf 100644 --- a/internal/gitaly/storage/storagemgr/transaction_manager_default_branch_test.go +++ b/internal/gitaly/storage/storagemgr/transaction_manager_default_branch_test.go @@ -42,9 +42,11 @@ func generateDefaultBranchTests(t *testing.T, setup testTransactionSetup) []tran Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/branch2", - References: []git.Reference{ - {Name: "refs/heads/branch2", Target: setup.Commits.First.OID.String()}, - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/branch2": setup.Commits.First.OID, + "refs/heads/main": setup.Commits.First.OID, + }, }, }, }, @@ -87,9 +89,11 @@ func generateDefaultBranchTests(t *testing.T, setup testTransactionSetup) []tran Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/branch2", - References: []git.Reference{ - {Name: "refs/heads/branch2", Target: setup.Commits.First.OID.String()}, - {Name: "refs/heads/main", Target: setup.Commits.Second.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/branch2": setup.Commits.First.OID, + "refs/heads/main": setup.Commits.Second.OID, + }, }, }, }, @@ -138,7 +142,11 @@ func generateDefaultBranchTests(t *testing.T, setup testTransactionSetup) []tran Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/non-existent", - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, + }, }, }, }, @@ -195,8 +203,10 @@ func generateDefaultBranchTests(t *testing.T, setup testTransactionSetup) []tran Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/branch2", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, }, }, @@ -239,9 +249,11 @@ func generateDefaultBranchTests(t *testing.T, setup testTransactionSetup) []tran Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/branch2", - References: []git.Reference{ - {Name: "refs/heads/branch2", Target: setup.Commits.First.OID.String()}, - {Name: "refs/heads/main", Target: setup.Commits.Second.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/branch2": setup.Commits.First.OID, + "refs/heads/main": setup.Commits.Second.OID, + }, }, }, }, @@ -296,9 +308,11 @@ func generateDefaultBranchTests(t *testing.T, setup testTransactionSetup) []tran Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/branch2", - References: []git.Reference{ - {Name: "refs/heads/branch2", Target: setup.Commits.First.OID.String()}, - {Name: "refs/heads/main", Target: setup.Commits.Second.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.Second.OID, + "refs/heads/branch2": setup.Commits.First.OID, + }, }, }, }, diff --git a/internal/gitaly/storage/storagemgr/transaction_manager_hook_test.go b/internal/gitaly/storage/storagemgr/transaction_manager_hook_test.go index f849f1c6f..c21df6497 100644 --- a/internal/gitaly/storage/storagemgr/transaction_manager_hook_test.go +++ b/internal/gitaly/storage/storagemgr/transaction_manager_hook_test.go @@ -394,7 +394,11 @@ func generateCustomHooksTests(t *testing.T, setup testTransactionSetup) []transa Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.Second.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.Second.OID, + }, + }, }, }, }, @@ -435,7 +439,11 @@ func generateCustomHooksTests(t *testing.T, setup testTransactionSetup) []transa Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.Second.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.Second.OID, + }, + }, }, }, }, @@ -479,7 +487,11 @@ func generateCustomHooksTests(t *testing.T, setup testTransactionSetup) []transa Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.Second.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.Second.OID, + }, + }, }, }, }, @@ -529,7 +541,11 @@ func generateCustomHooksTests(t *testing.T, setup testTransactionSetup) []transa Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.Second.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.Second.OID, + }, + }, }, }, }, @@ -576,7 +592,11 @@ func generateCustomHooksTests(t *testing.T, setup testTransactionSetup) []transa Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.Second.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.Second.OID, + }, + }, }, }, }, @@ -628,7 +648,11 @@ func generateCustomHooksTests(t *testing.T, setup testTransactionSetup) []transa Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, + }, }, }, }, diff --git a/internal/gitaly/storage/storagemgr/transaction_manager_housekeeping_test.go b/internal/gitaly/storage/storagemgr/transaction_manager_housekeeping_test.go index a2b5ad5ea..ebfab1bd0 100644 --- a/internal/gitaly/storage/storagemgr/transaction_manager_housekeeping_test.go +++ b/internal/gitaly/storage/storagemgr/transaction_manager_housekeeping_test.go @@ -38,7 +38,7 @@ func generateHousekeepingTests(t *testing.T, ctx context.Context, testPartitionI lightweightTag := setup.Commits.Diverging.OID annotatedTag := setup.AnnotatedTags[0] - directoryStateWithPackedRefs := func(lsn LSN) testhelper.DirectoryState { + directoryStateWithReferences := func(lsn LSN) testhelper.DirectoryState { return testhelper.DirectoryState{ "/": {Mode: fs.ModeDir | perm.PrivateDir}, "/wal": {Mode: fs.ModeDir | perm.PrivateDir}, @@ -48,12 +48,12 @@ func generateHousekeepingTests(t *testing.T, ctx context.Context, testPartitionI } } - defaultRefs := []git.Reference{ - {Name: "refs/heads/branch-1", Target: setup.Commits.Second.OID.String()}, - {Name: "refs/heads/branch-2", Target: setup.Commits.Third.OID.String()}, - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, - {Name: "refs/tags/v1.0.0", Target: lightweightTag.String()}, - {Name: "refs/tags/v2.0.0", Target: annotatedTag.OID.String()}, + defaultReferences := map[git.ReferenceName]git.ObjectID{ + "refs/heads/branch-1": setup.Commits.Second.OID, + "refs/heads/branch-2": setup.Commits.Third.OID, + "refs/heads/main": setup.Commits.First.OID, + "refs/tags/v1.0.0": lightweightTag, + "refs/tags/v2.0.0": annotatedTag.OID, } return []transactionTestCase{ @@ -88,29 +88,19 @@ func generateHousekeepingTests(t *testing.T, ctx context.Context, testPartitionI Database: DatabaseState{ string(keyAppliedLSN(setup.PartitionID)): LSN(2).toProto(), }, - Directory: directoryStateWithPackedRefs(1), + Directory: directoryStateWithReferences(1), Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/branch-1", Target: setup.Commits.Second.OID.String()}, - {Name: "refs/heads/branch-2", Target: setup.Commits.Third.OID.String()}, - // `main` points to the second commit now - {Name: "refs/heads/main", Target: setup.Commits.Second.OID.String()}, - {Name: "refs/tags/v1.0.0", Target: lightweightTag.String()}, - {Name: "refs/tags/v2.0.0", Target: annotatedTag.OID.String()}, - }, - PackedRefs: &PackedRefsState{ - PackedRefsContent: []string{ - "# pack-refs with: peeled fully-peeled sorted ", - fmt.Sprintf("%s refs/heads/branch-1", setup.Commits.Second.OID.String()), - fmt.Sprintf("%s refs/heads/branch-2", setup.Commits.Third.OID.String()), + References: &ReferencesState{ + PackedReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/branch-1": setup.Commits.Second.OID, + "refs/heads/branch-2": setup.Commits.Third.OID, // But `main` in packed-refs file points to the first // commit. - fmt.Sprintf("%s refs/heads/main", setup.Commits.First.OID.String()), - fmt.Sprintf("%s refs/tags/v1.0.0", lightweightTag.String()), - fmt.Sprintf("%s refs/tags/v2.0.0", annotatedTag.OID.String()), - fmt.Sprintf("^%s", setup.Commits.Diverging.OID.String()), + "refs/heads/main": setup.Commits.First.OID, + "refs/tags/v1.0.0": lightweightTag, + "refs/tags/v2.0.0": annotatedTag.OID, }, LooseReferences: map[git.ReferenceName]git.ObjectID{ // It's shadowed by the loose reference. @@ -172,29 +162,18 @@ func generateHousekeepingTests(t *testing.T, ctx context.Context, testPartitionI Database: DatabaseState{ string(keyAppliedLSN(setup.PartitionID)): LSN(2).toProto(), }, - Directory: directoryStateWithPackedRefs(2), + Directory: directoryStateWithReferences(2), Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/branch-1", Target: setup.Commits.Second.OID.String()}, - {Name: "refs/heads/branch-2", Target: setup.Commits.Third.OID.String()}, - {Name: "refs/heads/branch-3", Target: setup.Commits.Diverging.OID.String()}, - {Name: "refs/heads/main", Target: setup.Commits.Second.OID.String()}, - {Name: "refs/tags/v1.0.0", Target: lightweightTag.String()}, - {Name: "refs/tags/v2.0.0", Target: annotatedTag.OID.String()}, - }, - PackedRefs: &PackedRefsState{ - PackedRefsContent: []string{ - // All refs are packed to the packed-refs file. - "# pack-refs with: peeled fully-peeled sorted ", - fmt.Sprintf("%s refs/heads/branch-1", setup.Commits.Second.OID.String()), - fmt.Sprintf("%s refs/heads/branch-2", setup.Commits.Third.OID.String()), - fmt.Sprintf("%s refs/heads/branch-3", setup.Commits.Diverging.OID.String()), - fmt.Sprintf("%s refs/heads/main", setup.Commits.Second.OID.String()), - fmt.Sprintf("%s refs/tags/v1.0.0", lightweightTag.String()), - fmt.Sprintf("%s refs/tags/v2.0.0", annotatedTag.OID.String()), - fmt.Sprintf("^%s", setup.Commits.Diverging.OID.String()), + References: &ReferencesState{ + PackedReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/branch-1": setup.Commits.Second.OID, + "refs/heads/branch-2": setup.Commits.Third.OID, + "refs/heads/branch-3": setup.Commits.Diverging.OID, + "refs/heads/main": setup.Commits.Second.OID, + "refs/tags/v1.0.0": lightweightTag, + "refs/tags/v2.0.0": annotatedTag.OID, }, LooseReferences: map[git.ReferenceName]git.ObjectID{}, }, @@ -235,32 +214,20 @@ func generateHousekeepingTests(t *testing.T, ctx context.Context, testPartitionI Database: DatabaseState{ string(keyAppliedLSN(setup.PartitionID)): LSN(2).toProto(), }, - Directory: directoryStateWithPackedRefs(2), + Directory: directoryStateWithReferences(2), Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/branch-1", Target: setup.Commits.Second.OID.String()}, - {Name: "refs/heads/branch-2", Target: setup.Commits.Third.OID.String()}, - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, - {Name: "refs/keep-around/1", Target: setup.Commits.First.OID.String()}, - {Name: "refs/merge-requests/1", Target: setup.Commits.Second.OID.String()}, - {Name: "refs/tags/v1.0.0", Target: lightweightTag.String()}, - {Name: "refs/tags/v2.0.0", Target: annotatedTag.OID.String()}, - {Name: "refs/very/deep/nested/ref", Target: setup.Commits.Third.OID.String()}, - }, - PackedRefs: &PackedRefsState{ - PackedRefsContent: []string{ - "# pack-refs with: peeled fully-peeled sorted ", - fmt.Sprintf("%s refs/heads/branch-1", setup.Commits.Second.OID.String()), - fmt.Sprintf("%s refs/heads/branch-2", setup.Commits.Third.OID.String()), - fmt.Sprintf("%s refs/heads/main", setup.Commits.First.OID.String()), - fmt.Sprintf("%s refs/keep-around/1", setup.Commits.First.OID.String()), - fmt.Sprintf("%s refs/merge-requests/1", setup.Commits.Second.OID.String()), - fmt.Sprintf("%s refs/tags/v1.0.0", lightweightTag.String()), - fmt.Sprintf("%s refs/tags/v2.0.0", annotatedTag.OID.String()), - fmt.Sprintf("^%s", setup.Commits.Diverging.OID.String()), - fmt.Sprintf("%s refs/very/deep/nested/ref", setup.Commits.Third.OID.String()), + References: &ReferencesState{ + PackedReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/branch-1": setup.Commits.Second.OID, + "refs/heads/branch-2": setup.Commits.Third.OID, + "refs/heads/main": setup.Commits.First.OID, + "refs/keep-around/1": setup.Commits.First.OID, + "refs/merge-requests/1": setup.Commits.Second.OID, + "refs/tags/v1.0.0": lightweightTag, + "refs/tags/v2.0.0": annotatedTag.OID, + "refs/very/deep/nested/ref": setup.Commits.Third.OID, }, LooseReferences: map[git.ReferenceName]git.ObjectID{}, }, @@ -299,28 +266,17 @@ func generateHousekeepingTests(t *testing.T, ctx context.Context, testPartitionI Database: DatabaseState{ string(keyAppliedLSN(setup.PartitionID)): LSN(2).toProto(), }, - Directory: directoryStateWithPackedRefs(2), + Directory: directoryStateWithReferences(2), Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/branch-1", Target: setup.Commits.Second.OID.String()}, - {Name: "refs/heads/branch-2", Target: setup.Commits.Third.OID.String()}, - {Name: "refs/heads/branch-3", Target: setup.Commits.Diverging.OID.String()}, - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, - {Name: "refs/keep-around/1", Target: setup.Commits.First.OID.String()}, - {Name: "refs/tags/v1.0.0", Target: lightweightTag.String()}, - {Name: "refs/tags/v2.0.0", Target: annotatedTag.OID.String()}, - }, - PackedRefs: &PackedRefsState{ - PackedRefsContent: []string{ - "# pack-refs with: peeled fully-peeled sorted ", - fmt.Sprintf("%s refs/heads/branch-1", setup.Commits.Second.OID.String()), - fmt.Sprintf("%s refs/heads/branch-2", setup.Commits.Third.OID.String()), - fmt.Sprintf("%s refs/heads/main", setup.Commits.First.OID.String()), - fmt.Sprintf("%s refs/tags/v1.0.0", lightweightTag.String()), - fmt.Sprintf("%s refs/tags/v2.0.0", annotatedTag.OID.String()), - fmt.Sprintf("^%s", setup.Commits.Diverging.OID.String()), + References: &ReferencesState{ + PackedReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/branch-1": setup.Commits.Second.OID, + "refs/heads/branch-2": setup.Commits.Third.OID, + "refs/heads/main": setup.Commits.First.OID, + "refs/tags/v1.0.0": lightweightTag, + "refs/tags/v2.0.0": annotatedTag.OID, }, LooseReferences: map[git.ReferenceName]git.ObjectID{ // Although ref creation commits beforehand, pack-refs @@ -365,28 +321,17 @@ func generateHousekeepingTests(t *testing.T, ctx context.Context, testPartitionI Database: DatabaseState{ string(keyAppliedLSN(setup.PartitionID)): LSN(2).toProto(), }, - Directory: directoryStateWithPackedRefs(1), + Directory: directoryStateWithReferences(1), Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/branch-1", Target: setup.Commits.Second.OID.String()}, - {Name: "refs/heads/branch-2", Target: setup.Commits.Third.OID.String()}, - {Name: "refs/heads/branch-3", Target: setup.Commits.Diverging.OID.String()}, - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, - {Name: "refs/keep-around/1", Target: setup.Commits.First.OID.String()}, - {Name: "refs/tags/v1.0.0", Target: lightweightTag.String()}, - {Name: "refs/tags/v2.0.0", Target: annotatedTag.OID.String()}, - }, - PackedRefs: &PackedRefsState{ - PackedRefsContent: []string{ - "# pack-refs with: peeled fully-peeled sorted ", - fmt.Sprintf("%s refs/heads/branch-1", setup.Commits.Second.OID.String()), - fmt.Sprintf("%s refs/heads/branch-2", setup.Commits.Third.OID.String()), - fmt.Sprintf("%s refs/heads/main", setup.Commits.First.OID.String()), - fmt.Sprintf("%s refs/tags/v1.0.0", lightweightTag.String()), - fmt.Sprintf("%s refs/tags/v2.0.0", annotatedTag.OID.String()), - fmt.Sprintf("^%s", setup.Commits.Diverging.OID.String()), + References: &ReferencesState{ + PackedReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/branch-1": setup.Commits.Second.OID, + "refs/heads/branch-2": setup.Commits.Third.OID, + "refs/heads/main": setup.Commits.First.OID, + "refs/tags/v1.0.0": lightweightTag, + "refs/tags/v2.0.0": annotatedTag.OID, }, LooseReferences: map[git.ReferenceName]git.ObjectID{ // pack-refs task is unaware of these new refs. It keeps @@ -432,26 +377,17 @@ func generateHousekeepingTests(t *testing.T, ctx context.Context, testPartitionI Database: DatabaseState{ string(keyAppliedLSN(setup.PartitionID)): LSN(2).toProto(), }, - Directory: directoryStateWithPackedRefs(2), + Directory: directoryStateWithReferences(2), Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/branch-1", Target: setup.Commits.Third.OID.String()}, - {Name: "refs/heads/branch-2", Target: setup.Commits.Diverging.OID.String()}, - {Name: "refs/heads/main", Target: setup.Commits.Second.OID.String()}, - {Name: "refs/tags/v1.0.0", Target: setup.Commits.First.OID.String()}, - {Name: "refs/tags/v2.0.0", Target: annotatedTag.OID.String()}, - }, - PackedRefs: &PackedRefsState{ - PackedRefsContent: []string{ - "# pack-refs with: peeled fully-peeled sorted ", - fmt.Sprintf("%s refs/heads/branch-1", setup.Commits.Second.OID.String()), // Outdated - fmt.Sprintf("%s refs/heads/branch-2", setup.Commits.Third.OID.String()), // Outdated - fmt.Sprintf("%s refs/heads/main", setup.Commits.First.OID.String()), // Outdated - fmt.Sprintf("%s refs/tags/v1.0.0", lightweightTag.String()), // Outdated - fmt.Sprintf("%s refs/tags/v2.0.0", annotatedTag.OID.String()), // Still up-to-date - fmt.Sprintf("^%s", setup.Commits.Diverging.OID.String()), + References: &ReferencesState{ + PackedReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/branch-1": setup.Commits.Second.OID, // Outdated + "refs/heads/branch-2": setup.Commits.Third.OID, // Outdated + "refs/heads/main": setup.Commits.First.OID, // Outdated + "refs/tags/v1.0.0": lightweightTag, // Outdated + "refs/tags/v2.0.0": annotatedTag.OID, // Still up-to-date }, LooseReferences: map[git.ReferenceName]git.ObjectID{ // Updated refs shadow the ones in the packed-refs file. @@ -498,26 +434,17 @@ func generateHousekeepingTests(t *testing.T, ctx context.Context, testPartitionI Database: DatabaseState{ string(keyAppliedLSN(setup.PartitionID)): LSN(2).toProto(), }, - Directory: directoryStateWithPackedRefs(1), + Directory: directoryStateWithReferences(1), Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/branch-1", Target: setup.Commits.Third.OID.String()}, - {Name: "refs/heads/branch-2", Target: setup.Commits.Diverging.OID.String()}, - {Name: "refs/heads/main", Target: setup.Commits.Second.OID.String()}, - {Name: "refs/tags/v1.0.0", Target: setup.Commits.First.OID.String()}, - {Name: "refs/tags/v2.0.0", Target: annotatedTag.OID.String()}, - }, - PackedRefs: &PackedRefsState{ - PackedRefsContent: []string{ - "# pack-refs with: peeled fully-peeled sorted ", - fmt.Sprintf("%s refs/heads/branch-1", setup.Commits.Second.OID.String()), // Outdated - fmt.Sprintf("%s refs/heads/branch-2", setup.Commits.Third.OID.String()), // Outdated - fmt.Sprintf("%s refs/heads/main", setup.Commits.First.OID.String()), // Outdated - fmt.Sprintf("%s refs/tags/v1.0.0", lightweightTag.String()), // Outdated - fmt.Sprintf("%s refs/tags/v2.0.0", annotatedTag.OID.String()), - fmt.Sprintf("^%s", setup.Commits.Diverging.OID.String()), + References: &ReferencesState{ + PackedReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/branch-1": setup.Commits.Second.OID, // Outdated + "refs/heads/branch-2": setup.Commits.Third.OID, // Outdated + "refs/heads/main": setup.Commits.First.OID, // Outdated + "refs/tags/v1.0.0": lightweightTag, // Outdated + "refs/tags/v2.0.0": annotatedTag.OID, }, LooseReferences: map[git.ReferenceName]git.ObjectID{ "refs/heads/main": setup.Commits.Second.OID, @@ -565,15 +492,10 @@ func generateHousekeepingTests(t *testing.T, ctx context.Context, testPartitionI Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/branch-2", Target: setup.Commits.Third.OID.String()}, - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, - {Name: "refs/tags/v2.0.0", Target: annotatedTag.OID.String()}, - }, - PackedRefs: &PackedRefsState{ + References: &ReferencesState{ // Empty packed-refs. It means the pack-refs task is not // executed. - PackedRefsContent: []string{""}, + PackedReferences: nil, // Deleted refs went away. LooseReferences: map[git.ReferenceName]git.ObjectID{ "refs/heads/branch-2": setup.Commits.Third.OID, @@ -627,14 +549,7 @@ func generateHousekeepingTests(t *testing.T, ctx context.Context, testPartitionI Repositories: RepositoryStates{ relativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/branch-1", Target: setup.Commits.Second.OID.String()}, - {Name: "refs/heads/branch-2", Target: setup.Commits.Third.OID.String()}, - {Name: "refs/tags/v1.0.0", Target: lightweightTag.String()}, - {Name: "refs/tags/v2.0.0", Target: annotatedTag.OID.String()}, - }, - PackedRefs: &PackedRefsState{ - PackedRefsContent: []string{""}, + References: &ReferencesState{ LooseReferences: map[git.ReferenceName]git.ObjectID{ "refs/heads/branch-1": setup.Commits.Second.OID, "refs/heads/branch-2": setup.Commits.Third.OID, @@ -722,13 +637,9 @@ func generateHousekeepingTests(t *testing.T, ctx context.Context, testPartitionI setup.Commits.First.OID, }, DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, - }, - PackedRefs: &PackedRefsState{ - PackedRefsContent: []string{ - "# pack-refs with: peeled fully-peeled sorted ", - fmt.Sprintf("%s refs/heads/main", setup.Commits.First.OID.String()), + References: &ReferencesState{ + PackedReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, }, LooseReferences: map[git.ReferenceName]git.ObjectID{}, }, @@ -790,22 +701,15 @@ func generateHousekeepingTests(t *testing.T, ctx context.Context, testPartitionI Database: DatabaseState{ string(keyAppliedLSN(setup.PartitionID)): LSN(2).toProto(), }, - Directory: directoryStateWithPackedRefs(1), + Directory: directoryStateWithReferences(1), Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/branch-2", Target: setup.Commits.Third.OID.String()}, - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, - {Name: "refs/tags/v2.0.0", Target: annotatedTag.OID.String()}, - }, - PackedRefs: &PackedRefsState{ - PackedRefsContent: []string{ - "# pack-refs with: peeled fully-peeled sorted ", - fmt.Sprintf("%s refs/heads/branch-2", setup.Commits.Third.OID.String()), - fmt.Sprintf("%s refs/heads/main", setup.Commits.First.OID.String()), - fmt.Sprintf("%s refs/tags/v2.0.0", annotatedTag.OID.String()), - fmt.Sprintf("^%s", setup.Commits.Diverging.OID.String()), + References: &ReferencesState{ + PackedReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/branch-2": setup.Commits.Third.OID, + "refs/heads/main": setup.Commits.First.OID, + "refs/tags/v2.0.0": annotatedTag.OID, }, LooseReferences: map[git.ReferenceName]git.ObjectID{}, }, @@ -876,13 +780,9 @@ func generateHousekeepingTests(t *testing.T, ctx context.Context, testPartitionI Repositories: RepositoryStates{ relativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/empty-dir/parent/main", Target: setup.Commits.First.OID.String()}, - }, - PackedRefs: &PackedRefsState{ - PackedRefsContent: []string{ - "# pack-refs with: peeled fully-peeled sorted ", - fmt.Sprintf("%s refs/heads/empty-dir/parent/main", setup.Commits.First.OID.String()), + References: &ReferencesState{ + PackedReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/empty-dir/parent/main": setup.Commits.First.OID, }, LooseReferences: map[git.ReferenceName]git.ObjectID{}, }, @@ -908,7 +808,9 @@ func generateHousekeepingTests(t *testing.T, ctx context.Context, testPartitionI Repositories: RepositoryStates{ relativePath: { DefaultBranch: "refs/heads/main", - References: defaultRefs, + References: &ReferencesState{ + LooseReferences: defaultReferences, + }, }, }, }, @@ -933,7 +835,9 @@ func generateHousekeepingTests(t *testing.T, ctx context.Context, testPartitionI Repositories: RepositoryStates{ relativePath: { DefaultBranch: "refs/heads/main", - References: defaultRefs, + References: &ReferencesState{ + LooseReferences: defaultReferences, + }, }, }, }, @@ -969,22 +873,13 @@ func generateHousekeepingTests(t *testing.T, ctx context.Context, testPartitionI Database: DatabaseState{ string(keyAppliedLSN(setup.PartitionID)): LSN(1).toProto(), }, - Directory: directoryStateWithPackedRefs(1), + Directory: directoryStateWithReferences(1), Repositories: RepositoryStates{ relativePath: { DefaultBranch: "refs/heads/main", - References: defaultRefs, - PackedRefs: &PackedRefsState{ - PackedRefsContent: []string{ - "# pack-refs with: peeled fully-peeled sorted ", - fmt.Sprintf("%s refs/heads/branch-1", setup.Commits.Second.OID.String()), - fmt.Sprintf("%s refs/heads/branch-2", setup.Commits.Third.OID.String()), - fmt.Sprintf("%s refs/heads/main", setup.Commits.First.OID.String()), - fmt.Sprintf("%s refs/tags/v1.0.0", lightweightTag.String()), - fmt.Sprintf("%s refs/tags/v2.0.0", annotatedTag.OID.String()), - fmt.Sprintf("^%s", setup.Commits.Diverging.OID.String()), - }, - LooseReferences: map[git.ReferenceName]git.ObjectID{}, + References: &ReferencesState{ + PackedReferences: defaultReferences, + LooseReferences: map[git.ReferenceName]git.ObjectID{}, }, }, }, @@ -1055,13 +950,9 @@ func generateHousekeepingTests(t *testing.T, ctx context.Context, testPartitionI setup.Commits.First.OID, }, DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, - }, - PackedRefs: &PackedRefsState{ - PackedRefsContent: []string{ - "# pack-refs with: peeled fully-peeled sorted ", - fmt.Sprintf("%s refs/heads/main", setup.Commits.First.OID.String()), + References: &ReferencesState{ + PackedReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, }, LooseReferences: map[git.ReferenceName]git.ObjectID{}, }, @@ -1136,18 +1027,9 @@ func generateHousekeepingTests(t *testing.T, ctx context.Context, testPartitionI Repositories: RepositoryStates{ relativePath: { DefaultBranch: "refs/heads/main", - References: defaultRefs, - PackedRefs: &PackedRefsState{ - PackedRefsContent: []string{ - "# pack-refs with: peeled fully-peeled sorted ", - fmt.Sprintf("%s refs/heads/branch-1", setup.Commits.Second.OID.String()), - fmt.Sprintf("%s refs/heads/branch-2", setup.Commits.Third.OID.String()), - fmt.Sprintf("%s refs/heads/main", setup.Commits.First.OID.String()), - fmt.Sprintf("%s refs/tags/v1.0.0", lightweightTag.String()), - fmt.Sprintf("%s refs/tags/v2.0.0", annotatedTag.OID.String()), - fmt.Sprintf("^%s", setup.Commits.Diverging.OID.String()), - }, - LooseReferences: map[git.ReferenceName]git.ObjectID{}, + References: &ReferencesState{ + PackedReferences: defaultReferences, + LooseReferences: map[git.ReferenceName]git.ObjectID{}, }, }, }, @@ -1200,10 +1082,8 @@ func generateHousekeepingTests(t *testing.T, ctx context.Context, testPartitionI Repositories: RepositoryStates{ relativePath: { DefaultBranch: "refs/heads/main", - References: nil, - PackedRefs: &PackedRefsState{ - PackedRefsContent: []string{""}, - LooseReferences: map[git.ReferenceName]git.ObjectID{}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{}, }, Objects: []git.ObjectID{}, }, diff --git a/internal/gitaly/storage/storagemgr/transaction_manager_refs_test.go b/internal/gitaly/storage/storagemgr/transaction_manager_refs_test.go index 4749bba26..915aadc30 100644 --- a/internal/gitaly/storage/storagemgr/transaction_manager_refs_test.go +++ b/internal/gitaly/storage/storagemgr/transaction_manager_refs_test.go @@ -72,7 +72,11 @@ func generateInvalidReferencesTests(t *testing.T, setup testTransactionSetup) [] Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{{Name: "refs/heads/main", Target: commit.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": commit.OID, + }, + }, }, }, }, @@ -178,7 +182,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, + }, }, }, }, @@ -208,7 +216,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, + }, }, }, }, @@ -345,7 +357,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t }, Repositories: RepositoryStates{ setup.RelativePath: { - References: []git.Reference{{Name: "refs/heads/parent", Target: setup.Commits.First.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/parent": setup.Commits.First.OID, + }, + }, }, }, }, @@ -426,7 +442,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t }, Repositories: RepositoryStates{ setup.RelativePath: { - References: []git.Reference{{Name: "refs/heads/parent/child", Target: setup.Commits.First.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/parent/child": setup.Commits.First.OID, + }, + }, }, }, }, @@ -488,7 +508,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t }, Repositories: RepositoryStates{ setup.RelativePath: { - References: []git.Reference{{Name: "refs/heads/parent/child", Target: setup.Commits.First.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/parent/child": setup.Commits.First.OID, + }, + }, }, }, }, @@ -533,7 +557,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t }, Repositories: RepositoryStates{ setup.RelativePath: { - References: []git.Reference{{Name: "refs/tags/v1.0.0", Target: setup.ObjectHash.EmptyTreeOID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/tags/v1.0.0": setup.ObjectHash.EmptyTreeOID, + }, + }, }, }, }, @@ -591,9 +619,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, - {Name: "refs/heads/non-conflicting", Target: setup.Commits.Second.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + "refs/heads/non-conflicting": setup.Commits.Second.OID, + }, }, }, }, @@ -638,7 +668,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, + }, }, }, }, @@ -681,7 +715,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, + }, }, }, }, @@ -719,7 +757,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.Second.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.Second.OID, + }, + }, }, }, }, @@ -760,9 +802,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, - {Name: "refs/heads/non-conflicting", Target: setup.Commits.Third.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + "refs/heads/non-conflicting": setup.Commits.Third.OID, + }, }, }, }, @@ -808,9 +852,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, - {Name: "refs/heads/non-conflicting", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + "refs/heads/non-conflicting": setup.Commits.First.OID, + }, }, }, }, @@ -868,7 +914,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, + }, }, }, }, @@ -970,8 +1020,10 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t }, Repositories: RepositoryStates{ setup.RelativePath: { - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, }, }, @@ -1016,11 +1068,13 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t }, Repositories: RepositoryStates{ setup.RelativePath: { - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, - // The symbolic reference should be converted to a normal reference if it is - // updated. - {Name: "refs/heads/symbolic", Target: setup.Commits.Second.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + // The symbolic reference should be converted to a normal reference if it is + // updated. + "refs/heads/symbolic": setup.Commits.Second.OID, + }, }, }, }, @@ -1062,7 +1116,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, + }, }, }, }, @@ -1107,9 +1165,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, - {Name: "refs/heads/non-conflicting", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + "refs/heads/non-conflicting": setup.Commits.First.OID, + }, }, }, }, @@ -1178,7 +1238,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t }, Repositories: RepositoryStates{ setup.RelativePath: { - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.Second.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.Second.OID, + }, + }, }, }, }, @@ -1257,7 +1321,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t }, Repositories: RepositoryStates{ setup.RelativePath: { - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, + }, }, }, }, @@ -1304,7 +1372,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t }, Repositories: RepositoryStates{ setup.RelativePath: { - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.Second.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.Second.OID, + }, + }, }, }, }, @@ -1351,7 +1423,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t }, Repositories: RepositoryStates{ setup.RelativePath: { - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.Second.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.Second.OID, + }, + }, }, }, }, @@ -1403,7 +1479,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t }, Repositories: RepositoryStates{ setup.RelativePath: { - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, + }, }, }, }, @@ -1433,7 +1513,11 @@ func generateModifyReferencesTests(t *testing.T, setup testTransactionSetup) []t }, Repositories: RepositoryStates{ setup.RelativePath: { - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, + }, }, }, }, diff --git a/internal/gitaly/storage/storagemgr/transaction_manager_repo_test.go b/internal/gitaly/storage/storagemgr/transaction_manager_repo_test.go index a28c3241b..cd5448748 100644 --- a/internal/gitaly/storage/storagemgr/transaction_manager_repo_test.go +++ b/internal/gitaly/storage/storagemgr/transaction_manager_repo_test.go @@ -114,9 +114,11 @@ func generateCreateRepositoryTests(t *testing.T, setup testTransactionSetup) []t Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/branch", - References: []git.Reference{ - {Name: "refs/heads/branch", Target: setup.Commits.Second.OID.String()}, - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + "refs/heads/branch": setup.Commits.Second.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -193,8 +195,10 @@ func generateCreateRepositoryTests(t *testing.T, setup testTransactionSetup) []t Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -248,8 +252,10 @@ func generateCreateRepositoryTests(t *testing.T, setup testTransactionSetup) []t Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/other", - References: []git.Reference{ - {Name: "refs/heads/other", Target: setup.Commits.Second.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/other": setup.Commits.Second.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -359,8 +365,10 @@ func generateCreateRepositoryTests(t *testing.T, setup testTransactionSetup) []t Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/branch", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, CustomHooks: testhelper.DirectoryState{ "/": {Mode: umask.Mask(fs.ModeDir | perm.PrivateDir)}, @@ -439,8 +447,10 @@ func generateCreateRepositoryTests(t *testing.T, setup testTransactionSetup) []t }, Repositories: RepositoryStates{ "repository-1": { - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -458,8 +468,10 @@ func generateCreateRepositoryTests(t *testing.T, setup testTransactionSetup) []t }, "repository-2": { DefaultBranch: "refs/heads/branch", - References: []git.Reference{ - {Name: "refs/heads/branch", Target: setup.Commits.Third.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/branch": setup.Commits.Third.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -887,8 +899,10 @@ func generateDeleteRepositoryTests(t *testing.T, setup testTransactionSetup) []t Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/new-head", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, diff --git a/internal/gitaly/storage/storagemgr/transaction_manager_test.go b/internal/gitaly/storage/storagemgr/transaction_manager_test.go index 3383e289c..2e5e2b8b8 100644 --- a/internal/gitaly/storage/storagemgr/transaction_manager_test.go +++ b/internal/gitaly/storage/storagemgr/transaction_manager_test.go @@ -358,7 +358,11 @@ func generateCommonTests(t *testing.T, ctx context.Context, setup testTransactio Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, + }, }, }, }, @@ -502,8 +506,10 @@ func generateCommonTests(t *testing.T, ctx context.Context, setup testTransactio Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -573,8 +579,10 @@ func generateCommonTests(t *testing.T, ctx context.Context, setup testTransactio Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.Third.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.Third.OID, + }, }, CustomHooks: testhelper.DirectoryState{ "/": {Mode: fs.ModeDir | perm.PrivateDir}, @@ -635,8 +643,10 @@ func generateCommonTests(t *testing.T, ctx context.Context, setup testTransactio Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -747,8 +757,10 @@ func generateCommonTests(t *testing.T, ctx context.Context, setup testTransactio Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.Third.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.Third.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -810,8 +822,10 @@ func generateCommonTests(t *testing.T, ctx context.Context, setup testTransactio Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -899,8 +913,10 @@ func generateCommonTests(t *testing.T, ctx context.Context, setup testTransactio Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -1444,8 +1460,10 @@ func generateCommonTests(t *testing.T, ctx context.Context, setup testTransactio Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/new-head", - References: []git.Reference{ - {Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, @@ -1491,7 +1509,11 @@ func generateCommonTests(t *testing.T, ctx context.Context, setup testTransactio Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/new-head", - References: []git.Reference{{Name: "refs/heads/main", Target: setup.Commits.First.OID.String()}}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + }, + }, Objects: []git.ObjectID{ setup.ObjectHash.EmptyTreeOID, setup.Commits.First.OID, @@ -1616,9 +1638,11 @@ func generateCommittedEntriesTests(t *testing.T, setup testTransactionSetup) []t Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/branch-1", Target: string(setup.Commits.First.OID)}, - {Name: "refs/heads/main", Target: string(setup.Commits.First.OID)}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + "refs/heads/branch-1": setup.Commits.First.OID, + }, }, }, }, @@ -1725,10 +1749,12 @@ func generateCommittedEntriesTests(t *testing.T, setup testTransactionSetup) []t Repositories: RepositoryStates{ setup.RelativePath: { DefaultBranch: "refs/heads/main", - References: []git.Reference{ - {Name: "refs/heads/branch-1", Target: string(setup.Commits.First.OID)}, - {Name: "refs/heads/branch-2", Target: string(setup.Commits.First.OID)}, - {Name: "refs/heads/main", Target: string(setup.Commits.First.OID)}, + References: &ReferencesState{ + LooseReferences: map[git.ReferenceName]git.ObjectID{ + "refs/heads/main": setup.Commits.First.OID, + "refs/heads/branch-1": setup.Commits.First.OID, + "refs/heads/branch-2": setup.Commits.First.OID, + }, }, }, }, -- cgit v1.2.3