]> git.ipfire.org Git - thirdparty/git.git/blobdiff - t/t0610-reftable-basics.sh
reftable/stack: use geometric table compaction
[thirdparty/git.git] / t / t0610-reftable-basics.sh
index c9e10b34684d4447f8a3a914412e69665739fbbc..8eec093788d3d6b11315c64d1e94d1d8e4e3deb2 100755 (executable)
@@ -293,7 +293,7 @@ test_expect_success 'ref transaction: writes cause auto-compaction' '
        test_line_count = 1 repo/.git/reftable/tables.list &&
 
        test_commit -C repo --no-tag A &&
-       test_line_count = 2 repo/.git/reftable/tables.list &&
+       test_line_count = 1 repo/.git/reftable/tables.list &&
 
        test_commit -C repo --no-tag B &&
        test_line_count = 1 repo/.git/reftable/tables.list
@@ -320,6 +320,19 @@ test_expect_success 'ref transaction: env var disables compaction' '
        test_line_count -lt $expected repo/.git/reftable/tables.list
 '
 
+test_expect_success 'ref transaction: alternating table sizes are compacted' '
+       test_when_finished "rm -rf repo" &&
+
+       git init repo &&
+       test_commit -C repo A &&
+       for i in $(test_seq 5)
+       do
+               git -C repo branch -f foo &&
+               git -C repo branch -d foo || return 1
+       done &&
+       test_line_count = 2 repo/.git/reftable/tables.list
+'
+
 check_fsync_events () {
        local trace="$1" &&
        shift &&
@@ -345,7 +358,7 @@ test_expect_success 'ref transaction: writes are synced' '
                git -C repo -c core.fsync=reference \
                -c core.fsyncMethod=fsync update-ref refs/heads/branch HEAD &&
        check_fsync_events trace2.txt <<-EOF
-       "name":"hardware-flush","count":2
+       "name":"hardware-flush","count":4
        EOF
 '
 
@@ -377,7 +390,7 @@ test_expect_success 'ref transaction: fails gracefully when auto compaction fail
                        done ||
                        exit 1
                done &&
-               test_line_count = 13 .git/reftable/tables.list
+               test_line_count = 10 .git/reftable/tables.list
        )
 '
 
@@ -387,8 +400,8 @@ test_expect_success 'pack-refs: compacts tables' '
 
        test_commit -C repo A &&
        ls -1 repo/.git/reftable >table-files &&
-       test_line_count = 4 table-files &&
-       test_line_count = 3 repo/.git/reftable/tables.list &&
+       test_line_count = 3 table-files &&
+       test_line_count = 2 repo/.git/reftable/tables.list &&
 
        git -C repo pack-refs &&
        ls -1 repo/.git/reftable >table-files &&
@@ -429,7 +442,7 @@ test_expect_success "$command: auto compaction" '
                # The tables should have been auto-compacted, and thus auto
                # compaction should not have to do anything.
                ls -1 .git/reftable >tables-expect &&
-               test_line_count = 4 tables-expect &&
+               test_line_count = 3 tables-expect &&
                git $command --auto &&
                ls -1 .git/reftable >tables-actual &&
                test_cmp tables-expect tables-actual &&
@@ -447,7 +460,7 @@ test_expect_success "$command: auto compaction" '
                git branch B &&
                git branch C &&
                rm .git/reftable/*.lock &&
-               test_line_count = 5 .git/reftable/tables.list &&
+               test_line_count = 4 .git/reftable/tables.list &&
 
                git $command --auto &&
                test_line_count = 1 .git/reftable/tables.list
@@ -479,7 +492,7 @@ do
                        umask $umask &&
                        git init --shared=true repo &&
                        test_commit -C repo A &&
-                       test_line_count = 3 repo/.git/reftable/tables.list
+                       test_line_count = 2 repo/.git/reftable/tables.list
                ) &&
                git -C repo pack-refs &&
                test_expect_perms "-rw-rw-r--" repo/.git/reftable/tables.list &&
@@ -847,12 +860,16 @@ test_expect_success 'worktree: pack-refs in main repo packs main refs' '
        test_when_finished "rm -rf repo worktree" &&
        git init repo &&
        test_commit -C repo A &&
+
+       GIT_TEST_REFTABLE_AUTOCOMPACTION=false \
        git -C repo worktree add ../worktree &&
+       GIT_TEST_REFTABLE_AUTOCOMPACTION=false \
+       git -C worktree update-ref refs/worktree/per-worktree HEAD &&
 
-       test_line_count = 3 repo/.git/worktrees/worktree/reftable/tables.list &&
-       test_line_count = 4 repo/.git/reftable/tables.list &&
+       test_line_count = 4 repo/.git/worktrees/worktree/reftable/tables.list &&
+       test_line_count = 3 repo/.git/reftable/tables.list &&
        git -C repo pack-refs &&
-       test_line_count = 3 repo/.git/worktrees/worktree/reftable/tables.list &&
+       test_line_count = 4 repo/.git/worktrees/worktree/reftable/tables.list &&
        test_line_count = 1 repo/.git/reftable/tables.list
 '
 
@@ -860,13 +877,17 @@ test_expect_success 'worktree: pack-refs in worktree packs worktree refs' '
        test_when_finished "rm -rf repo worktree" &&
        git init repo &&
        test_commit -C repo A &&
+
+       GIT_TEST_REFTABLE_AUTOCOMPACTION=false \
        git -C repo worktree add ../worktree &&
+       GIT_TEST_REFTABLE_AUTOCOMPACTION=false \
+       git -C worktree update-ref refs/worktree/per-worktree HEAD &&
 
-       test_line_count = 3 repo/.git/worktrees/worktree/reftable/tables.list &&
-       test_line_count = 4 repo/.git/reftable/tables.list &&
+       test_line_count = 4 repo/.git/worktrees/worktree/reftable/tables.list &&
+       test_line_count = 3 repo/.git/reftable/tables.list &&
        git -C worktree pack-refs &&
        test_line_count = 1 repo/.git/worktrees/worktree/reftable/tables.list &&
-       test_line_count = 4 repo/.git/reftable/tables.list
+       test_line_count = 3 repo/.git/reftable/tables.list
 '
 
 test_expect_success 'worktree: creating shared ref updates main stack' '
@@ -880,6 +901,7 @@ test_expect_success 'worktree: creating shared ref updates main stack' '
        test_line_count = 1 repo/.git/worktrees/worktree/reftable/tables.list &&
        test_line_count = 1 repo/.git/reftable/tables.list &&
 
+       GIT_TEST_REFTABLE_AUTOCOMPACTION=false \
        git -C worktree update-ref refs/heads/shared HEAD &&
        test_line_count = 1 repo/.git/worktrees/worktree/reftable/tables.list &&
        test_line_count = 2 repo/.git/reftable/tables.list