mirror of
https://github.com/git/git
synced 2024-08-25 02:35:46 +00:00
![Pavel Roskin](/assets/img/avatar_default.png)
I have noticed that "make test" fails without any explanations when the "merge" utility is missing. I don't think tests should be silent in case of failure. It turned out that the particular test was using "exit" to interrupt the test in case of an error. This caused the whole test script to exit. No further tests would be run even if "--immediate" wasn't specified. No error message was printed. This patch does following: All instances of "exit", "exit 1" and "(exit 1)" in tests have been replaced with "return 1". In fact, "(exit 1)" had no effect. File descriptor 5 is duplicated from file descriptor 1. This is needed to print important error messages from tests. New function test_run_() has been introduced. Any "return" in the test would merely cause that function to return without skipping calls to test_failure_() and test_ok_(). The new function also traps "exit" and treats it like a fatal error (in case somebody reintroduces "exit" in the tests). test_expect_failure() and test_expect_success() check both the result of eval and the return value of test_run_(). If the later is not 0, it's always a failure because it indicates the the test didn't complete. Signed-off-by: Pavel Roskin <proski@gnu.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
169 lines
3.9 KiB
Bash
Executable file
169 lines
3.9 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2005 Junio C Hamano
|
|
#
|
|
|
|
test_description='git-pack-object
|
|
|
|
'
|
|
. ./test-lib.sh
|
|
|
|
TRASH=`pwd`
|
|
|
|
test_expect_success \
|
|
'setup' \
|
|
'rm -f .git/index*
|
|
for i in a b c
|
|
do
|
|
dd if=/dev/zero bs=4k count=1 | tr "\\0" $i >$i &&
|
|
git-update-cache --add $i || return 1
|
|
done &&
|
|
cat c >d && echo foo >>d && git-update-cache --add d &&
|
|
tree=`git-write-tree` &&
|
|
commit=`git-commit-tree $tree </dev/null` && {
|
|
echo $tree &&
|
|
echo $commit &&
|
|
git-ls-tree $tree | sed -e "s/.* \\([0-9a-f]*\\) .*/\\1/"
|
|
} >obj-list && {
|
|
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
|
|
} >expect'
|
|
|
|
test_expect_success \
|
|
'pack without delta' \
|
|
'packname_1=$(git-pack-objects --window=0 test-1 <obj-list)'
|
|
|
|
rm -fr .git2
|
|
mkdir .git2
|
|
|
|
test_expect_success \
|
|
'unpack without delta' \
|
|
"GIT_OBJECT_DIRECTORY=.git2/objects &&
|
|
export GIT_OBJECT_DIRECTORY &&
|
|
git-init-db &&
|
|
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
|
|
do
|
|
cmp $path ../.git/$path || {
|
|
echo $path differs.
|
|
return 1
|
|
}
|
|
done'
|
|
cd $TRASH
|
|
|
|
test_expect_success \
|
|
'pack with delta' \
|
|
'pwd &&
|
|
packname_2=$(git-pack-objects test-2 <obj-list)'
|
|
|
|
rm -fr .git2
|
|
mkdir .git2
|
|
|
|
test_expect_success \
|
|
'unpack with delta' \
|
|
'GIT_OBJECT_DIRECTORY=.git2/objects &&
|
|
export GIT_OBJECT_DIRECTORY &&
|
|
git-init-db &&
|
|
git-unpack-objects -n <test-2-${packname_2}.pack &&
|
|
git-unpack-objects <test-2-${packname_2}.pack'
|
|
|
|
unset GIT_OBJECT_DIRECTORY
|
|
cd $TRASH/.git2
|
|
test_expect_success \
|
|
'check unpack with delta' \
|
|
'(cd ../.git && find objects -type f -print) |
|
|
while read path
|
|
do
|
|
cmp $path ../.git/$path || {
|
|
echo $path differs.
|
|
return 1
|
|
}
|
|
done'
|
|
cd $TRASH
|
|
|
|
rm -fr .git2
|
|
mkdir .git2
|
|
|
|
test_expect_success \
|
|
'use packed objects' \
|
|
'GIT_OBJECT_DIRECTORY=.git2/objects &&
|
|
export GIT_OBJECT_DIRECTORY &&
|
|
git-init-db &&
|
|
cp test-1-${packname_1}.pack test-1-${packname_1}.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 &&
|
|
diff expect current'
|
|
|
|
|
|
test_expect_success \
|
|
'use packed deltified objects' \
|
|
'GIT_OBJECT_DIRECTORY=.git2/objects &&
|
|
export GIT_OBJECT_DIRECTORY &&
|
|
rm -f .git2/objects/pack/test-?.idx &&
|
|
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 &&
|
|
diff expect current'
|
|
|
|
unset GIT_OBJECT_DIRECTORY
|
|
|
|
test_expect_success \
|
|
'verify pack' \
|
|
'git-verify-pack test-1-${packname_1}.idx test-2-${packname_2}.idx'
|
|
|
|
test_expect_success \
|
|
'corrupt a pack and see if verify catches' \
|
|
'cp test-1-${packname_1}.idx test-3.idx &&
|
|
cp test-2-${packname_2}.pack test-3.pack &&
|
|
if git-verify-pack test-3.idx
|
|
then false
|
|
else :;
|
|
fi &&
|
|
|
|
cp test-1-${packname_1}.pack test-3.pack &&
|
|
dd if=/dev/zero of=test-3.pack count=1 bs=1 conv=notrunc seek=2 &&
|
|
if git-verify-pack test-3.idx
|
|
then false
|
|
else :;
|
|
fi &&
|
|
|
|
cp test-1-${packname_1}.pack test-3.pack &&
|
|
dd if=/dev/zero of=test-3.pack count=1 bs=1 conv=notrunc seek=7 &&
|
|
if git-verify-pack test-3.idx
|
|
then false
|
|
else :;
|
|
fi &&
|
|
|
|
cp test-1-${packname_1}.pack test-3.pack &&
|
|
dd if=/dev/zero of=test-3.pack count=1 bs=1 conv=notrunc seek=12 &&
|
|
if git-verify-pack test-3.idx
|
|
then false
|
|
else :;
|
|
fi &&
|
|
|
|
:'
|
|
|
|
test_done
|