]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t5326: move tests to t/lib-bitmap.sh
authorTaylor Blau <me@ttaylorr.com>
Tue, 25 Jan 2022 22:41:13 +0000 (17:41 -0500)
committerJunio C Hamano <gitster@pobox.com>
Thu, 27 Jan 2022 20:07:53 +0000 (12:07 -0800)
In t5326, we have a handful of tests that we would like to run twice:
once using the MIDX's new `RIDX` chunk as the source of the
reverse-index cache, and once using the separate `.rev` file.

But because these tests mutate the state of the underlying repository,
and then make assumptions about those mutations occurring in a certain
sequence, simply running the tests twice in the same repository is
awkward.

Instead, extract the core of interesting tests into t/lib-bitmap.sh to
prepare for them to be run twice, each in a separate test script. This
means that they can each operate on a separate repository, removing any
concerns about mutating state.

For now, this patch is a strict cut-and-paste of some tests from t5326.
The tests which did not move are not interesting with respect to the
source of their reverse index data.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Reviewed-by: Derrick Stolee <dstolee@microsoft.com>
Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/lib-bitmap.sh
t/t5326-multi-pack-bitmaps.sh

index 21d0392ddac5a2e21f8ce090d87efc6cda4e4d9a..48a8730a13ee3c61d2c30a847a7af01e91484c14 100644 (file)
@@ -1,6 +1,9 @@
 # Helpers for scripts testing bitmap functionality; see t5310 for
 # example usage.
 
+objdir=.git/objects
+midx=$objdir/pack/multi-pack-index
+
 # Compare a file containing rev-list bitmap traversal output to its non-bitmap
 # counterpart. You can't just use test_cmp for this, because the two produce
 # subtly different output:
@@ -264,3 +267,177 @@ have_delta () {
 midx_checksum () {
        test-tool read-midx --checksum "$1"
 }
+
+# midx_pack_source <obj>
+midx_pack_source () {
+       test-tool read-midx --show-objects .git/objects | grep "^$1 " | cut -f2
+}
+
+test_rev_exists () {
+       commit="$1"
+
+       test_expect_success 'reverse index exists' '
+               GIT_TRACE2_EVENT=$(pwd)/event.trace \
+                       git rev-list --test-bitmap "$commit" &&
+
+               test_path_is_file $midx-$(midx_checksum $objdir).rev &&
+               grep "\"category\":\"load_midx_revindex\",\"key\":\"source\",\"value\":\"rev\"" event.trace
+       '
+}
+
+midx_bitmap_core () {
+       setup_bitmap_history
+
+       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_rev_exists HEAD
+
+       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_rev_exists HEAD
+
+       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 &&
+
+               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
+       '
+
+       test_expect_success 'changing the preferred pack does not corrupt bitmaps' '
+               rm -fr repo &&
+               git init repo &&
+               test_when_finished "rm -fr repo" &&
+               (
+                       cd repo &&
+
+                       test_commit A &&
+                       test_commit B &&
+
+                       git rev-list --objects --no-object-names HEAD^ >A.objects &&
+                       git rev-list --objects --no-object-names HEAD^.. >B.objects &&
+
+                       A=$(git pack-objects $objdir/pack/pack <A.objects) &&
+                       B=$(git pack-objects $objdir/pack/pack <B.objects) &&
+
+                       cat >indexes <<-EOF &&
+                       pack-$A.idx
+                       pack-$B.idx
+                       EOF
+
+                       git multi-pack-index write --bitmap --stdin-packs \
+                               --preferred-pack=pack-$A.pack <indexes &&
+                       git rev-list --test-bitmap A &&
+
+                       git multi-pack-index write --bitmap --stdin-packs \
+                               --preferred-pack=pack-$B.pack <indexes &&
+                       git rev-list --test-bitmap A
+               )
+       '
+}
+
+midx_bitmap_partial_tests () {
+       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_rev_exists HEAD~
+
+       basic_bitmap_tests HEAD~
+}
index 999740f8c74a26b2a6efa152690fca747c98638d..100ac90d154c003e6fda13a5d4a261947083d7ea 100755 (executable)
@@ -9,134 +9,7 @@ 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
-
-# midx_pack_source <obj>
-midx_pack_source () {
-       test-tool read-midx --show-objects .git/objects | grep "^$1 " | cut -f2
-}
-
-test_rev_exists () {
-       commit="$1"
-
-       test_expect_success 'reverse index exists' '
-               GIT_TRACE2_EVENT=$(pwd)/event.trace \
-                       git rev-list --test-bitmap "$commit" &&
-
-               test_path_is_file $midx-$(midx_checksum $objdir).rev &&
-               grep "\"category\":\"load_midx_revindex\",\"key\":\"source\",\"value\":\"rev\"" event.trace
-       '
-}
-
-setup_bitmap_history
-
-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_rev_exists HEAD
-
-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_rev_exists HEAD
-
-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 &&
-
-       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
@@ -213,18 +86,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_rev_exists HEAD~
-
-basic_bitmap_tests HEAD~
+midx_bitmap_partial_tests
 
 test_expect_success 'removing a MIDX clears stale bitmaps' '
        rm -fr repo &&
@@ -398,35 +260,4 @@ test_expect_success 'hash-cache values are propagated from pack bitmaps' '
        )
 '
 
-test_expect_success 'changing the preferred pack does not corrupt bitmaps' '
-       rm -fr repo &&
-       git init repo &&
-       test_when_finished "rm -fr repo" &&
-       (
-               cd repo &&
-
-               test_commit A &&
-               test_commit B &&
-
-               git rev-list --objects --no-object-names HEAD^ >A.objects &&
-               git rev-list --objects --no-object-names HEAD^.. >B.objects &&
-
-               A=$(git pack-objects $objdir/pack/pack <A.objects) &&
-               B=$(git pack-objects $objdir/pack/pack <B.objects) &&
-
-               cat >indexes <<-EOF &&
-               pack-$A.idx
-               pack-$B.idx
-               EOF
-
-               git multi-pack-index write --bitmap --stdin-packs \
-                       --preferred-pack=pack-$A.pack <indexes &&
-               git rev-list --test-bitmap A &&
-
-               git multi-pack-index write --bitmap --stdin-packs \
-                       --preferred-pack=pack-$B.pack <indexes &&
-               git rev-list --test-bitmap A
-       )
-'
-
 test_done