t7700: consolidate code into test_has_duplicate_object()

The code to test that objects were not duplicated from the packfile was
duplicated many times. Extract the duplicated code into
test_has_duplicate_object() and use that instead.

Refactor the resulting extraction so that if the git command fails,
the return code is not silently lost.

Signed-off-by: Denton Liu <liu.denton@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Denton Liu 2019-12-04 14:03:14 -08:00 committed by Junio C Hamano
parent ae475afc0f
commit cfe5eda02a

View File

@ -21,6 +21,25 @@ test_no_missing_in_packs () {
test_must_be_empty missing test_must_be_empty missing
} }
# we expect $packsha1 and $objsha1 to be defined
test_has_duplicate_object () {
want_duplicate_object="$1"
found_duplicate_object=false
for p in .git/objects/pack/*.idx
do
idx=$(basename $p)
test "pack-$packsha1.idx" = "$idx" && continue
git verify-pack -v $p >packlist || return $?
if egrep "^$objsha1" packlist
then
found_duplicate_object=true
echo "DUPLICATE OBJECT FOUND"
break
fi
done &&
test "$want_duplicate_object" = "$found_duplicate_object"
}
test_expect_success 'objects in packs marked .keep are not repacked' ' test_expect_success 'objects in packs marked .keep are not repacked' '
echo content1 >file1 && echo content1 >file1 &&
echo content2 >file2 && echo content2 >file2 &&
@ -40,54 +59,19 @@ test_expect_success 'objects in packs marked .keep are not repacked' '
mv pack-* .git/objects/pack/ && mv pack-* .git/objects/pack/ &&
git repack -A -d -l && git repack -A -d -l &&
git prune-packed && git prune-packed &&
for p in .git/objects/pack/*.idx test_has_duplicate_object false
do
idx=$(basename $p)
test "pack-$packsha1.idx" = "$idx" && continue
if git verify-pack -v $p | egrep "^$objsha1"
then
found_duplicate_object=1
echo "DUPLICATE OBJECT FOUND"
break
fi
done &&
test -z "$found_duplicate_object"
' '
test_expect_success 'writing bitmaps via command-line can duplicate .keep objects' ' test_expect_success 'writing bitmaps via command-line can duplicate .keep objects' '
# build on $objsha1, $packsha1, and .keep state from previous # build on $objsha1, $packsha1, and .keep state from previous
git repack -Adbl && git repack -Adbl &&
test_when_finished "found_duplicate_object=" && test_has_duplicate_object true
for p in .git/objects/pack/*.idx
do
idx=$(basename $p)
test "pack-$packsha1.idx" = "$idx" && continue
if git verify-pack -v $p | egrep "^$objsha1"
then
found_duplicate_object=1
echo "DUPLICATE OBJECT FOUND"
break
fi
done &&
test "$found_duplicate_object" = 1
' '
test_expect_success 'writing bitmaps via config can duplicate .keep objects' ' test_expect_success 'writing bitmaps via config can duplicate .keep objects' '
# build on $objsha1, $packsha1, and .keep state from previous # build on $objsha1, $packsha1, and .keep state from previous
git -c repack.writebitmaps=true repack -Adl && git -c repack.writebitmaps=true repack -Adl &&
test_when_finished "found_duplicate_object=" && test_has_duplicate_object true
for p in .git/objects/pack/*.idx
do
idx=$(basename $p)
test "pack-$packsha1.idx" = "$idx" && continue
if git verify-pack -v $p | egrep "^$objsha1"
then
found_duplicate_object=1
echo "DUPLICATE OBJECT FOUND"
break
fi
done &&
test "$found_duplicate_object" = 1
' '
test_expect_success 'loose objects in alternate ODB are not repacked' ' test_expect_success 'loose objects in alternate ODB are not repacked' '
@ -100,16 +84,7 @@ test_expect_success 'loose objects in alternate ODB are not repacked' '
git commit -m commit_file3 && git commit -m commit_file3 &&
git repack -a -d -l && git repack -a -d -l &&
git prune-packed && git prune-packed &&
for p in .git/objects/pack/*.idx test_has_duplicate_object false
do
if git verify-pack -v $p | egrep "^$objsha1"
then
found_duplicate_object=1
echo "DUPLICATE OBJECT FOUND"
break
fi
done &&
test -z "$found_duplicate_object"
' '
test_expect_success 'packed obs in alt ODB are repacked even when local repo is packless' ' test_expect_success 'packed obs in alt ODB are repacked even when local repo is packless' '