On Friday 19 of June 2015 15:53:52 Pavel Raiskup wrote: > On Friday 19 of June 2015 15:20:04 Jan Engelhardt wrote: > > On Friday 2015-06-19 14:29, Pavel Raiskup wrote: > > >> > > >> >> The patch fix the first issue I reported, but not the second. > > >> > > >> This patch, which was recently backported to openSUSE's tar-1.28[1] > > >> > > >> [1] > > >> https://build.opensuse.org/package/view_file/Base:System/tar/tar-recursive--files-from.patch?expand=1 > > >> > > >> breaks creation of tar archives when --no-recursive appears after -T: > > >> https://bugzilla.opensuse.org/show_bug.cgi?id=918487 > > > > > >I'm not sure whether this was discussed off-list somehow, but I would call > > >the *new* behavior as expected. There is inconsistency in behavior - yes, > > >but does not seem to be regression, rather a new feature..? > > > > It feels very much like a regression, because the behavior changed > > in such a way that it changed the outcome of scripts making use of > > that option. > > > > By default, people will assume that options are position-independent, > > that specifying no-argument options multiple times is idempotent > > unless otherwise specified, and that specifying with-argument options > > have a last-win strategy unless otherwise specified. > > > > TTBOMK, only --verbose is spelled out to change behavior if present > > multiple times, but there is no word on multiple-presence of > > position-dependence of --(no-)recursion in tar.info. > > Hmm, actually, I looked at the documentation and it's been documented > since 2003 [1], however I failed to find any working tar release (tried > v1.16.1 and up). Fix came with thread [3]. > > [1] http://git.savannah.gnu.org/cgit/tar.git/commit/?id=01d81c7f0fc87 > [2] http://www.gnu.org/software/tar/manual/html_section/tar_54.html#recurse > [3] https://lists.gnu.org/archive/html/bug-tar/2014-01/msg00020.html
I'm attaching patch with new tests for '-T' and '--recursion'. Could we install that? There is still one expected failure: If --recursion is set from within -T file argument, it is processed too late. To fix that we would need to implement something like NELT_RECURSION probably to make --recursion fully flexible. Pavel
>From 6c0790287820ba71c801d5ef87999aa7072a4020 Mon Sep 17 00:00:00 2001 From: Pavel Raiskup <[email protected]> Date: Thu, 25 Jun 2015 09:49:38 +0200 Subject: [PATCH] tests: better test --{,no-}recursion options This is follow-up commit for f24b30ec8c. * tests/recurs02.at: Also test --list mode. * tests/T-recurse.at: New test case. Test that -T option works correctly together with --{,no-}recursion. * tests/Makefile.am: Mention new test T-recurse.at. * tests/testsuite.at: Likewise. --- tests/Makefile.am | 1 + tests/T-recurse.at | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/recurs02.at | 7 ++++ tests/testsuite.at | 1 + 4 files changed, 105 insertions(+) create mode 100644 tests/T-recurse.at diff --git a/tests/Makefile.am b/tests/Makefile.am index f5b6437..9859e2e 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -48,6 +48,7 @@ TESTSUITE_AT = \ T-empty.at\ T-null.at\ T-rec.at\ + T-recurse.at\ T-zfile.at\ T-nonl.at\ T-mult.at\ diff --git a/tests/T-recurse.at b/tests/T-recurse.at new file mode 100644 index 0000000..7d5efe8 --- /dev/null +++ b/tests/T-recurse.at @@ -0,0 +1,96 @@ +# Process this file with autom4te to create testsuite. -*- Autotest -*- + +# Test suite for GNU tar. +# Copyright 2015 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 <http://www.gnu.org/licenses/>. + +# Description: Test interaction of --recursion and --no-recursion options +# together with --files-from option. This is complementary to recurs02.at test +# case. References: +# <[email protected]> +# http://lists.gnu.org/archive/html/bug-tar/2015-06/msg00006.html + +AT_SETUP([files-from & recurse: toggle]) +AT_KEYWORDS([recurse T-recurse files-from]) + +AT_TAR_CHECK([ +mkdir directory1 directory2 +touch directory1/file directory2/file + +AT_DATA([F1],[--no-recursion +directory1/ +--recursion +directory2/ +]) + +AT_DATA([F2A],[directory1/ +]) + +AT_DATA([F2B],[directory2/ +]) + +a=archive +tar cf "$a" --files-from F1 +tar tf "$a" + +a=archive2 +tar cf "$a" --no-recursion -T F2A --recursion -T F2B +tar tf "$a" +], +[0], +[directory1/ +directory2/ +directory2/file +directory1/ +directory2/ +directory2/file +]) + +AT_CLEANUP + +# Tar is not yet ready to properly handle --{,no-}recursion options if those are +# set both as program arguments and from within --files-from file. The problem +# is that content of -T argument is parsed too late; solution to this would +# require additional NELT_* type implemented to allow handling of --recursion +# option similarly to how the -C option is processed now. + +AT_SETUP([toggle --recursion (not) from -T]) +AT_KEYWORDS([recurse T-recurse T-recurse2 files-from]) + +AT_TAR_CHECK([ +mkdir directory1 directory2 +touch directory1/file directory2/file + +AT_DATA([F1],[--no-recursion +directory1/ +]) + +AT_DATA([F2],[directory2/ +]) + +tar cf archive -T F1 --recursion -T F2 +tar tf archive + +AT_XFAIL_IF([true]) +], +[0], +[directory1/ +directory2/ +directory2/file +]) + +AT_CLEANUP diff --git a/tests/recurs02.at b/tests/recurs02.at index 93aa2c1..00e1d66 100644 --- a/tests/recurs02.at +++ b/tests/recurs02.at @@ -37,11 +37,18 @@ tar --create --file archive \ --no-recursion directory1 \ --recursion directory2 || exit 1 tar tf archive +tar cf archive directory1 directory2 +tar tf archive \ + --no-recursion directory1 \ + --recursion directory2 || exit 1 ], [0], [directory1/ directory2/ directory2/file +directory1/ +directory2/ +directory2/file ]) AT_CLEANUP diff --git a/tests/testsuite.at b/tests/testsuite.at index f64615a..36b4b6d 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -200,6 +200,7 @@ AT_BANNER([The -T option]) m4_include([T-mult.at]) m4_include([T-nest.at]) m4_include([T-rec.at]) +m4_include([T-recurse.at]) m4_include([T-cd.at]) m4_include([T-empty.at]) m4_include([T-null.at]) -- 2.1.0
