From 49b5cd11bc3d64b0316cfc5b7245d25e4f7f4fcd Mon Sep 17 00:00:00 2001 From: Pavel Raiskup Date: Thu, 19 Oct 2017 16:53:00 +0200 Subject: [PATCH] test keep-directory-symlink Upstream commit: From d06126f814563b01e598b85a8cc233604a2948f2 Mon Sep 17 00:00:00 2001 From: Pavel Raiskup Date: Tue, 28 Feb 2017 09:55:09 +0100 Subject: [PATCH] Test and document --keep-directory-symlink * doc/tar.1: Document the option. * tests/extrac20.at: New testcase. * tests/Makefile.am: Mention extrac20. * tests/testsuite.at: Likewise. --- tests/Makefile.am | 1 + tests/extrac20.at | 151 +++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/testsuite.at | 2 +- 3 files changed, 153 insertions(+), 1 deletion(-) create mode 100644 tests/extrac20.at diff --git a/tests/Makefile.am b/tests/Makefile.am index 094b71c..bd8d3e8 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -79,6 +79,7 @@ TESTSUITE_AT = \ extrac09.at\ extrac18.at\ extrac19.at\ + extrac20.at\ extrac10.at\ extrac11.at\ extrac12.at\ diff --git a/tests/extrac20.at b/tests/extrac20.at new file mode 100644 index 0000000..dd9b00d --- /dev/null +++ b/tests/extrac20.at @@ -0,0 +1,151 @@ +# Process this file with autom4te to create testsuite. -*- Autotest -*- +# +# Test suite for GNU tar. +# Copyright 2017 Free Software Foundation, Inc. + +# This file is part of GNU tar. + +# GNU tar is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. + +# GNU tar is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +AT_SETUP([keep-directory-symlink]) +AT_KEYWORDS([extrac20 extract old-files keep-old-files]) + +AT_TAR_CHECK([ +AT_SORT_PREREQ + +for i in a b c +do + dir=in$i + mkdir -p $dir/root/dir $dir/root/dirsymlink + touch $dir/root/dirsymlink/file$i + test $i != a && touch $dir/root/dirsymlink/file.conflict + tar cf archive$i.tar -C $dir root +done + +prep() +{ + echo "== $1 ==" + echo "== $1 ==" >&2 + backup_dir=$1 + dir=out + mkdir -p $dir/root/dir + ln -s dir $dir/root/dirsymlink + test $round = normal && cd $dir >/dev/null +} + +clean() +{ + test $round = normal && cd .. >/dev/null + find $dir | sort + mv $dir $backup_dir +} + +# Expand to '-f ../$1' or '-f $1 -C $dir' depending on $round variable +file_spec() +{ + if test $round = normal + then + echo "-f ../$1" + else + echo "-f $1 -C $dir" + fi +} + +for round in normal dir +do + # Check that 'dirsymlink' replaces 'dir' + prep without_option_$round + tar -x `file_spec archivea.tar` || exit 1 + tar -x `file_spec archiveb.tar` || exit 1 + clean + + # Keep directory symlink must keep root/dirsymlink + prep with_option_$round + tar -x --keep-directory-symlink `file_spec archivea.tar` || exit 1 + tar -x --keep-directory-symlink `file_spec archiveb.tar` || exit 1 + clean + + prep collision_$round + tar -x --keep-directory-symlink `file_spec archivea.tar` --keep-old-files || exit 1 + tar -x --keep-directory-symlink `file_spec archiveb.tar` --keep-old-files || exit 1 + tar -x --keep-directory-symlink `file_spec archivec.tar` --keep-old-files && exit 1 + clean +done +], +[0], +[== without_option_normal == +out +out/root +out/root/dir +out/root/dirsymlink +out/root/dirsymlink/file.conflict +out/root/dirsymlink/filea +out/root/dirsymlink/fileb +== with_option_normal == +out +out/root +out/root/dir +out/root/dir/file.conflict +out/root/dir/filea +out/root/dir/fileb +out/root/dirsymlink +== collision_normal == +out +out/root +out/root/dir +out/root/dir/file.conflict +out/root/dir/filea +out/root/dir/fileb +out/root/dir/filec +out/root/dirsymlink +== without_option_dir == +out +out/root +out/root/dir +out/root/dirsymlink +out/root/dirsymlink/file.conflict +out/root/dirsymlink/filea +out/root/dirsymlink/fileb +== with_option_dir == +out +out/root +out/root/dir +out/root/dir/file.conflict +out/root/dir/filea +out/root/dir/fileb +out/root/dirsymlink +== collision_dir == +out +out/root +out/root/dir +out/root/dir/file.conflict +out/root/dir/filea +out/root/dir/fileb +out/root/dir/filec +out/root/dirsymlink +], +[== without_option_normal == +== with_option_normal == +== collision_normal == +tar: root/dirsymlink/file.conflict: Cannot open: File exists +tar: Exiting with failure status due to previous errors +== without_option_dir == +== with_option_dir == +== collision_dir == +tar: root/dirsymlink/file.conflict: Cannot open: File exists +tar: Exiting with failure status due to previous errors +]) + +AT_CLEANUP + diff --git a/tests/testsuite.at b/tests/testsuite.at index f7f00ee..b540948 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -234,9 +234,9 @@ m4_include([extrac14.at]) m4_include([extrac15.at]) m4_include([extrac16.at]) m4_include([extrac17.at]) - m4_include([extrac18.at]) m4_include([extrac19.at]) +m4_include([extrac20.at]) m4_include([label01.at]) m4_include([label02.at]) -- 2.13.6