From ae0730a98f7269a7bf7adb6047aa421939b290b7 Mon Sep 17 00:00:00 2001 From: rpm-build Date: Mon, 28 Jul 2014 08:12:14 +0200 Subject: [PATCH] wildcard defaults (downstram; compatibility) Change inclusion defaults of tar to "wildcards --anchored --wildcards-match-slash" for compatibility reasons. Resolves: #206841 --- doc/tar.texi | 5 ++++- src/names.c | 15 +++++---------- tests/exclude01.at | 1 + 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/doc/tar.texi b/doc/tar.texi index a8969e0..0185157 100644 --- a/doc/tar.texi +++ b/doc/tar.texi @@ -8439,7 +8439,7 @@ The following table summarizes pattern-matching default values: @multitable @columnfractions .3 .7 @headitem Members @tab Default settings -@item Inclusion @tab @option{--no-wildcards --anchored --no-wildcards-match-slash} +@item Inclusion @tab @option{--wildcards --anchored --wildcards-match-slash} @item Exclusion @tab @option{--wildcards --no-anchored --wildcards-match-slash} @end multitable @@ -12915,6 +12915,9 @@ version of this document is available at @table @asis @item Use of globbing patterns when listing and extracting. +Note: Following is true for original unpatched GNU tar. +For compatibility reasons, the old behavior was preserved. + Previous versions of GNU tar assumed shell-style globbing when extracting from or listing an archive. For example: diff --git a/src/names.c b/src/names.c index 037b869..d96ad71 100644 --- a/src/names.c +++ b/src/names.c @@ -137,7 +137,7 @@ static struct argp_option names_options[] = { {"no-ignore-case", NO_IGNORE_CASE_OPTION, 0, 0, N_("case sensitive matching (default)"), GRID+1 }, {"wildcards", WILDCARDS_OPTION, 0, 0, - N_("use wildcards (default for exclusion)"), GRID+1 }, + N_("use wildcards (default)"), GRID+1 }, {"no-wildcards", NO_WILDCARDS_OPTION, 0, 0, N_("verbatim string matching"), GRID+1 }, {"wildcards-match-slash", WILDCARDS_MATCH_SLASH_OPTION, 0, 0, @@ -195,8 +195,7 @@ names_parse_opt (int key, char *arg, struct argp_state *state) /* Wildcard matching settings */ enum wildcards { - default_wildcards, /* For exclusion == enable_wildcards, - for inclusion == disable_wildcards */ + default_wildcards, /* enable_wildcards */ disable_wildcards, enable_wildcards }; @@ -214,7 +213,7 @@ static int include_anchored = EXCLUDE_ANCHORED; | recursion_option) #define INCLUDE_OPTIONS \ - (((wildcards == enable_wildcards) ? EXCLUDE_WILDCARDS : 0) \ + (((wildcards != disable_wildcards) ? EXCLUDE_WILDCARDS : 0) \ | include_anchored \ | matching_flags \ | recursion_option) @@ -1234,8 +1233,7 @@ regex_usage_warning (const char *name) /* Warn about implicit use of the wildcards in command line arguments. (Default for tar prior to 1.15.91, but changed afterwards) */ - if (wildcards == default_wildcards - && fnmatch_pattern_has_wildcards (name, 0)) + if (0 && fnmatch_pattern_has_wildcards (name, 0)) { warned_once = 1; WARN ((0, 0, @@ -1618,10 +1616,7 @@ collect_and_sort_names (void) if (name->found_count || name->directory) continue; - if (name->matching_flags & EXCLUDE_WILDCARDS) - /* NOTE: EXCLUDE_ANCHORED is not relevant here */ - /* FIXME: just skip regexps for now */ - continue; + chdir_do (name->change_dir); if (name->name[0] == 0) diff --git a/tests/exclude01.at b/tests/exclude01.at index c3cd10b..c590047 100644 --- a/tests/exclude01.at +++ b/tests/exclude01.at @@ -61,6 +61,7 @@ testdir/dir2/file2 testdir/dir3/ NEXT testdir/dir1/* +testdir/dir1/file1 NEXT testdir/dir1/* NEXT -- 2.5.5