t5326: move tests to t/lib-bitmap.sh
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>maint
parent
f0ed59afcc
commit
791170fa2b
177
t/lib-bitmap.sh
177
t/lib-bitmap.sh
|
@ -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~
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue