1*cf5a6c84SAndroid Build Coastguard Worker#!/bin/bash 2*cf5a6c84SAndroid Build Coastguard Worker 3*cf5a6c84SAndroid Build Coastguard Worker[ -f testing.sh ] && . testing.sh 4*cf5a6c84SAndroid Build Coastguard Worker 5*cf5a6c84SAndroid Build Coastguard Worker#testing "name" "command" "result" "infile" "stdin" 6*cf5a6c84SAndroid Build Coastguard Worker 7*cf5a6c84SAndroid Build Coastguard Worker# For reproducibility: TZ=UTC, umask 0002, override ownership and timestamp 8*cf5a6c84SAndroid Build Coastguard Workerexport TZ=utc 9*cf5a6c84SAndroid Build Coastguard Workerumask 0002 10*cf5a6c84SAndroid Build Coastguard WorkerTAR='tar c --owner root --group sys --mtime @1234567890' 11*cf5a6c84SAndroid Build Coastguard Worker 12*cf5a6c84SAndroid Build Coastguard Worker# 255 bytes, longest VFS name 13*cf5a6c84SAndroid Build Coastguard WorkerLONG=0123456789abcdef0123456789abcdef 14*cf5a6c84SAndroid Build Coastguard WorkerLONG=$LONG$LONG$LONG$LONG$LONG$LONG$LONG$LONG 15*cf5a6c84SAndroid Build Coastguard WorkerLONG=${LONG:1:255} 16*cf5a6c84SAndroid Build Coastguard Worker 17*cf5a6c84SAndroid Build Coastguard Worker# We check both sha1sum (to ensure binary identical output) and list contents. 18*cf5a6c84SAndroid Build Coastguard Worker 19*cf5a6c84SAndroid Build Coastguard Worker# Check hash of first N 512 byte frames to ensure result is binary identical. 20*cf5a6c84SAndroid Build Coastguard Workerfunction SUM() 21*cf5a6c84SAndroid Build Coastguard Worker{ 22*cf5a6c84SAndroid Build Coastguard Worker # Different tars add variable trailing NUL padding (1024 bytes is just 23*cf5a6c84SAndroid Build Coastguard Worker # minimum) so look at first N 512-byte frames when analyzing header content. 24*cf5a6c84SAndroid Build Coastguard Worker tee save.dat | head -c $(($1*512)) | sha1sum | sed "s/ .*//" 25*cf5a6c84SAndroid Build Coastguard Worker} 26*cf5a6c84SAndroid Build Coastguard Worker 27*cf5a6c84SAndroid Build Coastguard Worker# List tarball contents, converting variable tabs into one space 28*cf5a6c84SAndroid Build Coastguard Workerfunction LST() 29*cf5a6c84SAndroid Build Coastguard Worker{ 30*cf5a6c84SAndroid Build Coastguard Worker tar tv "$@" | sed 's/[ \t][ \t]*/ /g' 31*cf5a6c84SAndroid Build Coastguard Worker} 32*cf5a6c84SAndroid Build Coastguard Worker 33*cf5a6c84SAndroid Build Coastguard Worker# Check that stored empty file is binary identical and decodes as expected. 34*cf5a6c84SAndroid Build Coastguard Workertouch file 35*cf5a6c84SAndroid Build Coastguard Workertesting "store file" "$TAR file | SUM 3" \ 36*cf5a6c84SAndroid Build Coastguard Worker "2735f3a18d770dd0d7145d76108532f72bef9927\n" "" "" 37*cf5a6c84SAndroid Build Coastguard Workertesting "pass file" "$TAR file | LST" \ 38*cf5a6c84SAndroid Build Coastguard Worker "-rw-rw-r-- root/sys 0 2009-02-13 23:31 file\n" "" "" 39*cf5a6c84SAndroid Build Coastguard Worker 40*cf5a6c84SAndroid Build Coastguard Worker# Two files from -T list 41*cf5a6c84SAndroid Build Coastguard Workertouch file1 file2 42*cf5a6c84SAndroid Build Coastguard Workertesting "-T newline" "$TAR -T input | LST" \ 43*cf5a6c84SAndroid Build Coastguard Worker "-rw-rw-r-- root/sys 0 2009-02-13 23:31 file1\n-rw-rw-r-- root/sys 0 2009-02-13 23:31 file2\n" "file1\nfile2\n" "" 44*cf5a6c84SAndroid Build Coastguard Workertesting "-T null" "$TAR --null -T input | LST" \ 45*cf5a6c84SAndroid Build Coastguard Worker "-rw-rw-r-- root/sys 0 2009-02-13 23:31 file1\n-rw-rw-r-- root/sys 0 2009-02-13 23:31 file2\n" "file1\0file2\0" "" 46*cf5a6c84SAndroid Build Coastguard Worker 47*cf5a6c84SAndroid Build Coastguard Worker# User "root" is UID 0 and group "sys" is GID 3 (on Linux, BSD, and Mac), 48*cf5a6c84SAndroid Build Coastguard Worker# inherited from Bell Labs Unix v7 49*cf5a6c84SAndroid Build Coastguard Worker 50*cf5a6c84SAndroid Build Coastguard Worker# Note: testing both "tar c" and "tar -c" here. 51*cf5a6c84SAndroid Build Coastguard Workertesting "specify UID, fetch GID" "tar -c --owner nobody:65534 --mtime @0 file | LST" \ 52*cf5a6c84SAndroid Build Coastguard Worker "-rw-rw-r-- nobody/$(stat -c %G file) 0 1970-01-01 00:00 file\n" "" "" 53*cf5a6c84SAndroid Build Coastguard Workertesting "fetch UID, specify GID" "tar c --group nobody:65534 --mtime @0 file | LST" \ 54*cf5a6c84SAndroid Build Coastguard Worker "-rw-rw-r-- $(stat -c %U file)/nobody 0 1970-01-01 00:00 file\n" "" "" 55*cf5a6c84SAndroid Build Coastguard Worker 56*cf5a6c84SAndroid Build Coastguard Worker# Large values switch from ascii numbers to a binary format. 57*cf5a6c84SAndroid Build Coastguard Workertesting "huge values" "tar c --owner 9999999 --group 8888888 --mtime @0 file | SUM 3" \ 58*cf5a6c84SAndroid Build Coastguard Worker "396b07fd2f80eeb312462e3bfb7dc1325dc6bcfb\n" "" "" 59*cf5a6c84SAndroid Build Coastguard Worker 60*cf5a6c84SAndroid Build Coastguard Workertestcmd "longname" "tf $FILES/tar/long_path.tar" \ 61*cf5a6c84SAndroid Build Coastguard Worker "$(printf 'long file name%86cTRAILING' ' ' | tr ' ' _)\n" "" "" 62*cf5a6c84SAndroid Build Coastguard Worker 63*cf5a6c84SAndroid Build Coastguard Workertouch -t 198701231234.56 file 64*cf5a6c84SAndroid Build Coastguard Workertesting "pass mtime" \ 65*cf5a6c84SAndroid Build Coastguard Worker "tar c --owner root --group sys file | LST --full-time" \ 66*cf5a6c84SAndroid Build Coastguard Worker "-rw-rw-r-- root/sys 0 1987-01-23 12:34:56 file\n" "" "" 67*cf5a6c84SAndroid Build Coastguard Worker 68*cf5a6c84SAndroid Build Coastguard Workertesting "adjust mode" \ 69*cf5a6c84SAndroid Build Coastguard Worker "tar c --owner root --group sys --mode a+x file | LST --full-time" \ 70*cf5a6c84SAndroid Build Coastguard Worker "-rwxrwxr-x root/sys 0 1987-01-23 12:34:56 file\n" "" "" 71*cf5a6c84SAndroid Build Coastguard Worker 72*cf5a6c84SAndroid Build Coastguard Workermkdir dir 73*cf5a6c84SAndroid Build Coastguard Workertesting "store dir" "$TAR dir | SUM 3" \ 74*cf5a6c84SAndroid Build Coastguard Worker "85add1060cfe831ca0cdc945158efe6db485b81e\n" "" "" 75*cf5a6c84SAndroid Build Coastguard Workertesting "pass dir" "$TAR dir | LST" \ 76*cf5a6c84SAndroid Build Coastguard Worker "drwxrwxr-x root/sys 0 2009-02-13 23:31 dir/\n" "" "" 77*cf5a6c84SAndroid Build Coastguard Worker 78*cf5a6c84SAndroid Build Coastguard Worker# note: does _not_ include dir entry in archive, just file 79*cf5a6c84SAndroid Build Coastguard Workertouch dir/file 80*cf5a6c84SAndroid Build Coastguard Workertesting "store file in dir" "$TAR dir/file | SUM 3" \ 81*cf5a6c84SAndroid Build Coastguard Worker "d9e7fb3884430d29e7eed0dc04a2593dd260df14\n" "" "" 82*cf5a6c84SAndroid Build Coastguard Worker 83*cf5a6c84SAndroid Build Coastguard Worker# Test recursion with one file so filesystem sort order can't change result 84*cf5a6c84SAndroid Build Coastguard Workertesting "store dir and dir/file" "$TAR dir | SUM 3" \ 85*cf5a6c84SAndroid Build Coastguard Worker "a4e35f87e28c4565b60ba01dbe79e431914f8788\n" "" "" 86*cf5a6c84SAndroid Build Coastguard Worker 87*cf5a6c84SAndroid Build Coastguard Workertesting "pass dir/file" "$TAR dir | LST" \ 88*cf5a6c84SAndroid Build Coastguard Worker "drwxrwxr-x root/sys 0 2009-02-13 23:31 dir/\n-rw-rw-r-- root/sys 0 2009-02-13 23:31 dir/file\n" "" "" 89*cf5a6c84SAndroid Build Coastguard Worker 90*cf5a6c84SAndroid Build Coastguard Workerecho boing > dir/that 91*cf5a6c84SAndroid Build Coastguard Workertesting "tar C" "$TAR -C dir that | SUM 3" \ 92*cf5a6c84SAndroid Build Coastguard Worker "d469d4bc06def2d8808400ba30025ca295d05e4f\n" "" "" 93*cf5a6c84SAndroid Build Coastguard Worker 94*cf5a6c84SAndroid Build Coastguard Workerln dir/file dir/hardlink 95*cf5a6c84SAndroid Build Coastguard Workertesting "store hardlink" "$TAR dir/file dir/hardlink | SUM 3" \ 96*cf5a6c84SAndroid Build Coastguard Worker "519de8abd1b32debd495a0fc1d96082184abbdcc\n" "" "" 97*cf5a6c84SAndroid Build Coastguard Worker 98*cf5a6c84SAndroid Build Coastguard Workerskipnot mkfifo dir/fifo 2>/dev/null 99*cf5a6c84SAndroid Build Coastguard Workertesting "create dir/fifo" "$TAR dir/fifo | SUM 3" \ 100*cf5a6c84SAndroid Build Coastguard Worker "cad477bd0fc5173d0a43f4774f514035456960e6\n" "" "" 101*cf5a6c84SAndroid Build Coastguard Worker 102*cf5a6c84SAndroid Build Coastguard Worker# test L and K records 103*cf5a6c84SAndroid Build Coastguard Worker 104*cf5a6c84SAndroid Build Coastguard Worker# 4+96=100 (biggest short name), 4+97=101 (shortest long name) 105*cf5a6c84SAndroid Build Coastguard Workertouch dir/${LONG:1:96} dir/${LONG:1:97} 106*cf5a6c84SAndroid Build Coastguard Workertesting "create long fname" "$TAR dir/${LONG:1:97} dir/${LONG:1:96} | SUM 3" \ 107*cf5a6c84SAndroid Build Coastguard Worker "d70018505fa5df19ae73498cfc74d0281601e42e\n" "" "" 108*cf5a6c84SAndroid Build Coastguard Worker 109*cf5a6c84SAndroid Build Coastguard Worker# MacOS X has different symlink permissions, skip these tests there 110*cf5a6c84SAndroid Build Coastguard Worker[ "$(uname)" == Darwin ] && SKIP=999 111*cf5a6c84SAndroid Build Coastguard Worker 112*cf5a6c84SAndroid Build Coastguard Worker # / and .. only stripped from name, not symlink target. 113*cf5a6c84SAndroid Build Coastguard Worker ln -s ../name.././.. dir/link 114*cf5a6c84SAndroid Build Coastguard Worker testing "create symlink" "$TAR dir/link | SUM 3" \ 115*cf5a6c84SAndroid Build Coastguard Worker "f841bf9d757c655c5d37f30be62acb7ae24f433c\n" "" "" 116*cf5a6c84SAndroid Build Coastguard Worker 117*cf5a6c84SAndroid Build Coastguard Worker ln dir/link dir/hlink 118*cf5a6c84SAndroid Build Coastguard Worker testing "create hardlink to symlink" "$TAR dir/link dir/hlink | SUM 3" \ 119*cf5a6c84SAndroid Build Coastguard Worker "de571a6dbf09e1485e513ad13a178b1729267452\n" "" "" 120*cf5a6c84SAndroid Build Coastguard Worker 121*cf5a6c84SAndroid Build Coastguard Worker ln -s dir/${LONG:1:96} dir/lshort 122*cf5a6c84SAndroid Build Coastguard Worker ln -s dir/${LONG:1:97} dir/llong 123*cf5a6c84SAndroid Build Coastguard Worker testing "create long symlink" "$TAR dir/lshort dir/llong | SUM 3" \ 124*cf5a6c84SAndroid Build Coastguard Worker "07eaf397634b5443dbf2d3ec38a4302150fcfe82\n" "" "" 125*cf5a6c84SAndroid Build Coastguard Worker 126*cf5a6c84SAndroid Build Coastguard Worker skipnot ln -s $LONG dir/${LONG:5} 2>/dev/null 127*cf5a6c84SAndroid Build Coastguard Worker testing "create long->long" "$TAR dir/${LONG:5} | SUM 7" \ 128*cf5a6c84SAndroid Build Coastguard Worker "b9e24f53e27496c5125445230d201b4a36ff7398\n" "" "" 129*cf5a6c84SAndroid Build Coastguard Worker 130*cf5a6c84SAndroid Build Coastguard Worker # absolute and relative link names, broken and not 131*cf5a6c84SAndroid Build Coastguard Worker ln -s file dir/linkok 132*cf5a6c84SAndroid Build Coastguard Worker testing "create symlink" "$TAR dir/linkok | SUM 3" \ 133*cf5a6c84SAndroid Build Coastguard Worker "f5669cfd179ddcdd5ca9f8a1561a99e11e0a08b1\n" "" "" 134*cf5a6c84SAndroid Build Coastguard Worker 135*cf5a6c84SAndroid Build Coastguard WorkerSKIP=0 # End of tests that don't match MacOS symlink permissions 136*cf5a6c84SAndroid Build Coastguard Worker 137*cf5a6c84SAndroid Build Coastguard Workersymlink_perms=lrwxrwxrwx 138*cf5a6c84SAndroid Build Coastguard Worker[ "$(uname)" == "Darwin" ] && symlink_perms=lrwxrwxr-x 139*cf5a6c84SAndroid Build Coastguard Worker 140*cf5a6c84SAndroid Build Coastguard Workerln -s /dev/null dir/linknull 141*cf5a6c84SAndroid Build Coastguard Workertesting "pass absolute symlink" "$TAR dir/linknull | LST" \ 142*cf5a6c84SAndroid Build Coastguard Worker "$symlink_perms root/sys 0 2009-02-13 23:31 dir/linknull -> /dev/null\n" "" "" 143*cf5a6c84SAndroid Build Coastguard Worker 144*cf5a6c84SAndroid Build Coastguard Workerln -s rel/broken dir/relbrok 145*cf5a6c84SAndroid Build Coastguard Workertesting "pass broken symlink" "$TAR dir/relbrok | LST" \ 146*cf5a6c84SAndroid Build Coastguard Worker "$symlink_perms root/sys 0 2009-02-13 23:31 dir/relbrok -> rel/broken\n" "" "" 147*cf5a6c84SAndroid Build Coastguard Worker 148*cf5a6c84SAndroid Build Coastguard Workerln -s /does/not/exist dir/linkabsbrok 149*cf5a6c84SAndroid Build Coastguard Workertesting "pass broken absolute symlink" "$TAR dir/linkabsbrok | LST" \ 150*cf5a6c84SAndroid Build Coastguard Worker "$symlink_perms root/sys 0 2009-02-13 23:31 dir/linkabsbrok -> /does/not/exist\n" \ 151*cf5a6c84SAndroid Build Coastguard Worker "" "" 152*cf5a6c84SAndroid Build Coastguard Worker 153*cf5a6c84SAndroid Build Coastguard Workernulldev=1,3 # devtmpfs values 154*cf5a6c84SAndroid Build Coastguard Worker[ "$(uname)" == "Darwin" ] && nulldev=3,2 155*cf5a6c84SAndroid Build Coastguard Worker 156*cf5a6c84SAndroid Build Coastguard Workertesting "pass /dev/null" \ 157*cf5a6c84SAndroid Build Coastguard Worker "tar c --mtime @0 /dev/null 2>/dev/null | LST" \ 158*cf5a6c84SAndroid Build Coastguard Worker "crw-rw-rw- $(stat -c %U/%G /dev/null) $nulldev 1970-01-01 00:00 dev/null\n" \ 159*cf5a6c84SAndroid Build Coastguard Worker "" "" 160*cf5a6c84SAndroid Build Coastguard Workertesting "--absolute-names" \ 161*cf5a6c84SAndroid Build Coastguard Worker "tar c --mtime @0 --absolute-names /dev/null 2>/dev/null | LST" \ 162*cf5a6c84SAndroid Build Coastguard Worker "crw-rw-rw- $(stat -c %U/%G /dev/null) $nulldev 1970-01-01 00:00 /dev/null\n"\ 163*cf5a6c84SAndroid Build Coastguard Worker "" "" 164*cf5a6c84SAndroid Build Coastguard Worker 165*cf5a6c84SAndroid Build Coastguard Worker# compression types 166*cf5a6c84SAndroid Build Coastguard Workertesting "autodetect gzip" 'LST -f "$FILES"/tar/tar.tgz' \ 167*cf5a6c84SAndroid Build Coastguard Worker "drwxr-x--- enh/eng 0 2017-05-13 01:05 dir/\n-rw-r----- enh/eng 12 2017-05-13 01:05 dir/file\n" \ 168*cf5a6c84SAndroid Build Coastguard Worker "" "" 169*cf5a6c84SAndroid Build Coastguard Worker 170*cf5a6c84SAndroid Build Coastguard Workertesting "manually specify bz2" 'LST -jf "$FILES"/tar/tar.tbz2' \ 171*cf5a6c84SAndroid Build Coastguard Worker "drwxr-x--- enh/eng 0 2017-05-13 01:05 dir/\n-rw-r----- enh/eng 12 2017-05-13 01:05 dir/file\n" \ 172*cf5a6c84SAndroid Build Coastguard Worker "" "" 173*cf5a6c84SAndroid Build Coastguard Worker 174*cf5a6c84SAndroid Build Coastguard Worker# -I 175*cf5a6c84SAndroid Build Coastguard Workertesting "-I gzip c" "$TAR -Igzip file | file - | grep -o 'gzip compressed'" \ 176*cf5a6c84SAndroid Build Coastguard Worker "gzip compressed\n" "" "" 177*cf5a6c84SAndroid Build Coastguard Workertesting "-I gzip t" 'LST -Igzip -f "$FILES"/tar/tar.tgz' \ 178*cf5a6c84SAndroid Build Coastguard Worker "drwxr-x--- enh/eng 0 2017-05-13 01:05 dir/\n-rw-r----- enh/eng 12 2017-05-13 01:05 dir/file\n" \ 179*cf5a6c84SAndroid Build Coastguard Worker "" "" 180*cf5a6c84SAndroid Build Coastguard Worker 181*cf5a6c84SAndroid Build Coastguard Workerskipnot mknod -m 660 dir/char c 12 34 2>/dev/null && chgrp sys dir/char 182*cf5a6c84SAndroid Build Coastguard WorkerNOSPACE=1 testing "character special" "tar --mtime @0 -cf test.tar dir/char && rm -f dir/char && tar xf test.tar && ls -l --full-time dir/char" \ 183*cf5a6c84SAndroid Build Coastguard Worker "crw-rw---- 1 root sys 12, 34 1970-01-01 00:00:00.000000000 +0000 dir/char\n"\ 184*cf5a6c84SAndroid Build Coastguard Worker "" "" 185*cf5a6c84SAndroid Build Coastguard Worker 186*cf5a6c84SAndroid Build Coastguard Workerskipnot mknod -m 660 dir/block b 23 45 2>/dev/null && chgrp sys dir/block 187*cf5a6c84SAndroid Build Coastguard WorkerNOSPACE=1 testing "block special" "tar --mtime @0 -cf test.tar dir/block && rm -f dir/block && tar xf test.tar && ls -l --full-time dir/block" \ 188*cf5a6c84SAndroid Build Coastguard Worker "brw-rw---- 1 root sys 23, 45 1970-01-01 00:00:00.000000000 +0000 dir/block\n"\ 189*cf5a6c84SAndroid Build Coastguard Worker "" "" 190*cf5a6c84SAndroid Build Coastguard Worker 191*cf5a6c84SAndroid Build Coastguard Workerskipnot chown nobody:nogroup dir/file 2>/dev/null 192*cf5a6c84SAndroid Build Coastguard Workertesting "ownership" "$TAR dir/file | SUM 3" \ 193*cf5a6c84SAndroid Build Coastguard Worker "2d7b96c7025987215f5a41f10eaa84311160afdb\n" "" "" 194*cf5a6c84SAndroid Build Coastguard Worker 195*cf5a6c84SAndroid Build Coastguard Workermkdir -p dd/sub/blah && 196*cf5a6c84SAndroid Build Coastguard Workertar cf test.tar dd/sub/blah && 197*cf5a6c84SAndroid Build Coastguard Workerrm -rf dd/sub && 198*cf5a6c84SAndroid Build Coastguard Workerskipnot ln -s ../.. dd/sub 199*cf5a6c84SAndroid Build Coastguard Workertoyonly testing "symlink out of cwd" \ 200*cf5a6c84SAndroid Build Coastguard Worker "tar xf test.tar 2> /dev/null || echo yes ; [ ! -e dd/sub/blah ] && echo yes" \ 201*cf5a6c84SAndroid Build Coastguard Worker "yes\nyes\n" "" "" 202*cf5a6c84SAndroid Build Coastguard Worker 203*cf5a6c84SAndroid Build Coastguard Worker# If not root can't preserve ownership, so don't try yet. 204*cf5a6c84SAndroid Build Coastguard Worker 205*cf5a6c84SAndroid Build Coastguard Workertesting "extract dir/file from tar" \ 206*cf5a6c84SAndroid Build Coastguard Worker "tar xvCf dd $FILES/tar/tar.tar && stat -c '%A %Y %n' dd/dir dd/dir/file" \ 207*cf5a6c84SAndroid Build Coastguard Worker "dir/\ndir/file\ndrwxr-x--- 1494637555 dd/dir\n-rw-r----- 1494637555 dd/dir/file\n" \ 208*cf5a6c84SAndroid Build Coastguard Worker "" "" 209*cf5a6c84SAndroid Build Coastguard Worker 210*cf5a6c84SAndroid Build Coastguard Workertesting "extract dir/file from tgz (autodetect)" \ 211*cf5a6c84SAndroid Build Coastguard Worker "tar xvCf dd $FILES/tar/tar.tgz && stat -c '%A %Y %n' dd/dir dd/dir/file" \ 212*cf5a6c84SAndroid Build Coastguard Worker "dir/\ndir/file\ndrwxr-x--- 1494637555 dd/dir\n-rw-r----- 1494637555 dd/dir/file\n" \ 213*cf5a6c84SAndroid Build Coastguard Worker "" "" 214*cf5a6c84SAndroid Build Coastguard Worker 215*cf5a6c84SAndroid Build Coastguard Workertoyonly testing "cat tgz | extract dir/file (autodetect)" \ 216*cf5a6c84SAndroid Build Coastguard Worker "cat $FILES/tar/tar.tgz | tar xvC dd && stat -c '%A %Y %n' dd/dir dd/dir/file" \ 217*cf5a6c84SAndroid Build Coastguard Worker "dir/\ndir/file\ndrwxr-x--- 1494637555 dd/dir\n-rw-r----- 1494637555 dd/dir/file\n" \ 218*cf5a6c84SAndroid Build Coastguard Worker "" "" 219*cf5a6c84SAndroid Build Coastguard Worker 220*cf5a6c84SAndroid Build Coastguard Workertesting "extract dir/file from tbz2 (autodetect)" \ 221*cf5a6c84SAndroid Build Coastguard Worker "tar xvCf dd $FILES/tar/tar.tbz2 && stat -c '%A %Y %n' dd/dir dd/dir/file" \ 222*cf5a6c84SAndroid Build Coastguard Worker "dir/\ndir/file\ndrwxr-x--- 1494637555 dd/dir\n-rw-r----- 1494637555 dd/dir/file\n" \ 223*cf5a6c84SAndroid Build Coastguard Worker "" "" 224*cf5a6c84SAndroid Build Coastguard Worker 225*cf5a6c84SAndroid Build Coastguard Workertoyonly testing "cat tbz | extract dir/file (autodetect)" \ 226*cf5a6c84SAndroid Build Coastguard Worker "cat $FILES/tar/tar.tbz2 | tar xvC dd && stat -c '%A %Y %n' dd/dir dd/dir/file" \ 227*cf5a6c84SAndroid Build Coastguard Worker "dir/\ndir/file\ndrwxr-x--- 1494637555 dd/dir\n-rw-r----- 1494637555 dd/dir/file\n" \ 228*cf5a6c84SAndroid Build Coastguard Worker "" "" 229*cf5a6c84SAndroid Build Coastguard Worker 230*cf5a6c84SAndroid Build Coastguard Workermkdir path && ln -s "$(which gzip)" "$(which tar)" path/ && [ -x path/gzip ] || 231*cf5a6c84SAndroid Build Coastguard Worker ((++SKIP)) 232*cf5a6c84SAndroid Build Coastguard Workertoyonly testing "autodetect falls back to gzip -d when no zcat" \ 233*cf5a6c84SAndroid Build Coastguard Worker "PATH=path; tar tf $FILES/tar/tar.tgz" "dir/\ndir/file\n" "" "" 234*cf5a6c84SAndroid Build Coastguard Workerrm -rf path 235*cf5a6c84SAndroid Build Coastguard Worker 236*cf5a6c84SAndroid Build Coastguard Worker# TODO: run sparse tests on tmpfs mount? (Request filesystem type?) 237*cf5a6c84SAndroid Build Coastguard Worker# Only run sparse tests if filesystem can handle sparse files @4k granularity 238*cf5a6c84SAndroid Build Coastguard Workerdd if=/dev/zero bs=4k count=1 seek=1 of=blah.img 2>/dev/null 239*cf5a6c84SAndroid Build Coastguard Worker[ $(du blah.img | sed 's/[ \t].*//') -ne 4 ] && SKIP=999 240*cf5a6c84SAndroid Build Coastguard Workerrm -f blah.img 241*cf5a6c84SAndroid Build Coastguard Worker[ "$(uname)" == "Darwin" ] && SKIP=999 242*cf5a6c84SAndroid Build Coastguard Worker 243*cf5a6c84SAndroid Build Coastguard Worker yes | head -n $((1<<18)) > bang 244*cf5a6c84SAndroid Build Coastguard Worker { 245*cf5a6c84SAndroid Build Coastguard Worker dd bs=$((1<<16)) count=1 status=none 246*cf5a6c84SAndroid Build Coastguard Worker dd bs=8192 seek=14 count=1 status=none 247*cf5a6c84SAndroid Build Coastguard Worker dd bs=4096 seek=64 count=5 status=none 248*cf5a6c84SAndroid Build Coastguard Worker } < bang > fweep 249*cf5a6c84SAndroid Build Coastguard Worker testing "sparse without overflow" "$TAR --sparse fweep | SUM 3" \ 250*cf5a6c84SAndroid Build Coastguard Worker "50dc56c3c7eed163f0f37c0cfc2562852a612ad0\n" "" "" 251*cf5a6c84SAndroid Build Coastguard Worker rm bang fweep 252*cf5a6c84SAndroid Build Coastguard Worker 253*cf5a6c84SAndroid Build Coastguard Worker for i in 1 3 5 7 9 14 27 36 128 256 300 304 254*cf5a6c84SAndroid Build Coastguard Worker do 255*cf5a6c84SAndroid Build Coastguard Worker dd if=/dev/zero of=fweep bs=65536 seek=$i count=1 2>/dev/null 256*cf5a6c84SAndroid Build Coastguard Worker done 257*cf5a6c84SAndroid Build Coastguard Worker testing "sparse single overflow" "$TAR --sparse fweep | SUM 6" \ 258*cf5a6c84SAndroid Build Coastguard Worker "81d59c3a7470201f92d60e63a43318ddde893f6d\n" "" "" 259*cf5a6c84SAndroid Build Coastguard Worker rm fweep 260*cf5a6c84SAndroid Build Coastguard Worker 261*cf5a6c84SAndroid Build Coastguard Worker for i in $(seq 8 3 200) 262*cf5a6c84SAndroid Build Coastguard Worker do 263*cf5a6c84SAndroid Build Coastguard Worker dd if=/dev/zero of=fweep bs=65536 seek=$i count=1 2>/dev/null 264*cf5a6c84SAndroid Build Coastguard Worker dd if=/dev/zero of=fweep2 bs=65536 seek=$i count=1 2>/dev/null 265*cf5a6c84SAndroid Build Coastguard Worker done 266*cf5a6c84SAndroid Build Coastguard Worker truncate -s 20m fweep2 267*cf5a6c84SAndroid Build Coastguard Worker testing "sparse double overflow" "$TAR --sparse fweep | SUM 7" \ 268*cf5a6c84SAndroid Build Coastguard Worker "024aacd955e45f89bafedb3f37c8d39b4d556471\n" "" "" 269*cf5a6c84SAndroid Build Coastguard Worker 270*cf5a6c84SAndroid Build Coastguard Worker tar c --sparse fweep > fweep.tar 271*cf5a6c84SAndroid Build Coastguard Worker rm fweep 272*cf5a6c84SAndroid Build Coastguard Worker testing "sparse extract" "tar xf fweep.tar && $TAR --sparse fweep | SUM 4" \ 273*cf5a6c84SAndroid Build Coastguard Worker "b949d3a3b4c6457c873f1ea9918fd9029c5ed4b3\n" "" "" 274*cf5a6c84SAndroid Build Coastguard Worker testing "sparse tvf" \ 275*cf5a6c84SAndroid Build Coastguard Worker "tar tvf fweep.tar | grep -wq 13172736 && echo right size" "right size\n" \ 276*cf5a6c84SAndroid Build Coastguard Worker "" "" 277*cf5a6c84SAndroid Build Coastguard Worker rm fweep fweep.tar 278*cf5a6c84SAndroid Build Coastguard Worker 279*cf5a6c84SAndroid Build Coastguard Worker tar c --sparse fweep2 > fweep2.tar 280*cf5a6c84SAndroid Build Coastguard Worker rm fweep2 281*cf5a6c84SAndroid Build Coastguard Worker testing "sparse extract hole at end" \ 282*cf5a6c84SAndroid Build Coastguard Worker "tar xf fweep2.tar && $TAR --sparse fweep2 | SUM 4" \ 283*cf5a6c84SAndroid Build Coastguard Worker "807664bcad0e827793318ff742991d6f006b2127\n" "" "" 284*cf5a6c84SAndroid Build Coastguard Worker rm fweep2 fweep2.tar 285*cf5a6c84SAndroid Build Coastguard Worker 286*cf5a6c84SAndroid Build Coastguard Worker testcmd 'extract obsolete sparse format' \ 287*cf5a6c84SAndroid Build Coastguard Worker 'xf "$FILES"/tar/oldsparse.tgz && sha1sum hello-sparse.c | head -c 12' \ 288*cf5a6c84SAndroid Build Coastguard Worker '9714dc7ac8c0' '' '' 289*cf5a6c84SAndroid Build Coastguard Worker rm -f hello-sparse.c 290*cf5a6c84SAndroid Build Coastguard Worker 291*cf5a6c84SAndroid Build Coastguard WorkerSKIP=0 # End of sparse tests 292*cf5a6c84SAndroid Build Coastguard Worker 293*cf5a6c84SAndroid Build Coastguard Workermkdir -p links 294*cf5a6c84SAndroid Build Coastguard Workertouch links/orig 295*cf5a6c84SAndroid Build Coastguard Workerln links/{orig,link1} 296*cf5a6c84SAndroid Build Coastguard Workerln links/{orig,link2} 297*cf5a6c84SAndroid Build Coastguard Workertestcmd 'links' '-cf test.tar links' '' '' '' 298*cf5a6c84SAndroid Build Coastguard Workerrm -rf links 299*cf5a6c84SAndroid Build Coastguard Worker 300*cf5a6c84SAndroid Build Coastguard Workermkdir links 301*cf5a6c84SAndroid Build Coastguard Workerfor i in {0..12}; do touch links/orig$i; ln links/{orig,link}$i; done 302*cf5a6c84SAndroid Build Coastguard Workertestcmd 'links2' '-cf test.tar links' '' '' '' 303*cf5a6c84SAndroid Build Coastguard Workerrm -rf links 304*cf5a6c84SAndroid Build Coastguard Worker 305*cf5a6c84SAndroid Build Coastguard Workerinstall -m 000 -d folder/skip/oof && 306*cf5a6c84SAndroid Build Coastguard Workertestcmd 'exclude' '--exclude skip -cvf tar.tar folder && echo yes' \ 307*cf5a6c84SAndroid Build Coastguard Worker 'folder/\nyes\n' '' '' 308*cf5a6c84SAndroid Build Coastguard Workerrm -rf folder tar.tar 309*cf5a6c84SAndroid Build Coastguard Worker 310*cf5a6c84SAndroid Build Coastguard Workermkdir -p one/two; echo hello > one/two/three; tar czf test.tar one/two/three 311*cf5a6c84SAndroid Build Coastguard Workerrm one/two/three; mkdir one/two/three 312*cf5a6c84SAndroid Build Coastguard Workertestcmd 'replace dir with file' '-xf test.tar && cat one/two/three' \ 313*cf5a6c84SAndroid Build Coastguard Worker 'hello\n' '' '' 314*cf5a6c84SAndroid Build Coastguard Workerrm -rf one test.tar 315*cf5a6c84SAndroid Build Coastguard Worker 316*cf5a6c84SAndroid Build Coastguard Workermkdir ..dotsdir 317*cf5a6c84SAndroid Build Coastguard Workertesting "create ..dotsdir" "$TAR ..dotsdir | SUM 3" \ 318*cf5a6c84SAndroid Build Coastguard Worker "62ff23c9b427020331992b9bc71f082099c1411f\n" "" "" 319*cf5a6c84SAndroid Build Coastguard Worker 320*cf5a6c84SAndroid Build Coastguard Workertesting "pass ..dotsdir" "$TAR ..dotsdir | LST" \ 321*cf5a6c84SAndroid Build Coastguard Worker "drwxrwxr-x root/sys 0 2009-02-13 23:31 ..dotsdir/\n" "" "" 322*cf5a6c84SAndroid Build Coastguard Workerrmdir ..dotsdir 323*cf5a6c84SAndroid Build Coastguard Worker 324*cf5a6c84SAndroid Build Coastguard Workermkdir -p one/two/three/four/five 325*cf5a6c84SAndroid Build Coastguard Workertouch one/two/three/four/five/six 326*cf5a6c84SAndroid Build Coastguard Workertesting "--strip" "$TAR one | tar t --strip=2 --show-transformed | grep six" \ 327*cf5a6c84SAndroid Build Coastguard Worker "three/four/five/six\n" "" "" 328*cf5a6c84SAndroid Build Coastguard Worker 329*cf5a6c84SAndroid Build Coastguard Worker# toybox tar --xform depends on toybox sed 330*cf5a6c84SAndroid Build Coastguard Worker[ -z "$TEST_HOST" ] && ! sed --tarxform '' </dev/null 2>/dev/null && SKIP=99 331*cf5a6c84SAndroid Build Coastguard Worker 332*cf5a6c84SAndroid Build Coastguard Workermkdir uno 333*cf5a6c84SAndroid Build Coastguard Workerln -s tres uno/dos 334*cf5a6c84SAndroid Build Coastguard Workertouch uno/tres 335*cf5a6c84SAndroid Build Coastguard Workerln uno/tres uno/quatro 336*cf5a6c84SAndroid Build Coastguard WorkerLL() { LST --show-transformed-names $XX | sed 's/^.* 23:31 //'; } 337*cf5a6c84SAndroid Build Coastguard WorkerTT() { $TAR --no-recursion uno uno/{dos,tres,quatro} "$@" | LL; } 338*cf5a6c84SAndroid Build Coastguard Workertesting 'xform S' \ 339*cf5a6c84SAndroid Build Coastguard Worker "TT --xform 's/uno/one/S;s/dos/two/S;s/tres/three/S;s/quatro/four/S'" \ 340*cf5a6c84SAndroid Build Coastguard Worker "one/\none/two -> tres\none/three\none/four link to one/three\n" "" "" 341*cf5a6c84SAndroid Build Coastguard Worker 342*cf5a6c84SAndroid Build Coastguard Workertesting 'xform flags=rh starts with all disabled' \ 343*cf5a6c84SAndroid Build Coastguard Worker "TT --xform 's/uno/one/;flags=rh;s/dos/two/;s/tres/three/;s/quatro/four/'" \ 344*cf5a6c84SAndroid Build Coastguard Worker "one/\none/two -> tres\none/three\none/four link to one/three\n" "" "" 345*cf5a6c84SAndroid Build Coastguard Worker 346*cf5a6c84SAndroid Build Coastguard Workertesting 'xform flags=rHhsS toggles' \ 347*cf5a6c84SAndroid Build Coastguard Worker "TT --xform 's/uno/one/;flags=rHhsS;s/dos/two/;s/tres/three/;s/quatro/four/'"\ 348*cf5a6c84SAndroid Build Coastguard Worker "one/\none/two -> tres\none/three\none/four link to one/three\n" "" "" 349*cf5a6c84SAndroid Build Coastguard Worker 350*cf5a6c84SAndroid Build Coastguard Workertesting 'xform flags= is not a delta from previous' \ 351*cf5a6c84SAndroid Build Coastguard Worker "TT --xform 'flags=s;flags=rh;s/uno/one/;s/dos/two/;s/tres/three/;s/quatro/four/'" \ 352*cf5a6c84SAndroid Build Coastguard Worker "one/\none/two -> tres\none/three\none/four link to one/three\n" "" "" 353*cf5a6c84SAndroid Build Coastguard Worker 354*cf5a6c84SAndroid Build Coastguard Workertesting 'xform H' \ 355*cf5a6c84SAndroid Build Coastguard Worker "TT --xform 'flags=rsH;s/uno/one/;s/dos/two/;s/tres/three/;s/quatro/four/'" \ 356*cf5a6c84SAndroid Build Coastguard Worker "one/\none/two -> three\none/three\none/four link to uno/tres\n" "" "" 357*cf5a6c84SAndroid Build Coastguard Worker 358*cf5a6c84SAndroid Build Coastguard Workertesting 'xform R' \ 359*cf5a6c84SAndroid Build Coastguard Worker "TT --xform 'flags=rshR;s/uno/one/;s/dos/two/;s/tres/three/;s/quatro/four/'" \ 360*cf5a6c84SAndroid Build Coastguard Worker "uno/\nuno/dos -> three\nuno/tres\nuno/quatro link to one/three\n" "" "" 361*cf5a6c84SAndroid Build Coastguard Worker 362*cf5a6c84SAndroid Build Coastguard Workertesting "xform path" "$TAR one --xform=s@three/four/@zero@ | tar t | grep six" \ 363*cf5a6c84SAndroid Build Coastguard Worker "one/two/zerofive/six\n" "" "" 364*cf5a6c84SAndroid Build Coastguard Worker 365*cf5a6c84SAndroid Build Coastguard Workertesting "xform trailing slash special case" \ 366*cf5a6c84SAndroid Build Coastguard Worker "$TAR --xform 's#^.+/##x' one/two/three/four/five | tar t" 'five/\nsix\n' '' '' 367*cf5a6c84SAndroid Build Coastguard Worker 368*cf5a6c84SAndroid Build Coastguard Worker# The quoting works because default IFS splits on whitepace not ; 369*cf5a6c84SAndroid Build Coastguard Workertesting "xform extract all" \ 370*cf5a6c84SAndroid Build Coastguard Worker "XX='--xform s/uno/one/;s/dos/two/;s/tres/three/;s/quatro/four/' TT" \ 371*cf5a6c84SAndroid Build Coastguard Worker 'one/\none/two -> three\none/three\none/four link to one/three\n' '' '' 372*cf5a6c84SAndroid Build Coastguard Worker 373*cf5a6c84SAndroid Build Coastguard Workertesting 'xform extract S' \ 374*cf5a6c84SAndroid Build Coastguard Worker "XX='--xform s/uno/one/S;s/dos/two/S;s/tres/three/S;s/quatro/four/S' TT" \ 375*cf5a6c84SAndroid Build Coastguard Worker "one/\none/two -> tres\none/three\none/four link to one/three\n" "" "" 376*cf5a6c84SAndroid Build Coastguard Worker 377*cf5a6c84SAndroid Build Coastguard Workertesting 'xform extract H' \ 378*cf5a6c84SAndroid Build Coastguard Worker "XX='--xform flags=rs;s/uno/one/;s/dos/two/;s/tres/three/;s/quatro/four/' TT"\ 379*cf5a6c84SAndroid Build Coastguard Worker "one/\none/two -> three\none/three\none/four link to uno/tres\n" "" "" 380*cf5a6c84SAndroid Build Coastguard Worker 381*cf5a6c84SAndroid Build Coastguard Workertesting 'xform extract R' \ 382*cf5a6c84SAndroid Build Coastguard Worker "XX='--xform flags=sh;s/uno/one/;s/dos/two/;s/tres/three/;s/quatro/four/' TT"\ 383*cf5a6c84SAndroid Build Coastguard Worker "uno/\nuno/dos -> three\nuno/tres\nuno/quatro link to one/three\n" "" "" 384*cf5a6c84SAndroid Build Coastguard Worker 385*cf5a6c84SAndroid Build Coastguard Workerrm -rf uno 386*cf5a6c84SAndroid Build Coastguard WorkerSKIP=0 387*cf5a6c84SAndroid Build Coastguard Workerrm -rf one 388*cf5a6c84SAndroid Build Coastguard Worker 389*cf5a6c84SAndroid Build Coastguard Workertesting '-P' "$TAR -P --no-recursion -C / /// .. | SUM 3" \ 390*cf5a6c84SAndroid Build Coastguard Worker "a3e94211582da121845d823374d8f41ead62d7bd\n" "" "" 391*cf5a6c84SAndroid Build Coastguard Worker 392*cf5a6c84SAndroid Build Coastguard Workertesting 'without -P' "$TAR --no-recursion -C / /// .. 2>/dev/null | SUM 3" \ 393*cf5a6c84SAndroid Build Coastguard Worker "077d03243e247b074806904885e6da272fd5857a\n" "" "" 394*cf5a6c84SAndroid Build Coastguard Worker 395*cf5a6c84SAndroid Build Coastguard Worker# Wildcards: --exclude, include (create/extract * cmdline/recursive) 396*cf5a6c84SAndroid Build Coastguard Worker# --anchored, --wildcards, --wildcards-match-slash 397*cf5a6c84SAndroid Build Coastguard Worker# --no-* versions of each. Span coverage, switching on/off... 398*cf5a6c84SAndroid Build Coastguard Worker 399*cf5a6c84SAndroid Build Coastguard Worker#pattern a.c 400*cf5a6c84SAndroid Build Coastguard Worker# abcd dabc a/c da/c 401*cf5a6c84SAndroid Build Coastguard Worker# top/* 402*cf5a6c84SAndroid Build Coastguard Worker 403*cf5a6c84SAndroid Build Coastguard Workermkdir sub && cd sub && mkdir -p a da top/a top/da && 404*cf5a6c84SAndroid Build Coastguard Workertouch abcd dabc a/c da/c top/abcd top/dabc top/a/c top/da/c && 405*cf5a6c84SAndroid Build Coastguard Worker$TAR -f ../sub.tar abcd dabc a da top && cd .. || exit 1 406*cf5a6c84SAndroid Build Coastguard Worker 407*cf5a6c84SAndroid Build Coastguard Worker# TODO I have not made wildcard state changes positional. 408*cf5a6c84SAndroid Build Coastguard Worker 409*cf5a6c84SAndroid Build Coastguard Workertesting 'wildcards do not affect creation cmdline args' \ 410*cf5a6c84SAndroid Build Coastguard Worker '$TAR -C sub --wildcards a.cd abcd dabc a da top 2>/dev/null | cmp - sub.tar' \ 411*cf5a6c84SAndroid Build Coastguard Worker '' '' '' 412*cf5a6c84SAndroid Build Coastguard Worker 413*cf5a6c84SAndroid Build Coastguard Workertesting 'creation --exclude --no-wildcards'\ 414*cf5a6c84SAndroid Build Coastguard Worker '$TAR -C sub --no-wildcards --exclude=d?bc abcd dabc | LL' \ 415*cf5a6c84SAndroid Build Coastguard Worker 'abcd\ndabc\n' '' '' 416*cf5a6c84SAndroid Build Coastguard Worker 417*cf5a6c84SAndroid Build Coastguard Worker 418*cf5a6c84SAndroid Build Coastguard Workertesting 'creation --wildcards --exclude'\ 419*cf5a6c84SAndroid Build Coastguard Worker '$TAR -C sub --wildcards --exclude=d?bc abcd dabc | LL' \ 420*cf5a6c84SAndroid Build Coastguard Worker 'abcd\n' '' '' 421*cf5a6c84SAndroid Build Coastguard Worker 422*cf5a6c84SAndroid Build Coastguard Worker# TODO: do we need to set DIRTREE_BREADTH at top level? Come up with test if so. 423*cf5a6c84SAndroid Build Coastguard Workermkdir sub2 424*cf5a6c84SAndroid Build Coastguard Workertouch sub2/{ephebe,klatch,djelibeybi} 425*cf5a6c84SAndroid Build Coastguard Workertesting 'tsort' '$TAR -c sub2 --sort=name | tar t' \ 426*cf5a6c84SAndroid Build Coastguard Worker 'sub2/\nsub2/djelibeybi\nsub2/ephebe\nsub2/klatch\n' '' '' 427*cf5a6c84SAndroid Build Coastguard Worker 428*cf5a6c84SAndroid Build Coastguard Workertouch file 429*cf5a6c84SAndroid Build Coastguard Workertesting './file bug' 'tar c ./file > tar.tar && tar t ./file < tar.tar' \ 430*cf5a6c84SAndroid Build Coastguard Worker './file\n' '' '' 431*cf5a6c84SAndroid Build Coastguard Worker 432*cf5a6c84SAndroid Build Coastguard Workerskipnot [ $(id -u) -ne 0 ] # Root defaults to -p 433*cf5a6c84SAndroid Build Coastguard Workertesting 'honor umask' \ 434*cf5a6c84SAndroid Build Coastguard Worker 'umask 0022 && rm -rf dir && mkdir dir && tar xf $FILES/tar/dir.tar && stat -c%A dir dir/file' \ 435*cf5a6c84SAndroid Build Coastguard Worker 'drwxr-xr-x\n-rwxr-xr-x\n' '' '' 436*cf5a6c84SAndroid Build Coastguard Workertesting 'extract changes directory permissions' \ 437*cf5a6c84SAndroid Build Coastguard Worker 'umask 0022 && rm -rf dir && mkdir dir && umask 0 && tar xf $FILES/tar/dir.tar && stat -c%A dir dir/file' \ 438*cf5a6c84SAndroid Build Coastguard Worker 'drwxrwxrwx\n-rwxrwxrwx\n' '' '' 439*cf5a6c84SAndroid Build Coastguard Workertesting '-p overrides umask' \ 440*cf5a6c84SAndroid Build Coastguard Worker 'umask 0022 && rm -rf dir && mkdir dir && tar xpf $FILES/tar/dir.tar && stat -c%A dir dir/file' \ 441*cf5a6c84SAndroid Build Coastguard Worker 'drwxrwxrwx\n-rwxrwxrwx\n' '' '' 442*cf5a6c84SAndroid Build Coastguard Worker 443*cf5a6c84SAndroid Build Coastguard Workerif false 444*cf5a6c84SAndroid Build Coastguard Workerthen 445*cf5a6c84SAndroid Build Coastguard Worker# Sequencing issues that leak implementation details out the interface 446*cf5a6c84SAndroid Build Coastguard Workertesting "what order are --xform, --strip, and --exclude processed in?" 447*cf5a6c84SAndroid Build Coastguard Workertesting "--xform vs ../ removal and adding / to dirs" 448*cf5a6c84SAndroid Build Coastguard Worker 449*cf5a6c84SAndroid Build Coastguard Workerchmod 700 dir 450*cf5a6c84SAndroid Build Coastguard Workertar cpf tar.tgz dir/file 451*cf5a6c84SAndroid Build Coastguard Worker#chmod 700 dir 452*cf5a6c84SAndroid Build Coastguard Worker#tar xpf file 453*cf5a6c84SAndroid Build Coastguard Worker#ls -ld dir/file 454*cf5a6c84SAndroid Build Coastguard Worker 455*cf5a6c84SAndroid Build Coastguard Worker# restore ownership of file, dir, and symlink 456*cf5a6c84SAndroid Build Coastguard Worker 457*cf5a6c84SAndroid Build Coastguard Worker# merge add_to_tar and write_longname, 458*cf5a6c84SAndroid Build Coastguard Worker# filter, incl or excl and anchored/wildcards 459*cf5a6c84SAndroid Build Coastguard Worker 460*cf5a6c84SAndroid Build Coastguard Worker# extract file not under cwd 461*cf5a6c84SAndroid Build Coastguard Worker# exclusion defaults to --no-anchored and --wildcards-match-slash 462*cf5a6c84SAndroid Build Coastguard Worker# both incl and excl 463*cf5a6c84SAndroid Build Coastguard Worker 464*cf5a6c84SAndroid Build Coastguard Worker# catch symlink overwrite 465*cf5a6c84SAndroid Build Coastguard Worker# add dir with no trailing slash 466*cf5a6c84SAndroid Build Coastguard Worker# don't allow hardlink target outside cwd 467*cf5a6c84SAndroid Build Coastguard Worker# extract dir/file without dir in tarball 468*cf5a6c84SAndroid Build Coastguard Worker# create with and without each flag 469*cf5a6c84SAndroid Build Coastguard Worker# --owner --group --numeric-owner 470*cf5a6c84SAndroid Build Coastguard Worker# extract with and without each flag 471*cf5a6c84SAndroid Build Coastguard Worker# --owner 0 --group 0 472*cf5a6c84SAndroid Build Coastguard Worker# set symlink owner 473*cf5a6c84SAndroid Build Coastguard Worker# >256 hardlink inodes 474*cf5a6c84SAndroid Build Coastguard Worker# // remove leading / and any .. entries from saved name 475*cf5a6c84SAndroid Build Coastguard Worker# // exclusion defaults to --no-anchored and --wildcards-match-slash 476*cf5a6c84SAndroid Build Coastguard Worker# //bork blah../thing blah/../thing blah/../and/../that blah/.. ../blah 477*cf5a6c84SAndroid Build Coastguard Worker# tar tv --owner --group --mtime 478*cf5a6c84SAndroid Build Coastguard Worker# extract file within dir date correct 479*cf5a6c84SAndroid Build Coastguard Worker# name ending in /.. or just ".." as a name 480*cf5a6c84SAndroid Build Coastguard Worker 481*cf5a6c84SAndroid Build Coastguard Worker 482*cf5a6c84SAndroid Build Coastguard Workerfi 483*cf5a6c84SAndroid Build Coastguard Worker 484*cf5a6c84SAndroid Build Coastguard Workerrm -f save.dat 485