]> git.ipfire.org Git - thirdparty/git.git/blobdiff - t/t5326-multi-pack-bitmaps.sh
Merge branch 'tb/midx-no-bitmap-for-no-objects'
[thirdparty/git.git] / t / t5326-multi-pack-bitmaps.sh
index 89b5d45c483acb55200079e3e6f384557c1354cb..4fe57414c13caca90d862b417ad5471cab28ee12 100755 (executable)
@@ -9,125 +9,13 @@ test_description='exercise basic multi-pack bitmap functionality'
 GIT_TEST_MULTI_PACK_INDEX=0
 GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP=0
 
-objdir=.git/objects
-midx=$objdir/pack/multi-pack-index
+# This test exercise multi-pack bitmap functionality where the object order is
+# stored and read from a special chunk within the MIDX, so use the default
+# behavior here.
+sane_unset GIT_TEST_MIDX_WRITE_REV
+sane_unset GIT_TEST_MIDX_READ_RIDX
 
-# midx_pack_source <obj>
-midx_pack_source () {
-       test-tool read-midx --show-objects .git/objects | grep "^$1 " | cut -f2
-}
-
-setup_bitmap_history
-
-test_expect_success 'enable core.multiPackIndex' '
-       git config core.multiPackIndex true
-'
-
-test_expect_success 'create single-pack midx with bitmaps' '
-       git repack -ad &&
-       git multi-pack-index write --bitmap &&
-       test_path_is_file $midx &&
-       test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&
-       test_path_is_file $midx-$(midx_checksum $objdir).rev
-'
-
-basic_bitmap_tests
-
-test_expect_success 'create new additional packs' '
-       for i in $(test_seq 1 16)
-       do
-               test_commit "$i" &&
-               git repack -d || return 1
-       done &&
-
-       git checkout -b other2 HEAD~8 &&
-       for i in $(test_seq 1 8)
-       do
-               test_commit "side-$i" &&
-               git repack -d || return 1
-       done &&
-       git checkout second
-'
-
-test_expect_success 'create multi-pack midx with bitmaps' '
-       git multi-pack-index write --bitmap &&
-
-       ls $objdir/pack/pack-*.pack >packs &&
-       test_line_count = 25 packs &&
-
-       test_path_is_file $midx &&
-       test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&
-       test_path_is_file $midx-$(midx_checksum $objdir).rev
-'
-
-basic_bitmap_tests
-
-test_expect_success '--no-bitmap is respected when bitmaps exist' '
-       git multi-pack-index write --bitmap &&
-
-       test_commit respect--no-bitmap &&
-       git repack -d &&
-
-       test_path_is_file $midx &&
-       test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&
-       test_path_is_file $midx-$(midx_checksum $objdir).rev &&
-
-       git multi-pack-index write --no-bitmap &&
-
-       test_path_is_file $midx &&
-       test_path_is_missing $midx-$(midx_checksum $objdir).bitmap &&
-       test_path_is_missing $midx-$(midx_checksum $objdir).rev
-'
-
-test_expect_success 'setup midx with base from later pack' '
-       # Write a and b so that "a" is a delta on top of base "b", since Git
-       # prefers to delete contents out of a base rather than add to a shorter
-       # object.
-       test_seq 1 128 >a &&
-       test_seq 1 130 >b &&
-
-       git add a b &&
-       git commit -m "initial commit" &&
-
-       a=$(git rev-parse HEAD:a) &&
-       b=$(git rev-parse HEAD:b) &&
-
-       # In the first pack, "a" is stored as a delta to "b".
-       p1=$(git pack-objects .git/objects/pack/pack <<-EOF
-       $a
-       $b
-       EOF
-       ) &&
-
-       # In the second pack, "a" is missing, and "b" is not a delta nor base to
-       # any other object.
-       p2=$(git pack-objects .git/objects/pack/pack <<-EOF
-       $b
-       $(git rev-parse HEAD)
-       $(git rev-parse HEAD^{tree})
-       EOF
-       ) &&
-
-       git prune-packed &&
-       # Use the second pack as the preferred source, so that "b" occurs
-       # earlier in the MIDX object order, rendering "a" unusable for pack
-       # reuse.
-       git multi-pack-index write --bitmap --preferred-pack=pack-$p2.idx &&
-
-       have_delta $a $b &&
-       test $(midx_pack_source $a) != $(midx_pack_source $b)
-'
-
-rev_list_tests 'full bitmap with backwards delta'
-
-test_expect_success 'clone with bitmaps enabled' '
-       git clone --no-local --bare . clone-reverse-delta.git &&
-       test_when_finished "rm -fr clone-reverse-delta.git" &&
-
-       git rev-parse HEAD >expect &&
-       git --git-dir=clone-reverse-delta.git rev-parse HEAD >actual &&
-       test_cmp expect actual
-'
+midx_bitmap_core
 
 bitmap_reuse_tests() {
        from=$1
@@ -204,17 +92,7 @@ test_expect_success 'missing object closure fails gracefully' '
        )
 '
 
-test_expect_success 'setup partial bitmaps' '
-       test_commit packed &&
-       git repack &&
-       test_commit loose &&
-       git multi-pack-index write --bitmap 2>err &&
-       test_path_is_file $midx &&
-       test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&
-       test_path_is_file $midx-$(midx_checksum $objdir).rev
-'
-
-basic_bitmap_tests HEAD~
+midx_bitmap_partial_tests
 
 test_expect_success 'removing a MIDX clears stale bitmaps' '
        rm -fr repo &&
@@ -228,7 +106,6 @@ test_expect_success 'removing a MIDX clears stale bitmaps' '
 
                # Write a MIDX and bitmap; remove the MIDX but leave the bitmap.
                stale_bitmap=$midx-$(midx_checksum $objdir).bitmap &&
-               stale_rev=$midx-$(midx_checksum $objdir).rev &&
                rm $midx &&
 
                # Then write a new MIDX.
@@ -238,9 +115,7 @@ test_expect_success 'removing a MIDX clears stale bitmaps' '
 
                test_path_is_file $midx &&
                test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&
-               test_path_is_file $midx-$(midx_checksum $objdir).rev &&
-               test_path_is_missing $stale_bitmap &&
-               test_path_is_missing $stale_rev
+               test_path_is_missing $stale_bitmap
        )
 '
 
@@ -261,7 +136,6 @@ test_expect_success 'pack.preferBitmapTips' '
                git multi-pack-index write --bitmap &&
                test_path_is_file $midx &&
                test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&
-               test_path_is_file $midx-$(midx_checksum $objdir).rev &&
 
                test-tool bitmap list-commits | sort >bitmaps &&
                comm -13 bitmaps commits >before &&
@@ -271,7 +145,6 @@ test_expect_success 'pack.preferBitmapTips' '
                        <before | git update-ref --stdin &&
 
                rm -fr $midx-$(midx_checksum $objdir).bitmap &&
-               rm -fr $midx-$(midx_checksum $objdir).rev &&
                rm -fr $midx &&
 
                git -c pack.preferBitmapTips=refs/tags/include \
@@ -309,7 +182,6 @@ test_expect_success 'writing a bitmap with --refs-snapshot' '
                grep "$(git rev-parse two)" bitmaps &&
 
                rm -fr $midx-$(midx_checksum $objdir).bitmap &&
-               rm -fr $midx-$(midx_checksum $objdir).rev &&
                rm -fr $midx &&
 
                # Then again, but with a refs snapshot which only sees
@@ -354,7 +226,6 @@ test_expect_success 'write a bitmap with --refs-snapshot (preferred tips)' '
                ) >snapshot &&
 
                rm -fr $midx-$(midx_checksum $objdir).bitmap &&
-               rm -fr $midx-$(midx_checksum $objdir).rev &&
                rm -fr $midx &&
 
                git multi-pack-index write --bitmap --refs-snapshot=snapshot &&
@@ -417,4 +288,23 @@ test_expect_success 'no .bitmap is written without any objects' '
        )
 '
 
+test_expect_success 'graceful fallback when missing reverse index' '
+       rm -fr repo &&
+       git init repo &&
+       test_when_finished "rm -fr repo" &&
+       (
+               cd repo &&
+
+               test_commit base &&
+
+               # write a pack and MIDX bitmap containing base
+               git repack -adb &&
+               git multi-pack-index write --bitmap &&
+
+               GIT_TEST_MIDX_READ_RIDX=0 \
+                       git rev-list --use-bitmap-index HEAD 2>err &&
+               ! grep "ignoring extra bitmap file" err
+       )
+'
+
 test_done