diff options
author | Will Chandler <wchandler@gitlab.com> | 2023-01-17 23:29:27 +0300 |
---|---|---|
committer | Will Chandler <wchandler@gitlab.com> | 2023-01-17 23:29:27 +0300 |
commit | 53eb684a8a1b348c651575238510eae68beed0f0 (patch) | |
tree | b731123b12631ad500d49301e718d86a7adfa3da | |
parent | a5859ed296033140bb4472686c7f9bd3f9e357f9 (diff) | |
parent | 7d560469232125e87868093caabf44f0022b080a (diff) |
Merge branch 'pks-git-stats-cleanup' into 'master'
git/stats: Small cleanups for repository info infrastucture
See merge request https://gitlab.com/gitlab-org/gitaly/-/merge_requests/5261
Merged-by: Will Chandler <wchandler@gitlab.com>
Approved-by: Quang-Minh Nguyen <qmnguyen@gitlab.com>
Approved-by: Will Chandler <wchandler@gitlab.com>
Reviewed-by: Patrick Steinhardt <psteinhardt@gitlab.com>
Reviewed-by: Quang-Minh Nguyen <qmnguyen@gitlab.com>
Co-authored-by: Patrick Steinhardt <psteinhardt@gitlab.com>
-rw-r--r-- | internal/git/housekeeping/objects_test.go | 17 | ||||
-rw-r--r-- | internal/git/housekeeping/optimization_strategy.go | 2 | ||||
-rw-r--r-- | internal/git/housekeeping/optimize_repository_test.go | 2 | ||||
-rw-r--r-- | internal/git/objectpool/fetch.go | 2 | ||||
-rw-r--r-- | internal/git/objectpool/link_test.go | 15 | ||||
-rw-r--r-- | internal/git/stats/repository_info.go | 68 | ||||
-rw-r--r-- | internal/git/stats/repository_info_test.go | 22 | ||||
-rw-r--r-- | internal/gitaly/service/objectpool/reduplicate_test.go | 2 | ||||
-rw-r--r-- | internal/gitaly/service/repository/midx.go | 19 | ||||
-rw-r--r-- | internal/gitaly/service/repository/midx_test.go | 36 | ||||
-rw-r--r-- | internal/gitaly/service/repository/repack_test.go | 27 |
11 files changed, 102 insertions, 110 deletions
diff --git a/internal/git/housekeeping/objects_test.go b/internal/git/housekeeping/objects_test.go index f30148a0c..9076f3a14 100644 --- a/internal/git/housekeeping/objects_test.go +++ b/internal/git/housekeeping/objects_test.go @@ -1,7 +1,6 @@ package housekeeping import ( - "context" "path/filepath" "testing" @@ -13,18 +12,18 @@ import ( "gitlab.com/gitlab-org/gitaly/v15/internal/testhelper/testcfg" ) -func requireObjectCount(t *testing.T, ctx context.Context, repo *localrepo.Repo, expectedObjects uint64) { +func requireObjectCount(t *testing.T, repo *localrepo.Repo, expectedObjects uint64) { t.Helper() - objects, err := stats.LooseObjects(ctx, repo) + objects, err := stats.LooseObjects(repo) require.NoError(t, err) require.Equal(t, expectedObjects, objects) } -func requirePackfileCount(t *testing.T, repoPath string, expectedPackfiles int) { +func requirePackfileCount(t *testing.T, repo *localrepo.Repo, expectedPackfiles uint64) { t.Helper() - packfiles, err := stats.PackfilesCount(repoPath) + packfiles, err := stats.PackfilesCount(repo) require.NoError(t, err) require.Equal(t, expectedPackfiles, packfiles) } @@ -45,13 +44,13 @@ func TestRepackObjects(t *testing.T) { gittest.WriteCommit(t, cfg, repoPath, gittest.WithBranch("main")) - requireObjectCount(t, ctx, repo, 2) - requirePackfileCount(t, repoPath, 0) + requireObjectCount(t, repo, 2) + requirePackfileCount(t, repo, 0) require.NoError(t, RepackObjects(ctx, repo, RepackObjectsConfig{})) - requireObjectCount(t, ctx, repo, 0) - requirePackfileCount(t, repoPath, 1) + requireObjectCount(t, repo, 0) + requirePackfileCount(t, repo, 1) require.NoFileExists(t, filepath.Join(repoPath, "info", "refs")) require.NoFileExists(t, filepath.Join(repoPath, "objects", "info", "packs")) diff --git a/internal/git/housekeeping/optimization_strategy.go b/internal/git/housekeeping/optimization_strategy.go index b0c62d35c..31b96fffd 100644 --- a/internal/git/housekeeping/optimization_strategy.go +++ b/internal/git/housekeeping/optimization_strategy.go @@ -42,7 +42,7 @@ func NewHeuristicalOptimizationStrategy(ctx context.Context, repo *localrepo.Rep var err error strategy.isObjectPool = IsPoolRepository(repo) - strategy.info, err = stats.RepositoryInfoForRepository(ctx, repo) + strategy.info, err = stats.RepositoryInfoForRepository(repo) if err != nil { return HeuristicalOptimizationStrategy{}, fmt.Errorf("deriving repository info: %w", err) } diff --git a/internal/git/housekeeping/optimize_repository_test.go b/internal/git/housekeeping/optimize_repository_test.go index 6d967d34a..b2caef466 100644 --- a/internal/git/housekeeping/optimize_repository_test.go +++ b/internal/git/housekeeping/optimize_repository_test.go @@ -33,7 +33,7 @@ func TestRepackIfNeeded(t *testing.T) { requirePackfilesAndLooseObjects := func(t *testing.T, repo *localrepo.Repo, expectedPackfiles, expectedLooseObjects uint64) { t.Helper() - info, err := stats.RepositoryInfoForRepository(ctx, repo) + info, err := stats.RepositoryInfoForRepository(repo) require.NoError(t, err) require.Equal(t, expectedPackfiles, info.Packfiles.Count) diff --git a/internal/git/objectpool/fetch.go b/internal/git/objectpool/fetch.go index 35034dacf..8cfece74a 100644 --- a/internal/git/objectpool/fetch.go +++ b/internal/git/objectpool/fetch.go @@ -307,7 +307,7 @@ type referencedObjectTypes struct { func (o *ObjectPool) logStats(ctx context.Context, logger *logrus.Entry) error { fields := logrus.Fields{} - repoInfo, err := stats.RepositoryInfoForRepository(ctx, o.Repo) + repoInfo, err := stats.RepositoryInfoForRepository(o.Repo) if err != nil { return fmt.Errorf("deriving repository info: %w", err) } diff --git a/internal/git/objectpool/link_test.go b/internal/git/objectpool/link_test.go index 5a297ba70..f5ebe66ba 100644 --- a/internal/git/objectpool/link_test.go +++ b/internal/git/objectpool/link_test.go @@ -11,6 +11,7 @@ import ( "github.com/stretchr/testify/require" "gitlab.com/gitlab-org/gitaly/v15/internal/backchannel" "gitlab.com/gitlab-org/gitaly/v15/internal/git/gittest" + "gitlab.com/gitlab-org/gitaly/v15/internal/git/localrepo" "gitlab.com/gitlab-org/gitaly/v15/internal/git/stats" "gitlab.com/gitlab-org/gitaly/v15/internal/gitaly/transaction" "gitlab.com/gitlab-org/gitaly/v15/internal/testhelper" @@ -85,24 +86,24 @@ func TestLink_removeBitmap(t *testing.T) { // Repack both the object pool and the pool member such that they both have bitmaps. gittest.Exec(t, cfg, "-C", poolPath, "repack", "-adb") - requireHasBitmap(t, poolPath, true) + requireHasBitmap(t, pool.Repo, true) gittest.Exec(t, cfg, "-C", repoPath, "repack", "-adb") - requireHasBitmap(t, repoPath, true) + requireHasBitmap(t, repo, true) // After linking the repository to its pool it should not have a bitmap anymore as Git does // not allow for multiple bitmaps to exist. require.NoError(t, pool.Link(ctx, repo)) - requireHasBitmap(t, poolPath, true) - requireHasBitmap(t, repoPath, false) + requireHasBitmap(t, pool.Repo, true) + requireHasBitmap(t, repo, false) // Sanity-check that the repository is still consistent. gittest.Exec(t, cfg, "-C", repoPath, "fsck") } -func requireHasBitmap(t *testing.T, repoPath string, expected bool) { - hasBitmap, err := stats.HasBitmap(repoPath) +func requireHasBitmap(t *testing.T, repo *localrepo.Repo, expected bool) { + packfilesInfo, err := stats.PackfilesInfoForRepository(repo) require.NoError(t, err) - require.Equal(t, expected, hasBitmap) + require.Equal(t, expected, packfilesInfo.HasBitmap) } func TestLink_absoluteLinkExists(t *testing.T) { diff --git a/internal/git/stats/repository_info.go b/internal/git/stats/repository_info.go index fb3d7a6a9..9885ec895 100644 --- a/internal/git/stats/repository_info.go +++ b/internal/git/stats/repository_info.go @@ -19,57 +19,30 @@ import ( // considered old. Currently this is set to being 2 weeks (2 * 7days * 24hours). const StaleObjectsGracePeriod = -14 * 24 * time.Hour -// HasBitmap returns whether or not the repository contains an object bitmap. -func HasBitmap(repoPath string) (bool, error) { - bitmaps, err := filepath.Glob(filepath.Join(repoPath, "objects", "pack", "*.bitmap")) - if err != nil { - return false, err - } - - return len(bitmaps) > 0, nil -} - // PackfilesCount returns the number of packfiles a repository has. -func PackfilesCount(repoPath string) (int, error) { - packFiles, err := GetPackfiles(repoPath) +func PackfilesCount(repo *localrepo.Repo) (uint64, error) { + packfilesInfo, err := PackfilesInfoForRepository(repo) if err != nil { - return 0, err + return 0, fmt.Errorf("deriving packfiles info: %w", err) } - return len(packFiles), nil -} - -// GetPackfiles returns the FileInfo of packfiles inside a repository. -func GetPackfiles(repoPath string) ([]fs.DirEntry, error) { - files, err := os.ReadDir(filepath.Join(repoPath, "objects/pack/")) - if err != nil { - return nil, err - } - - var packFiles []fs.DirEntry - for _, f := range files { - if filepath.Ext(f.Name()) == ".pack" { - packFiles = append(packFiles, f) - } - } - - return packFiles, nil + return packfilesInfo.Count, nil } // LooseObjects returns the number of loose objects that are not in a packfile. -func LooseObjects(ctx context.Context, repo *localrepo.Repo) (uint64, error) { - repoInfo, err := RepositoryInfoForRepository(ctx, repo) +func LooseObjects(repo *localrepo.Repo) (uint64, error) { + objectsInfo, err := LooseObjectsInfoForRepository(repo, time.Now()) if err != nil { return 0, err } - return repoInfo.LooseObjects.Count, nil + return objectsInfo.Count, nil } // LogRepositoryInfo derives RepositoryInfo and calls its `Log()` function, if successful. Otherwise // it logs an error. func LogRepositoryInfo(ctx context.Context, repo *localrepo.Repo) { - repoInfo, err := RepositoryInfoForRepository(ctx, repo) + repoInfo, err := RepositoryInfoForRepository(repo) if err != nil { ctxlogrus.Extract(ctx).WithError(err).Warn("failed reading repository info") } else { @@ -93,7 +66,7 @@ type RepositoryInfo struct { } // RepositoryInfoForRepository computes the RepositoryInfo for a repository. -func RepositoryInfoForRepository(ctx context.Context, repo *localrepo.Repo) (RepositoryInfo, error) { +func RepositoryInfoForRepository(repo *localrepo.Repo) (RepositoryInfo, error) { var info RepositoryInfo var err error @@ -112,7 +85,7 @@ func RepositoryInfoForRepository(ctx context.Context, repo *localrepo.Repo) (Rep return RepositoryInfo{}, fmt.Errorf("counting packfiles: %w", err) } - info.References, err = ReferencesInfoForRepository(ctx, repo) + info.References, err = ReferencesInfoForRepository(repo) if err != nil { return RepositoryInfo{}, fmt.Errorf("checking references: %w", err) } @@ -144,7 +117,7 @@ type ReferencesInfo struct { } // ReferencesInfoForRepository derives information about references in the repository. -func ReferencesInfoForRepository(ctx context.Context, repo *localrepo.Repo) (ReferencesInfo, error) { +func ReferencesInfoForRepository(repo *localrepo.Repo) (ReferencesInfo, error) { repoPath, err := repo.Path() if err != nil { return ReferencesInfo{}, fmt.Errorf("getting repository path: %w", err) @@ -309,20 +282,17 @@ func PackfilesInfoForRepository(repo *localrepo.Repo) (PackfilesInfo, error) { continue } - if !strings.HasSuffix(entry.Name(), ".pack") { - continue - } - - info.Count++ - if entryInfo.Size() > 0 { - info.Size += uint64(entryInfo.Size()) + switch { + case strings.HasSuffix(entry.Name(), ".pack"): + info.Count++ + if entryInfo.Size() > 0 { + info.Size += uint64(entryInfo.Size()) + } + case strings.HasSuffix(entry.Name(), ".bitmap"): + info.HasBitmap = true } } - if info.HasBitmap, err = HasBitmap(repoPath); err != nil { - return PackfilesInfo{}, fmt.Errorf("checking for bitmap: %w", err) - } - return info, nil } diff --git a/internal/git/stats/repository_info_test.go b/internal/git/stats/repository_info_test.go index e7fa7582f..8fa25c6fe 100644 --- a/internal/git/stats/repository_info_test.go +++ b/internal/git/stats/repository_info_test.go @@ -29,20 +29,16 @@ func TestRepositoryProfile(t *testing.T) { }) repo := localrepo.NewTestRepo(t, cfg, repoProto) - hasBitmap, err := HasBitmap(repoPath) + // Assert that the repository is an empty repository that ain't got any packfiles, bitmaps + // or anything else. + packfilesInfo, err := PackfilesInfoForRepository(repo) require.NoError(t, err) - require.False(t, hasBitmap, "repository should not have a bitmap initially") - packfiles, err := GetPackfiles(repoPath) - require.NoError(t, err) - require.Empty(t, packfiles) - packfilesCount, err := PackfilesCount(repoPath) - require.NoError(t, err) - require.Zero(t, packfilesCount) + require.Equal(t, PackfilesInfo{}, packfilesInfo) blobs := 10 blobIDs := gittest.WriteBlobs(t, cfg, repoPath, blobs) - looseObjects, err := LooseObjects(ctx, repo) + looseObjects, err := LooseObjects(repo) require.NoError(t, err) require.Equal(t, uint64(blobs), looseObjects) @@ -60,7 +56,7 @@ func TestRepositoryProfile(t *testing.T) { gittest.Exec(t, cfg, "-C", repoPath, "repack", "-A", "-b", "-d") - looseObjects, err = LooseObjects(ctx, repo) + looseObjects, err = LooseObjects(repo) require.NoError(t, err) require.Equal(t, uint64(1), looseObjects) @@ -71,7 +67,7 @@ func TestRepositoryProfile(t *testing.T) { theFuture := time.Now().Add(10 * time.Minute) require.NoError(t, os.Chtimes(filepath.Join(repoPath, "objects", blobID[0:2], blobID[2:]), theFuture, theFuture)) - looseObjects, err = LooseObjects(ctx, repo) + looseObjects, err = LooseObjects(repo) require.NoError(t, err) require.EqualValues(t, 2, looseObjects) } @@ -393,7 +389,7 @@ func TestRepositoryInfoForRepository(t *testing.T) { tc.setup(t, repoPath) - repoInfo, err := RepositoryInfoForRepository(ctx, repo) + repoInfo, err := RepositoryInfoForRepository(repo) require.Equal(t, tc.expectedErr, err) require.Equal(t, tc.expectedInfo, repoInfo) }) @@ -466,7 +462,7 @@ func TestReferencesInfoForRepository(t *testing.T) { repo := localrepo.NewTestRepo(t, cfg, repoProto) tc.setup(t, repo, repoPath) - info, err := ReferencesInfoForRepository(ctx, repo) + info, err := ReferencesInfoForRepository(repo) require.NoError(t, err) require.Equal(t, tc.expectedInfo, info) }) diff --git a/internal/gitaly/service/objectpool/reduplicate_test.go b/internal/gitaly/service/objectpool/reduplicate_test.go index 818b49687..9c79f6028 100644 --- a/internal/gitaly/service/objectpool/reduplicate_test.go +++ b/internal/gitaly/service/objectpool/reduplicate_test.go @@ -36,7 +36,7 @@ func TestReduplicate(t *testing.T) { packedRefsStat, err := os.Stat(filepath.Join(repoPath, "packed-refs")) require.NoError(t, err) // Verify that the pool member has no objects on its own anymore. - repoInfo, err := stats.RepositoryInfoForRepository(ctx, repo) + repoInfo, err := stats.RepositoryInfoForRepository(repo) require.NoError(t, err) require.Equal(t, stats.RepositoryInfo{ References: stats.ReferencesInfo{ diff --git a/internal/gitaly/service/repository/midx.go b/internal/gitaly/service/repository/midx.go index 5aa9789ab..001f8c0c8 100644 --- a/internal/gitaly/service/repository/midx.go +++ b/internal/gitaly/service/repository/midx.go @@ -207,7 +207,7 @@ func (s *server) midxRepack(ctx context.Context, repo repository.GitRepo) error // Reference: // - https://public-inbox.org/git/f3b25a9927fe560b764850ea880a71932ec2af32.1598380599.git.gitgitgadget@gmail.com/ func calculateBatchSize(repoPath string) (int64, error) { - packfiles, err := stats.GetPackfiles(repoPath) + packfiles, err := getPackfiles(repoPath) if err != nil { return 0, err } @@ -247,3 +247,20 @@ func calculateBatchSize(repoPath string) (int64, error) { // second biggest pack file return secondBiggestSize + 1, nil } + +// getPackfiles returns the FileInfo of packfiles inside a repository. +func getPackfiles(repoPath string) ([]fs.DirEntry, error) { + files, err := os.ReadDir(filepath.Join(repoPath, "objects/pack/")) + if err != nil { + return nil, err + } + + var packFiles []fs.DirEntry + for _, f := range files { + if filepath.Ext(f.Name()) == ".pack" { + packFiles = append(packFiles, f) + } + } + + return packFiles, nil +} diff --git a/internal/gitaly/service/repository/midx_test.go b/internal/gitaly/service/repository/midx_test.go index 87c0fa9b0..b0ec2b883 100644 --- a/internal/gitaly/service/repository/midx_test.go +++ b/internal/gitaly/service/repository/midx_test.go @@ -19,6 +19,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v15/internal/backchannel" "gitlab.com/gitlab-org/gitaly/v15/internal/git" "gitlab.com/gitlab-org/gitaly/v15/internal/git/gittest" + "gitlab.com/gitlab-org/gitaly/v15/internal/git/localrepo" "gitlab.com/gitlab-org/gitaly/v15/internal/git/stats" "gitlab.com/gitlab-org/gitaly/v15/internal/gitaly/config" "gitlab.com/gitlab-org/gitaly/v15/internal/gitaly/transaction" @@ -85,15 +86,17 @@ func TestMidxRepack(t *testing.T) { ctx := testhelper.Context(t) cfg, client := setupRepositoryServiceWithoutRepo(t) - repo, repoPath := gittest.CreateRepository(t, ctx, cfg) + + repoProto, repoPath := gittest.CreateRepository(t, ctx, cfg) + repo := localrepo.NewTestRepo(t, cfg, repoProto) gittest.WriteCommit(t, cfg, repoPath, gittest.WithBranch("main")) // add some pack files with different sizes - packsAdded := 5 + packsAdded := uint64(5) addPackFiles(t, ctx, cfg, repoPath, packsAdded, true) // record pack count - actualCount, err := stats.PackfilesCount(repoPath) + actualCount, err := stats.PackfilesCount(repo) require.NoError(t, err) require.Equal(t, packsAdded+1, // expect @@ -105,12 +108,12 @@ func TestMidxRepack(t *testing.T) { _, err = client.MidxRepack( ctx, &gitalypb.MidxRepackRequest{ - Repository: repo, + Repository: repoProto, }, ) require.NoError(t, err) - actualCount, err = stats.PackfilesCount(repoPath) + actualCount, err = stats.PackfilesCount(repo) require.NoError(t, err) require.Equal(t, packsAdded+2, // expect @@ -161,17 +164,18 @@ func TestMidxRepackExpire(t *testing.T) { ctx := testhelper.Context(t) cfg, client := setupRepositoryServiceWithoutRepo(t) - for _, packsAdded := range []int{3, 5, 11, 20} { + for _, packsAdded := range []uint64{3, 5, 11, 20} { t.Run(fmt.Sprintf("Test repack expire with %d added packs", packsAdded), func(t *testing.T) { - repo, repoPath := gittest.CreateRepository(t, ctx, cfg) + repoProto, repoPath := gittest.CreateRepository(t, ctx, cfg) + repo := localrepo.NewTestRepo(t, cfg, repoProto) gittest.WriteCommit(t, cfg, repoPath, gittest.WithBranch("main")) // add some pack files with different sizes addPackFiles(t, ctx, cfg, repoPath, packsAdded, false) // record pack count - actualCount, err := stats.PackfilesCount(repoPath) + actualCount, err := stats.PackfilesCount(repo) require.NoError(t, err) require.Equal(t, packsAdded+1, // expect @@ -183,7 +187,7 @@ func TestMidxRepackExpire(t *testing.T) { // we should need no more than n interation(s) // for the pack files to be consolidated into // a new second biggest pack - i := 0 + var i uint64 packCount := packsAdded + 1 for { if i > packsAdded+1 { @@ -195,12 +199,12 @@ func TestMidxRepackExpire(t *testing.T) { _, err := client.MidxRepack( ctx, &gitalypb.MidxRepackRequest{ - Repository: repo, + Repository: repoProto, }, ) require.NoError(t, err) - packCount, err = stats.PackfilesCount(repoPath) + packCount, err = stats.PackfilesCount(repo) require.NoError(t, err) if packCount == 2 { @@ -209,7 +213,7 @@ func TestMidxRepackExpire(t *testing.T) { } require.Equal(t, - 2, // expect + uint64(2), // expect packCount, // actual fmt.Sprintf( "all small packs should be consolidated to a second biggest pack "+ @@ -226,7 +230,7 @@ func TestMidxRepackExpire(t *testing.T) { func findNewestPackFile(t *testing.T, repoPath string) (fs.DirEntry, fs.FileInfo) { t.Helper() - files, err := stats.GetPackfiles(repoPath) + files, err := getPackfiles(repoPath) require.NoError(t, err) var newestPack fs.DirEntry @@ -252,7 +256,7 @@ func addPackFiles( ctx context.Context, cfg config.Cfg, repoPath string, - packCount int, + packCount uint64, resetModTime bool, ) { t.Helper() @@ -263,7 +267,7 @@ func addPackFiles( randomReader := rand.New(rand.NewSource(1)) // Create some pack files with different sizes. - for i := 0; i < packCount; i++ { + for i := uint64(0); i < packCount; i++ { buf := make([]byte, (packCount+1)*100) _, err := io.ReadFull(randomReader, buf) require.NoError(t, err) @@ -280,7 +284,7 @@ func addPackFiles( if resetModTime { packDir := filepath.Join(repoPath, "objects/pack/") - files, err := stats.GetPackfiles(repoPath) + files, err := getPackfiles(repoPath) require.NoError(t, err) for _, f := range files { diff --git a/internal/gitaly/service/repository/repack_test.go b/internal/gitaly/service/repository/repack_test.go index f0f2a53c7..f5aeda3a7 100644 --- a/internal/gitaly/service/repository/repack_test.go +++ b/internal/gitaly/service/repository/repack_test.go @@ -11,6 +11,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "gitlab.com/gitlab-org/gitaly/v15/internal/git/gittest" + "gitlab.com/gitlab-org/gitaly/v15/internal/git/localrepo" "gitlab.com/gitlab-org/gitaly/v15/internal/git/stats" "gitlab.com/gitlab-org/gitaly/v15/internal/testhelper" "gitlab.com/gitlab-org/gitaly/v15/internal/testhelper/testserver" @@ -24,25 +25,28 @@ func TestRepackIncrementalSuccess(t *testing.T) { ctx := testhelper.Context(t) cfg, client := setupRepositoryServiceWithoutRepo(t) - repo, repoPath := gittest.CreateRepository(t, ctx, cfg) + repoProto, repoPath := gittest.CreateRepository(t, ctx, cfg) + repo := localrepo.NewTestRepo(t, cfg, repoProto) // Bring the repository into a known-good state with a single packfile, only. initialCommit := gittest.WriteCommit(t, cfg, repoPath, gittest.WithBranch("main")) gittest.Exec(t, cfg, "-C", repoPath, "repack", "-Ad") - oldPackfileCount, err := stats.PackfilesCount(repoPath) + oldPackfileCount, err := stats.PackfilesCount(repo) require.NoError(t, err) - require.Equal(t, 1, oldPackfileCount) + require.Equal(t, uint64(1), oldPackfileCount) // Write a second commit into the repository so that we have something to repack. gittest.WriteCommit(t, cfg, repoPath, gittest.WithParents(initialCommit), gittest.WithBranch("main")) //nolint:staticcheck - c, err := client.RepackIncremental(ctx, &gitalypb.RepackIncrementalRequest{Repository: repo}) + c, err := client.RepackIncremental(ctx, &gitalypb.RepackIncrementalRequest{ + Repository: repoProto, + }) assert.NoError(t, err) assert.NotNil(t, c) // As we have done an incremental repack we expect to see one more packfile than before now. - newPackfileCount, err := stats.PackfilesCount(repoPath) + newPackfileCount, err := stats.PackfilesCount(repo) require.NoError(t, err) require.Equal(t, oldPackfileCount+1, newPackfileCount) @@ -188,20 +192,21 @@ func TestRepackFullSuccess(t *testing.T) { t.Run(tc.desc, func(t *testing.T) { t.Parallel() - repo, repoPath := gittest.CreateRepository(t, ctx, cfg) + repoProto, repoPath := gittest.CreateRepository(t, ctx, cfg) + repo := localrepo.NewTestRepo(t, cfg, repoProto) // Bring the repository into a known state with two packfiles. gittest.WriteCommit(t, cfg, repoPath, gittest.WithMessage("first"), gittest.WithBranch("first")) gittest.Exec(t, cfg, "-C", repoPath, "repack") gittest.WriteCommit(t, cfg, repoPath, gittest.WithMessage("second"), gittest.WithBranch("second")) gittest.Exec(t, cfg, "-C", repoPath, "repack") - oldPackfileCount, err := stats.PackfilesCount(repoPath) + oldPackfileCount, err := stats.PackfilesCount(repo) require.NoError(t, err) - require.Equal(t, 2, oldPackfileCount) + require.Equal(t, uint64(2), oldPackfileCount) //nolint:staticcheck response, err := client.RepackFull(ctx, &gitalypb.RepackFullRequest{ - Repository: repo, + Repository: repoProto, CreateBitmap: tc.createBitmap, }) require.NoError(t, err) @@ -209,9 +214,9 @@ func TestRepackFullSuccess(t *testing.T) { // After the full repack we should see that all packfiles have been repacked // into a single one. - newPackfileCount, err := stats.PackfilesCount(repoPath) + newPackfileCount, err := stats.PackfilesCount(repo) require.NoError(t, err) - require.Equal(t, 1, newPackfileCount) + require.Equal(t, uint64(1), newPackfileCount) // We should also see that the bitmap has been generated if requested. bitmaps, err := filepath.Glob(filepath.Join(repoPath, "objects", "pack", "pack-*.bitmap")) |