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:
authorWill Chandler <wchandler@gitlab.com>2023-01-17 23:29:27 +0300
committerWill Chandler <wchandler@gitlab.com>2023-01-17 23:29:27 +0300
commit53eb684a8a1b348c651575238510eae68beed0f0 (patch)
treeb731123b12631ad500d49301e718d86a7adfa3da
parenta5859ed296033140bb4472686c7f9bd3f9e357f9 (diff)
parent7d560469232125e87868093caabf44f0022b080a (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.go17
-rw-r--r--internal/git/housekeeping/optimization_strategy.go2
-rw-r--r--internal/git/housekeeping/optimize_repository_test.go2
-rw-r--r--internal/git/objectpool/fetch.go2
-rw-r--r--internal/git/objectpool/link_test.go15
-rw-r--r--internal/git/stats/repository_info.go68
-rw-r--r--internal/git/stats/repository_info_test.go22
-rw-r--r--internal/gitaly/service/objectpool/reduplicate_test.go2
-rw-r--r--internal/gitaly/service/repository/midx.go19
-rw-r--r--internal/gitaly/service/repository/midx_test.go36
-rw-r--r--internal/gitaly/service/repository/repack_test.go27
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"))