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

Reply via email to