tar: fix mishandling of repeated hardlink in tarball; expand tests

function                                             old     new   delta
data_extract_all                                     727     767     +40
get_header_tar                                      1576    1572      -4

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko
2010-04-09 10:52:52 +02:00
parent 823b636cd1
commit 02365a6ef7
3 changed files with 73 additions and 16 deletions
+45 -7
View File
@@ -4,20 +4,25 @@
. ./testing.sh
mkdir tempdir && cd tempdir || exit 1
rm -rf tar.tempdir 2>/dev/null
mkdir tar.tempdir && cd tar.tempdir || exit 1
# testing "test name" "script" "expected result" "file input" "stdin"
testing "tar hardlinks and repeated files" "\
testing "tar hardlinks and repeated files" '\
rm -rf input_* test.tar 2>/dev/null
>input_hard1
ln input_hard1 input_hard2
mkdir input_dir
>input_dir/file
chmod -R 644 *
chmod 755 input_dir
tar cf test.tar input input_dir/ input_hard1 input_hard2 input_hard1 input_dir/ input
tar tvf test.tar | sed 's/.*[0-9] input/input/'
tar xf test.tar 2>&1 && echo Ok
" "\
tar tvf test.tar | sed "s/.*[0-9] input/input/"
tar xf test.tar 2>&1
echo Ok: $?
ls -l . input_dir/* | grep input_ | sed "s/\\(^[^ ]*\\) .* input/\\1 input/"
' "\
input
input_dir/
input_dir/file
@@ -27,7 +32,40 @@ input_hard1 -> input_hard1
input_dir/
input_dir/file
input
Ok
Ok: 0
-rw-r--r-- input_dir/file
drwxr-xr-x input_dir
-rw-r--r-- input_hard1
-rw-r--r-- input_hard2
" \
"" ""
testing "tar hardlinks mode" '\
rm -rf input_* test.tar 2>/dev/null
>input_hard1
chmod 741 input_hard1
ln input_hard1 input_hard2
mkdir input_dir
chmod 550 input_dir
ln input_hard1 input_dir
ln input_hard2 input_dir
tar cf test.tar input_*
tar tvf test.tar | sed "s/.*[0-9] input/input/"
tar xf test.tar 2>&1
echo Ok: $?
ls -l . input_dir/* | grep input_ | sed "s/\\(^[^ ]*\\) .* input/\\1 input/"
' "\
input_dir/
input_dir/input_hard1
input_dir/input_hard2 -> input_dir/input_hard1
input_hard1 -> input_dir/input_hard1
input_hard2 -> input_dir/input_hard1
Ok: 0
-rwxr----x input_dir/input_hard1
-rwxr----x input_dir/input_hard2
dr-xr-x--- input_dir
-rwxr----x input_hard1
-rwxr----x input_hard2
" \
"" ""
@@ -46,6 +84,6 @@ Ok
"Ok\n" ""
SKIP=
cd .. && rm -rf tempdir || exit 1
cd .. && rm -rf tar.tempdir || exit 1
exit $FAILCOUNT