mirror of
https://github.com/git/git
synced 2024-08-25 10:45:59 +00:00
![Eric Sunshine](/assets/img/avatar_default.png)
Failures within `for` and `while` loops can go unnoticed if not detected and signaled manually since the loop itself does not abort when a contained command fails, nor will a failure necessarily be detected when the loop finishes since the loop returns the exit code of the last command it ran on the final iteration, which may not be the command which failed. Therefore, detect and signal failures manually within loops using the idiom `|| return 1` (or `|| exit 1` within subshells). Signed-off-by: Eric Sunshine <sunshine@sunshineco.com> Reviewed-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
121 lines
3 KiB
Bash
Executable file
121 lines
3 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
test_description='on-disk reverse index'
|
|
. ./test-lib.sh
|
|
|
|
# The below tests want control over the 'pack.writeReverseIndex' setting
|
|
# themselves to assert various combinations of it with other options.
|
|
sane_unset GIT_TEST_WRITE_REV_INDEX
|
|
|
|
packdir=.git/objects/pack
|
|
|
|
test_expect_success 'setup' '
|
|
test_commit base &&
|
|
|
|
pack=$(git pack-objects --all $packdir/pack) &&
|
|
rev=$packdir/pack-$pack.rev &&
|
|
|
|
test_path_is_missing $rev
|
|
'
|
|
|
|
test_index_pack () {
|
|
rm -f $rev &&
|
|
conf=$1 &&
|
|
shift &&
|
|
# remove the index since Windows won't overwrite an existing file
|
|
rm $packdir/pack-$pack.idx &&
|
|
git -c pack.writeReverseIndex=$conf index-pack "$@" \
|
|
$packdir/pack-$pack.pack
|
|
}
|
|
|
|
test_expect_success 'index-pack with pack.writeReverseIndex' '
|
|
test_index_pack "" &&
|
|
test_path_is_missing $rev &&
|
|
|
|
test_index_pack false &&
|
|
test_path_is_missing $rev &&
|
|
|
|
test_index_pack true &&
|
|
test_path_is_file $rev
|
|
'
|
|
|
|
test_expect_success 'index-pack with --[no-]rev-index' '
|
|
for conf in "" true false
|
|
do
|
|
test_index_pack "$conf" --rev-index &&
|
|
test_path_exists $rev &&
|
|
|
|
test_index_pack "$conf" --no-rev-index &&
|
|
test_path_is_missing $rev || return 1
|
|
done
|
|
'
|
|
|
|
test_expect_success 'index-pack can verify reverse indexes' '
|
|
test_when_finished "rm -f $rev" &&
|
|
test_index_pack true &&
|
|
|
|
test_path_is_file $rev &&
|
|
git index-pack --rev-index --verify $packdir/pack-$pack.pack &&
|
|
|
|
# Intentionally corrupt the reverse index.
|
|
chmod u+w $rev &&
|
|
printf "xxxx" | dd of=$rev bs=1 count=4 conv=notrunc &&
|
|
|
|
test_must_fail git index-pack --rev-index --verify \
|
|
$packdir/pack-$pack.pack 2>err &&
|
|
grep "validation error" err
|
|
'
|
|
|
|
test_expect_success 'index-pack infers reverse index name with -o' '
|
|
git index-pack --rev-index -o other.idx $packdir/pack-$pack.pack &&
|
|
test_path_is_file other.idx &&
|
|
test_path_is_file other.rev
|
|
'
|
|
|
|
test_expect_success 'pack-objects respects pack.writeReverseIndex' '
|
|
test_when_finished "rm -fr pack-1-*" &&
|
|
|
|
git -c pack.writeReverseIndex= pack-objects --all pack-1 &&
|
|
test_path_is_missing pack-1-*.rev &&
|
|
|
|
git -c pack.writeReverseIndex=false pack-objects --all pack-1 &&
|
|
test_path_is_missing pack-1-*.rev &&
|
|
|
|
git -c pack.writeReverseIndex=true pack-objects --all pack-1 &&
|
|
test_path_is_file pack-1-*.rev
|
|
'
|
|
|
|
test_expect_success 'reverse index is not generated when available on disk' '
|
|
test_index_pack true &&
|
|
test_path_is_file $rev &&
|
|
|
|
git rev-parse HEAD >tip &&
|
|
GIT_TEST_REV_INDEX_DIE_IN_MEMORY=1 git cat-file \
|
|
--batch-check="%(objectsize:disk)" <tip
|
|
'
|
|
|
|
test_expect_success 'revindex in-memory vs on-disk' '
|
|
git init repo &&
|
|
test_when_finished "rm -fr repo" &&
|
|
(
|
|
cd repo &&
|
|
|
|
test_commit commit &&
|
|
|
|
git rev-list --objects --no-object-names --all >objects &&
|
|
|
|
git -c pack.writeReverseIndex=false repack -ad &&
|
|
test_path_is_missing $packdir/pack-*.rev &&
|
|
git cat-file --batch-check="%(objectsize:disk) %(objectname)" \
|
|
<objects >in-core &&
|
|
|
|
git -c pack.writeReverseIndex=true repack -ad &&
|
|
test_path_is_file $packdir/pack-*.rev &&
|
|
git cat-file --batch-check="%(objectsize:disk) %(objectname)" \
|
|
<objects >on-disk &&
|
|
|
|
test_cmp on-disk in-core
|
|
)
|
|
'
|
|
test_done
|