Fri, 19 Oct 2007 22:46:20 -0400
[svn] Change all the license notices from GPLv2 to GPLv3.
Instead of checking the archive contents, figuring out what to do, and
doing it, instead we now always extract the archive to a private directory,
and then shuffle around the contents appropriately. I expected this to be
a bigger win than my benchmarks have borne out, but I'm sticking with this
strategy because it provides a cleaner separation of responsibilities
between the extractors and the archive type handlers, and also I have to
believe it's a much better way to handle bigger archives -- since we're now
reading it once and not twice.
- name: basic .tar filenames: test-1.23.tar baseline: | tar -xf $1 - name: basic .tar.gz filenames: test-1.23.tar.gz baseline: | tar -zxf $1 - name: basic .tar.bz2 filenames: test-1.23.tar.bz2 baseline: | mkdir test-1.23 cd test-1.23 tar -jxf ../$1 - name: basic .zip filenames: test-1.23.zip baseline: | mkdir test-1.23 cd test-1.23 unzip -q ../$1 - name: basic .deb filenames: test-1.23_all.deb baseline: | TD=$PWD mkdir test-1.23 cd /tmp ar x $TD/$1 data.tar.gz cd $TD/test-1.23 tar -zxf /tmp/data.tar.gz rm /tmp/data.tar.gz - name: recursion and permissions filenames: test-recursive-badperms.tar.bz2 options: -n -r baseline: | mkdir test-recursive-badperms cd test-recursive-badperms tar -jxf ../$1 mkdir test-badperms cd test-badperms tar -xf ../test-badperms.tar chmod 700 testdir posttest: | if [ "x`cat test-recursive-badperms/test-badperms/testdir/testfile`" = \ "xhey" ]; then exit 0; else exit 1; fi - name: decompressing gz directory: inside-dir filenames: ../test-text.gz baseline: | zcat $1 >test-text posttest: | if [ "x`cat test-text`" != "xhi" ]; then exit 1; fi - name: decompressing bz2 directory: inside-dir filenames: ../test-text.bz2 baseline: | bzcat $1 >test-text posttest: | if [ "x`cat test-text`" != "xhi" ]; then exit 1; fi - name: decompression with -r directory: inside-dir filenames: ../test-text.gz options: -n -r baseline: | zcat $1 >test-text - name: decompression with -fr directory: inside-dir filenames: ../test-text.gz options: -n -fr baseline: | zcat $1 >test-text - name: overwrite protection filenames: test-1.23.tar.bz2 baseline: | mkdir test-1.23 test-1.23.1 cd test-1.23.1 tar -jxf ../$1 prerun: | mkdir test-1.23 - name: overwrite option filenames: test-1.23.tar.bz2 options: -n -o baseline: | mkdir test-1.23 cd test-1.23 tar -jxf ../$1 prerun: | mkdir test-1.23 - name: flat option directory: inside-dir filenames: ../test-1.23.tar.bz2 options: -n -f baseline: | tar -jxf $1 - name: flat recursion and permissions directory: inside-dir filenames: ../test-recursive-badperms.tar.bz2 options: -n -fr baseline: | tar -jxf $1 tar -xf test-badperms.tar chmod 700 testdir posttest: | if [ "x`cat testdir/testfile`" != "xhey" ]; then exit 1; fi - name: no files error: true grep: "[Uu]sage" - name: bad file error: true filenames: nonexistent-file.tar - name: not an archive error: true filenames: tests.yml - name: bad options options: -n --nonexistent-option filenames: test-1.23.tar error: true - name: --version options: -n --version grep: ersion \d+\.\d+ filenames: test-1.23.tar baseline: | exit 0 - name: one good archive of many filenames: tests.yml test-1.23.tar nonexistent-file.tar error: true baseline: | tar -xf $2 - name: silence filenames: tests.yml options: -n -qq error: true antigrep: . - name: can't write to directory directory: inside-dir filenames: ../test-1.23.tar error: true grep: ERROR antigrep: Traceback prerun: | chmod 500 . - name: list contents of one file options: -n -l filenames: test-1.23.tar output: | test-1.23/ test-1.23/1/ test-1.23/1/2/ test-1.23/1/2/3 test-1.23/a/ test-1.23/a/b test-1.23/foobar - name: list contents of multiple files options: -n --table filenames: test-1.23_all.deb test-1.23.zip output: | test-1.23_all.deb: 1/ 1/2/ 1/2/3 a/ a/b foobar test-1.23.zip: 1/2/3 a/b foobar - name: list contents of compressed file options: -n -t filenames: test-text.gz output: test-text - name: default behavior with one directory (gz) options: -n filenames: test-onedir.tar.gz baseline: | mkdir test-onedir cd test-onedir tar -zxf ../$1 - name: one directory extracted inside another (gz) options: "" filenames: test-onedir.tar.gz input: i baseline: | mkdir test-onedir cd test-onedir tar -zxf ../$1 - name: one directory extracted with rename (gz) options: "" filenames: test-onedir.tar.gz input: r baseline: | tar -zxf $1 mv test test-onedir - name: one directory extracted here (gz) options: "" filenames: test-onedir.tar.gz input: h baseline: | tar -zxf $1 - name: default behavior with one directory (bz2) options: -n filenames: test-onedir.tar.gz baseline: | mkdir test-onedir cd test-onedir tar -zxf ../$1 - name: one directory extracted inside another (bz2) options: "" filenames: test-onedir.tar.gz input: i baseline: | mkdir test-onedir cd test-onedir tar -zxf ../$1 - name: one directory extracted with rename (bz2) options: "" filenames: test-onedir.tar.gz input: r baseline: | tar -zxf $1 mv test test-onedir - name: one directory extracted here (bz2) options: "" filenames: test-onedir.tar.gz input: h baseline: | tar -zxf $1 - name: bomb with preceding dot in the table filenames: test-dot-first-bomb.tar.gz options: "" antigrep: one entry baseline: | mkdir test-dot-first-bomb cd test-dot-first-bomb tar -zxf ../$1 - name: one directory preceded by dot in the table filenames: test-dot-first-onedir.tar.gz options: "" grep: "one entry: (./)?dir/" input: h baseline: | tar -zxf $1 - name: two one-item archives with different answers filenames: test-onedir.tar.gz test-onedir.tar.gz options: "" input: | h r baseline: | tar -zxf $1 mv test test-onedir tar -zxf $1 - name: interactive recursion (always) filenames: test-recursive-badperms.tar.bz2 test-recursive-badperms.tar.bz2 options: "" input: | i a i baseline: | extract() { mkdir test-recursive-badperms$2 cd test-recursive-badperms$2 tar -jxf ../$1 mkdir test-badperms cd test-badperms tar -xf ../test-badperms.tar chmod 700 testdir cd ../.. } extract $1 extract $1 .1 - name: interactive recursion (once) filenames: test-recursive-badperms.tar.bz2 test-recursive-badperms.tar.bz2 options: "" input: | i o i n baseline: | mkdir test-recursive-badperms cd test-recursive-badperms tar -jxf ../$1 mkdir test-badperms cd test-badperms tar -xf ../test-badperms.tar chmod 700 testdir cd ../.. mkdir test-recursive-badperms.1 cd test-recursive-badperms.1 tar -jxf ../$1 - name: interactive recursion (never) filenames: test-recursive-badperms.tar.bz2 test-recursive-badperms.tar.bz2 options: "" input: | i v i baseline: | extract() { mkdir test-recursive-badperms$2 cd test-recursive-badperms$2 tar -jxf ../$1 cd .. } extract $1 extract $1 .1