t5300: modernize basic tests

The first set of tests in t5300 goes back to 2005, and doesn't use some
of our customary style and tools these days. In preparation for touching
them, let's modernize a few things:

  - titles go on the line with test_expect_success, with a hanging
    open-quote to start the test body

  - test bodies should be indented with tabs

  - opening braces for shell blocks in &&-chains go on their own line

  - no space between redirect operators and files (">foo", not "> foo")

  - avoid doing work outside of test blocks; in this case, we can stick
    the setup of ".git2" into the appropriate blocks

  - avoid modifying and then cleaning up the environment or current
    directory by using subshells and "git -C"

  - this test does a curious thing when testing the unpacking: it sets
    GIT_OBJECT_DIRECTORY, and then does a "git init" in the _original_
    directory, creating a weird mixed situation. Instead, it's much
    simpler to just "git init --bare" a new repository to unpack into,
    and check the results there. I renamed this "git2" instead of
    ".git2" to make it more clear it's a separate repo.

  - we can observe that the bodies of the no-delta, ref_delta, and
    ofs_delta cases are all virtually identical except for the pack
    creation, and factor out shared helper functions. I collapsed "do
    the unpack" and "check the results of the unpack" into a single
    test, since that makes the expected lifetime of the "git2" temporary
    directory more clear (that also lets us use test_when_finished to
    clean it up). This does make the "-v" output slightly less useful,
    but the improvement in reading the actual test code makes it worth
    it.

  - I dropped the "pwd" calls from some tests. These don't do anything
    functional, and I suspect may have been an aid for debugging when
    the script was more cavalier about leaving the working directory
    changed between tests.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jeff King
2021-05-01 10:02:59 -04:00
committed by Junio C Hamano
parent 7e39198978
commit 5489899812

View File

@ -8,125 +8,74 @@ test_description='git pack-object
' '
. ./test-lib.sh . ./test-lib.sh
TRASH=$(pwd) test_expect_success 'setup' '
rm -f .git/index* &&
test_expect_success \ perl -e "print \"a\" x 4096;" >a &&
'setup' \ perl -e "print \"b\" x 4096;" >b &&
'rm -f .git/index* && perl -e "print \"c\" x 4096;" >c &&
perl -e "print \"a\" x 4096;" > a && test-tool genrandom "seed a" 2097152 >a_big &&
perl -e "print \"b\" x 4096;" > b && test-tool genrandom "seed b" 2097152 >b_big &&
perl -e "print \"c\" x 4096;" > c &&
test-tool genrandom "seed a" 2097152 > a_big &&
test-tool genrandom "seed b" 2097152 > b_big &&
git update-index --add a a_big b b_big c && git update-index --add a a_big b b_big c &&
cat c >d && echo foo >>d && git update-index --add d && cat c >d && echo foo >>d && git update-index --add d &&
tree=$(git write-tree) && tree=$(git write-tree) &&
commit=$(git commit-tree $tree </dev/null) && { commit=$(git commit-tree $tree </dev/null) &&
{
echo $tree && echo $tree &&
echo $commit && echo $commit &&
git ls-tree $tree | sed -e "s/.* \\([0-9a-f]*\\) .*/\\1/" git ls-tree $tree | sed -e "s/.* \\([0-9a-f]*\\) .*/\\1/"
} >obj-list && { } >obj-list &&
{
git diff-tree --root -p $commit && git diff-tree --root -p $commit &&
while read object while read object
do do
t=$(git cat-file -t $object) && t=$(git cat-file -t $object) &&
git cat-file $t $object || return 1 git cat-file $t $object || return 1
done <obj-list done <obj-list
} >expect' } >expect
'
test_expect_success \ test_expect_success 'pack without delta' '
'pack without delta' \ packname_1=$(git pack-objects --window=0 test-1 <obj-list)
'packname_1=$(git pack-objects --window=0 test-1 <obj-list)' '
test_expect_success \ test_expect_success 'pack-objects with bogus arguments' '
'pack-objects with bogus arguments' \ test_must_fail git pack-objects --window=0 test-1 blah blah <obj-list
'test_must_fail git pack-objects --window=0 test-1 blah blah <obj-list' '
rm -fr .git2 check_unpack () {
mkdir .git2 test_when_finished "rm -rf git2" &&
git init --bare git2 &&
test_expect_success \ git -C git2 unpack-objects -n <"$1".pack &&
'unpack without delta' \ git -C git2 unpack-objects <"$1".pack &&
"GIT_OBJECT_DIRECTORY=.git2/objects && (cd .git && find objects -type f -print) |
export GIT_OBJECT_DIRECTORY &&
git init &&
git unpack-objects -n <test-1-${packname_1}.pack &&
git unpack-objects <test-1-${packname_1}.pack"
unset GIT_OBJECT_DIRECTORY
cd "$TRASH/.git2"
test_expect_success \
'check unpack without delta' \
'(cd ../.git && find objects -type f -print) |
while read path while read path
do do
cmp $path ../.git/$path || { cmp git2/$path .git/$path || {
echo $path differs. echo $path differs.
return 1 return 1
} }
done' done
cd "$TRASH" }
test_expect_success \ test_expect_success 'unpack without delta' '
'pack with REF_DELTA' \ check_unpack test-1-${packname_1}
'pwd && '
packname_2=$(git pack-objects test-2 <obj-list)'
rm -fr .git2 test_expect_success 'pack with REF_DELTA' '
mkdir .git2 packname_2=$(git pack-objects test-2 <obj-list)
'
test_expect_success \ test_expect_success 'unpack with REF_DELTA' '
'unpack with REF_DELTA' \ check_unpack test-2-${packname_2}
'GIT_OBJECT_DIRECTORY=.git2/objects && '
export GIT_OBJECT_DIRECTORY &&
git init &&
git unpack-objects -n <test-2-${packname_2}.pack &&
git unpack-objects <test-2-${packname_2}.pack'
unset GIT_OBJECT_DIRECTORY test_expect_success 'pack with OFS_DELTA' '
cd "$TRASH/.git2" packname_3=$(git pack-objects --delta-base-offset test-3 <obj-list)
test_expect_success \ '
'check unpack with REF_DELTA' \
'(cd ../.git && find objects -type f -print) |
while read path
do
cmp $path ../.git/$path || {
echo $path differs.
return 1
}
done'
cd "$TRASH"
test_expect_success \ test_expect_success 'unpack with OFS_DELTA' '
'pack with OFS_DELTA' \ check_unpack test-3-${packname_3}
'pwd && '
packname_3=$(git pack-objects --delta-base-offset test-3 <obj-list)'
rm -fr .git2
mkdir .git2
test_expect_success \
'unpack with OFS_DELTA' \
'GIT_OBJECT_DIRECTORY=.git2/objects &&
export GIT_OBJECT_DIRECTORY &&
git init &&
git unpack-objects -n <test-3-${packname_3}.pack &&
git unpack-objects <test-3-${packname_3}.pack'
unset GIT_OBJECT_DIRECTORY
cd "$TRASH/.git2"
test_expect_success \
'check unpack with OFS_DELTA' \
'(cd ../.git && find objects -type f -print) |
while read path
do
cmp $path ../.git/$path || {
echo $path differs.
return 1
}
done'
cd "$TRASH"
test_expect_success 'compare delta flavors' ' test_expect_success 'compare delta flavors' '
perl -e '\'' perl -e '\''
@ -135,55 +84,33 @@ test_expect_success 'compare delta flavors' '
'\'' test-2-$packname_2.pack test-3-$packname_3.pack '\'' test-2-$packname_2.pack test-3-$packname_3.pack
' '
rm -fr .git2 check_use_objects () {
mkdir .git2 test_when_finished "rm -rf git2" &&
git init --bare git2 &&
test_expect_success \ cp "$1".pack "$1".idx git2/objects/pack &&
'use packed objects' \ (
'GIT_OBJECT_DIRECTORY=.git2/objects && cd git2 &&
export GIT_OBJECT_DIRECTORY &&
git init &&
cp test-1-${packname_1}.pack test-1-${packname_1}.idx .git2/objects/pack && {
git diff-tree --root -p $commit && git diff-tree --root -p $commit &&
while read object while read object
do do
t=$(git cat-file -t $object) && t=$(git cat-file -t $object) &&
git cat-file $t $object || return 1 git cat-file $t $object || exit 1
done <obj-list done
} >current && ) <obj-list >current &&
cmp expect current' cmp expect current
}
test_expect_success \ test_expect_success 'use packed objects' '
'use packed deltified (REF_DELTA) objects' \ check_use_objects test-1-${packname_1}
'GIT_OBJECT_DIRECTORY=.git2/objects && '
export GIT_OBJECT_DIRECTORY &&
rm -f .git2/objects/pack/test-* &&
cp test-2-${packname_2}.pack test-2-${packname_2}.idx .git2/objects/pack && {
git diff-tree --root -p $commit &&
while read object
do
t=$(git cat-file -t $object) &&
git cat-file $t $object || return 1
done <obj-list
} >current &&
cmp expect current'
test_expect_success \ test_expect_success 'use packed deltified (REF_DELTA) objects' '
'use packed deltified (OFS_DELTA) objects' \ check_use_objects test-2-${packname_2}
'GIT_OBJECT_DIRECTORY=.git2/objects && '
export GIT_OBJECT_DIRECTORY &&
rm -f .git2/objects/pack/test-* &&
cp test-3-${packname_3}.pack test-3-${packname_3}.idx .git2/objects/pack && {
git diff-tree --root -p $commit &&
while read object
do
t=$(git cat-file -t $object) &&
git cat-file $t $object || return 1
done <obj-list
} >current &&
cmp expect current'
unset GIT_OBJECT_DIRECTORY test_expect_success 'use packed deltified (OFS_DELTA) objects' '
check_use_objects test-3-${packname_3}
'
test_expect_success 'survive missing objects/pack directory' ' test_expect_success 'survive missing objects/pack directory' '
( (