t7700: consolidate code into test_no_missing_in_packs()
The code to test that objects were not missing from the packfile was duplicated many times. Extract the duplicated code into test_no_missing_in_packs() and use that instead. Refactor the resulting extraction so that if any git commands fail, their return codes are not silently lost. Instead of verifying each file of `alt_objects/pack/*.idx` individually in a for-loop, batch them together into one verification step. The original testing construct was O(n^2): it used a grep in a loop to test whether any objects were missing in the packfile. Rewrite this to extract the hash using sed or cut, sort the files, then use `comm -23` so that finding missing lines from the original file is done more efficiently. While we're at it, add a space to `commit_and_pack ()` for style. Signed-off-by: Denton Liu <liu.denton@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
17a4ae92ea
commit
ae475afc0f
@ -4,12 +4,23 @@ test_description='git repack works correctly'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
commit_and_pack() {
|
||||
commit_and_pack () {
|
||||
test_commit "$@" 1>&2 &&
|
||||
SHA1=$(git pack-objects --all --unpacked --incremental .git/objects/pack/pack </dev/null) &&
|
||||
echo pack-${SHA1}.pack
|
||||
}
|
||||
|
||||
test_no_missing_in_packs () {
|
||||
myidx=$(ls -1 .git/objects/pack/*.idx) &&
|
||||
test_path_is_file "$myidx" &&
|
||||
git verify-pack -v alt_objects/pack/*.idx >orig.raw &&
|
||||
sed -n -e "s/^\([0-9a-f]\{40\}\).*/\1/p" orig.raw | sort >orig &&
|
||||
git verify-pack -v $myidx >dest.raw &&
|
||||
cut -d" " -f1 dest.raw | sort >dest &&
|
||||
comm -23 orig dest >missing &&
|
||||
test_must_be_empty missing
|
||||
}
|
||||
|
||||
test_expect_success 'objects in packs marked .keep are not repacked' '
|
||||
echo content1 >file1 &&
|
||||
echo content2 >file2 &&
|
||||
@ -105,19 +116,7 @@ test_expect_success 'packed obs in alt ODB are repacked even when local repo is
|
||||
mkdir alt_objects/pack &&
|
||||
mv .git/objects/pack/* alt_objects/pack &&
|
||||
git repack -a &&
|
||||
myidx=$(ls -1 .git/objects/pack/*.idx) &&
|
||||
test_path_is_file "$myidx" &&
|
||||
for p in alt_objects/pack/*.idx
|
||||
do
|
||||
git verify-pack -v $p | sed -n -e "/^[0-9a-f]\{40\}/p"
|
||||
done | while read sha1 rest
|
||||
do
|
||||
if ! ( git verify-pack -v $myidx | grep "^$sha1" )
|
||||
then
|
||||
echo "Missing object in local pack: $sha1"
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
test_no_missing_in_packs
|
||||
'
|
||||
|
||||
test_expect_success 'packed obs in alt ODB are repacked when local repo has packs' '
|
||||
@ -128,19 +127,7 @@ test_expect_success 'packed obs in alt ODB are repacked when local repo has pack
|
||||
git commit -m more_content &&
|
||||
git repack &&
|
||||
git repack -a -d &&
|
||||
myidx=$(ls -1 .git/objects/pack/*.idx) &&
|
||||
test_path_is_file "$myidx" &&
|
||||
for p in alt_objects/pack/*.idx
|
||||
do
|
||||
git verify-pack -v $p | sed -n -e "/^[0-9a-f]\{40\}/p"
|
||||
done | while read sha1 rest
|
||||
do
|
||||
if ! ( git verify-pack -v $myidx | grep "^$sha1" )
|
||||
then
|
||||
echo "Missing object in local pack: $sha1"
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
test_no_missing_in_packs
|
||||
'
|
||||
|
||||
test_expect_success 'packed obs in alternate ODB kept pack are repacked' '
|
||||
@ -156,19 +143,7 @@ test_expect_success 'packed obs in alternate ODB kept pack are repacked' '
|
||||
fi
|
||||
done &&
|
||||
git repack -a -d &&
|
||||
myidx=$(ls -1 .git/objects/pack/*.idx) &&
|
||||
test_path_is_file "$myidx" &&
|
||||
for p in alt_objects/pack/*.idx
|
||||
do
|
||||
git verify-pack -v $p | sed -n -e "/^[0-9a-f]\{40\}/p"
|
||||
done | while read sha1 rest
|
||||
do
|
||||
if ! ( git verify-pack -v $myidx | grep "^$sha1" )
|
||||
then
|
||||
echo "Missing object in local pack: $sha1"
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
test_no_missing_in_packs
|
||||
'
|
||||
|
||||
test_expect_success 'packed unreachable obs in alternate ODB are not loosened' '
|
||||
|
Loading…
Reference in New Issue
Block a user