test script to check if repo size is reduced.

This commit is contained in:
truecode112
2023-05-25 15:55:31 +03:00
parent 64f6dd6967
commit 20d4d4f0a4
2 changed files with 45 additions and 3 deletions
+44
View File
@@ -102,6 +102,14 @@ func testGit(t *testing.T, u *url.URL) {
})
t.Run("Deletion", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
doCommitAndPush(t, littleSize, dstPath, "data-file-")
bigFileName := doCommitAndPush(t, bigSize, dstPath, "data-file-")
oldRepoSize := doCalculateRepoSize(t, dstPath)
doDeleteAndCliean(t, dstPath, bigFileName)
newRepoSize := doCalculateRepoSize(t, dstPath)
assert.Less(t, newRepoSize, oldRepoSize)
setting.SaveGlobalRepositorySetting(false, 0)
// TODO doDeleteCommitAndPush(t, littleSize, dstPath, "data-file-")
})
// TODO delete branch
@@ -325,6 +333,42 @@ func lockFileTest(t *testing.T, filename, repoPath string) {
assert.NoError(t, err)
}
const notRegularFileMode = os.ModeSymlink | os.ModeNamedPipe | os.ModeSocket | os.ModeDevice | os.ModeCharDevice | os.ModeIrregular
func doCalculateRepoSize(t *testing.T, path string) int64 {
var size int64
err := filepath.WalkDir(path, func(_ string, info os.DirEntry, err error) error {
if err != nil {
if os.IsNotExist(err) { // ignore the error because the file maybe deleted during traversing.
return nil
}
return err
}
if info.IsDir() {
return nil
}
f, err := info.Info()
if err != nil {
return err
}
if (f.Mode() & notRegularFileMode) == 0 {
size += f.Size()
}
return err
})
assert.NoError(t, err)
return size
}
func doDeleteAndCliean(t *testing.T, repoPath, filename string) {
_, _, err := git.NewCommand(git.DefaultContext, "rm").AddDashesAndList(filename).RunStdString(&git.RunOpts{Dir: repoPath}) // Delete
assert.NoError(t, err)
_, _, err = git.NewCommand(git.DefaultContext, "reflog", "expire", "--expire-unreachable=all", "--all").RunStdString(&git.RunOpts{Dir: repoPath}) // reflog
assert.NoError(t, err)
_, _, err = git.NewCommand(git.DefaultContext, "gc", "--prune=now").RunStdString(&git.RunOpts{Dir: repoPath}) // reflog
assert.NoError(t, err)
}
func doCommitAndPush(t *testing.T, size int, repoPath, prefix string) string {
name, err := generateCommitWithNewData(size, repoPath, "user2@example.com", "User Two", prefix)
assert.NoError(t, err)