]> Dogcows Code - chaz/tar/commitdiff
(ANCHORED_OPTION, IGNORE_CASE_OPTION, NO_ANCHORED_OPTION,
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 27 Aug 2001 14:41:56 +0000 (14:41 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 27 Aug 2001 14:41:56 +0000 (14:41 +0000)
NO_IGNORE_CASE_OPTION, NO_WILDCARDS_OPTION, NO_WILDCARDS_MATCH_SLASH_OPTION,
WILDCARDS_OPTION, WILDCARDS_MATCH_SLASH_OPTION): New enum values.

(long_options, usage, decode_options): Add support for --anchored,
--ignore-case, --no-anchored, --no-ignore-case, --no-wildcards,
--no-wildcards-match-slash, --recursion, --wildcards,
--wildcards-match-slash.

(decode_options): Implement the new way of interpreting exclude patterns.

(usage): --newer-mtime takes a DATE operand.  DATE may be a file name.

(OPTION_STRING, decode_options): Add -I, -y.  Currently these options
just print error messages suggesting alternatives.

(add_filtered_exclude): Remove.

src/tar.c

index 0095701d68ca9ec836590b0c9369d37b722ec7a9..69ec97cf6cce192c861489de2c2e25e70c4e084c 100644 (file)
--- a/src/tar.c
+++ b/src/tar.c
@@ -1,5 +1,8 @@
 /* A tar (tape archiver) program.
-   Copyright 1988,92,93,94,95,96,97,99,2000,2001 Free Software Foundation, Inc.
+
+   Copyright 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001 Free
+   Software Foundation, Inc.
+
    Written by John Gilmore, starting 1985-08-25.
 
    This program is free software; you can redistribute it and/or modify it
@@ -122,12 +125,18 @@ confirm (const char *message_action, const char *message_name)
 
 enum
 {
-  BACKUP_OPTION = CHAR_MAX + 1,
+  ANCHORED_OPTION = CHAR_MAX + 1,
+  BACKUP_OPTION,
   DELETE_OPTION,
   EXCLUDE_OPTION,
   GROUP_OPTION,
+  IGNORE_CASE_OPTION,
   MODE_OPTION,
   NEWER_MTIME_OPTION,
+  NO_ANCHORED_OPTION,
+  NO_IGNORE_CASE_OPTION,
+  NO_WILDCARDS_OPTION,
+  NO_WILDCARDS_MATCH_SLASH_OPTION,
   NULL_OPTION,
   OVERWRITE_OPTION,
   OWNER_OPTION,
@@ -138,6 +147,8 @@ enum
   SUFFIX_OPTION,
   USE_COMPRESS_PROGRAM_OPTION,
   VOLNO_FILE_OPTION,
+  WILDCARDS_OPTION,
+  WILDCARDS_MATCH_SLASH_OPTION,
 
   /* Some cleanup is being made in GNU tar long options.  Using old names is
      allowed for a while, but will also send a warning to stderr.  Take old
@@ -163,6 +174,7 @@ static struct option long_options[] =
   {"absolute-names", no_argument, 0, 'P'},
   {"absolute-paths", no_argument, 0, OBSOLETE_ABSOLUTE_NAMES},
   {"after-date", required_argument, 0, 'N'},
+  {"anchored", no_argument, 0, ANCHORED_OPTION},
   {"append", no_argument, 0, 'r'},
   {"atime-preserve", no_argument, &atime_preserve_option, 1},
   {"backup", optional_argument, 0, BACKUP_OPTION},
@@ -194,6 +206,7 @@ static struct option long_options[] =
   {"gunzip", no_argument, 0, 'z'},
   {"gzip", no_argument, 0, 'z'},
   {"help", no_argument, &show_help, 1},
+  {"ignore-case", no_argument, 0, IGNORE_CASE_OPTION},
   {"ignore-failed-read", no_argument, &ignore_failed_read_option, 1},
   {"ignore-zeros", no_argument, 0, 'i'},
   /* FIXME: --ignore-end as a new name for --ignore-zeros?  */
@@ -211,6 +224,10 @@ static struct option long_options[] =
   {"newer", required_argument, 0, 'N'},
   {"newer-mtime", required_argument, 0, NEWER_MTIME_OPTION},
   {"null", no_argument, 0, NULL_OPTION},
+  {"no-anchored", no_argument, 0, NO_ANCHORED_OPTION},
+  {"no-ignore-case", no_argument, 0, NO_IGNORE_CASE_OPTION},
+  {"no-wildcards", no_argument, 0, NO_WILDCARDS_OPTION},
+  {"no-wildcards-match-slash", no_argument, 0, NO_WILDCARDS_MATCH_SLASH_OPTION},
   {"no-recursion", no_argument, &recursion_option, 0},
   {"no-same-owner", no_argument, &same_owner_option, -1},
   {"no-same-permissions", no_argument, &same_permissions_option, -1},
@@ -224,6 +241,7 @@ static struct option long_options[] =
   {"preserve", no_argument, 0, PRESERVE_OPTION},
   {"preserve-order", no_argument, 0, 's'},
   {"preserve-permissions", no_argument, 0, 'p'},
+  {"recursion", no_argument, &recursion_option, FNM_LEADING_DIR},
   {"recursive-unlink", no_argument, &recursive_unlink_option, 1},
   {"read-full-blocks", no_argument, 0, OBSOLETE_READ_FULL_RECORDS},
   {"read-full-records", no_argument, 0, 'B'},
@@ -253,6 +271,8 @@ static struct option long_options[] =
   {"version", no_argument, &show_version, 1},
   {"version-control", required_argument, 0, OBSOLETE_VERSION_CONTROL},
   {"volno-file", required_argument, 0, VOLNO_FILE_OPTION},
+  {"wildcards", no_argument, 0, WILDCARDS_OPTION},
+  {"wildcards-match-slash", no_argument, 0, WILDCARDS_MATCH_SLASH_OPTION},
 
   {0, 0, 0, 0}
 };
@@ -368,8 +388,16 @@ Local file selection:\n\
   -C, --directory=DIR          change to directory DIR\n\
   -T, --files-from=NAME        get names to extract or create from file NAME\n\
       --null                   -T reads null-terminated names, disable -C\n\
-      --exclude=PATTERN        exclude files, given as a globbing PATTERN\n\
-  -X, --exclude-from=FILE      exclude globbing patterns listed in FILE\n\
+      --exclude=PATTERN        exclude files, given as a PATTERN\n\
+  -X, --exclude-from=FILE      exclude patterns listed in FILE\n\
+      --anchored               exclude patterns match file name start (default)\n\
+      --no-anchored            exclude patterns match after any /\n\
+      --ignore-case            exclusion ignores case\n\
+      --no-ignore-case         exclusion is case sensitive (default)\n\
+      --wildcards              exclude patterns use wildcards (default)\n\
+      --no-wildcards           exclude patterns are plain strings\n\
+      --wildcards-match-slash  exclude pattern wildcards match '/' (default)\n\
+      --no-wildcards-match-slash exclude pattern wildcards do not match '/'\n\
   -P, --absolute-names         don't strip leading `/'s from file names\n\
   -h, --dereference            dump instead the files symlinks point to\n\
       --no-recursion           avoid descending automatically in directories\n\
@@ -379,7 +407,7 @@ Local file selection:\n\
 #if !MSDOS
       fputs (_("\
   -N, --newer=DATE             only store files newer than DATE\n\
-      --newer-mtime            compare date and time when data changed only\n\
+      --newer-mtime=DATE       compare date and time when data changed only\n\
       --after-date=DATE        same as -N\n"),
             stdout);
 #endif
@@ -413,8 +441,9 @@ The version control may be set with --backup or VERSION_CONTROL, values are:\n\
 GNU tar cannot read nor produce `--posix' archives.  If POSIXLY_CORRECT\n\
 is set in the environment, GNU extensions are disallowed with `--posix'.\n\
 Support for POSIX is only partially implemented, don't count on it yet.\n\
-ARCHIVE may be FILE, HOST:FILE or USER@HOST:FILE; and FILE may be a file\n\
-or a device.  *This* `tar' defaults to `-f%s -b%d'.\n"),
+ARCHIVE may be FILE, HOST:FILE or USER@HOST:FILE; DATE may be a textual date\n\
+or a file name starting with `/' or `.', in which case the file's date is used.\n\
+*This* `tar' defaults to `-f%s -b%d'.\n"),
              DEFAULT_ARCHIVE, DEFAULT_BLOCKING);
       fputs (_("\nReport bugs to <bug-tar@gnu.org>.\n"), stdout);
     }
@@ -434,7 +463,7 @@ or a device.  *This* `tar' defaults to `-f%s -b%d'.\n"),
    Y  per-block gzip compression */
 
 #define OPTION_STRING \
-  "-01234567ABC:F:GK:L:MN:OPRST:UV:WX:Zb:cdf:g:hijklmoprstuvwxz"
+  "-01234567ABC:F:GIK:L:MN:OPRST:UV:WX:Zb:cdf:g:hijklmoprstuvwxyz"
 
 static void
 set_subcommand_option (enum subcommand subcommand)
@@ -456,18 +485,6 @@ set_use_compress_program_option (const char *string)
   use_compress_program_option = string;
 }
 
-/* Ignore DUMMY (which will always be null in practice), and add
-   PATTERN to the proper set of patterns to be excluded -- either
-   patterns with slashes, or patterns without.  */
-static void
-add_filtered_exclude (struct exclude *dummy, char const *pattern)
-{
-  add_exclude ((strchr (pattern, '/')
-               ? excluded_with_slash
-               : excluded_without_slash),
-              pattern);
-}
-
 static void
 decode_options (int argc, char **argv)
 {
@@ -475,6 +492,7 @@ decode_options (int argc, char **argv)
   int input_files;             /* number of input files */
   const char *backup_suffix_string;
   const char *version_control_string = 0;
+  int exclude_options = EXCLUDE_WILDCARDS;
 
   /* Set some default option values.  */
 
@@ -482,8 +500,7 @@ decode_options (int argc, char **argv)
   archive_format = DEFAULT_FORMAT;
   blocking_factor = DEFAULT_BLOCKING;
   record_size = DEFAULT_BLOCKING * BLOCKSIZE;
-  excluded_with_slash = new_exclude ();
-  excluded_without_slash = new_exclude ();
+  excluded = new_exclude ();
   newer_mtime_option = TYPE_MINIMUM (time_t);
   recursion_option = FNM_LEADING_DIR;
 
@@ -670,6 +687,12 @@ decode_options (int argc, char **argv)
        ignore_zeros_option = 1;
        break;
 
+      case 'I':
+       USAGE_ERROR ((0, 0,
+                     _("Warning: the -I option is not supported;"
+                       " perhaps you meant -j or -T?")));
+       break;
+
       case 'j':
        set_use_compress_program_option ("bzip2");
        break;
@@ -839,13 +862,21 @@ decode_options (int argc, char **argv)
        break;
 
       case 'X':
-       if (add_exclude_file (add_filtered_exclude, 0, optarg, '\n') != 0)
+       if (add_exclude_file (add_exclude, excluded, optarg,
+                             exclude_options | recursion_option, '\n')
+           != 0)
          {
            int e = errno;
            FATAL_ERROR ((0, e, "%s", quotearg_colon (optarg)));
          }
        break;
 
+      case 'y':
+       USAGE_ERROR ((0, 0,
+                     _("Warning: the -y option is not supported;"
+                       " perhaps you meant -j?")));
+       break;
+
       case 'z':
        set_use_compress_program_option ("gzip");
        break;
@@ -858,6 +889,10 @@ decode_options (int argc, char **argv)
        WARN ((0, 0, _("Obsolete option name replaced by --backup")));
        /* Fall through.  */
 
+      case ANCHORED_OPTION:
+       exclude_options |= EXCLUDE_ANCHORED;
+       break;
+
       case BACKUP_OPTION:
        backup_option = 1;
        if (optarg)
@@ -869,7 +904,11 @@ decode_options (int argc, char **argv)
        break;
 
       case EXCLUDE_OPTION:
-       add_filtered_exclude (0, optarg);
+       add_exclude (excluded, optarg, exclude_options | recursion_option);
+       break;
+
+      case IGNORE_CASE_OPTION:
+       exclude_options |= FNM_CASEFOLD;
        break;
 
       case GROUP_OPTION:
@@ -896,6 +935,22 @@ decode_options (int argc, char **argv)
          xalloc_die ();
        break;
 
+      case NO_ANCHORED_OPTION:
+       exclude_options &= ~ EXCLUDE_ANCHORED;
+       break;
+
+      case NO_IGNORE_CASE_OPTION:
+       exclude_options &= ~ FNM_CASEFOLD;
+       break;
+
+      case NO_WILDCARDS_OPTION:
+       exclude_options &= ~ EXCLUDE_WILDCARDS;
+       break;
+
+      case NO_WILDCARDS_MATCH_SLASH_OPTION:
+       exclude_options |= FNM_FILE_NAME;
+       break;
+
       case NULL_OPTION:
        filename_terminator = '\0';
        break;
@@ -961,12 +1016,20 @@ decode_options (int argc, char **argv)
        backup_suffix_string = optarg;
        break;
 
+      case USE_COMPRESS_PROGRAM_OPTION:
+       set_use_compress_program_option (optarg);
+       break;
+
       case VOLNO_FILE_OPTION:
        volno_file_option = optarg;
        break;
 
-      case USE_COMPRESS_PROGRAM_OPTION:
-       set_use_compress_program_option (optarg);
+      case WILDCARDS_OPTION:
+       exclude_options |= EXCLUDE_WILDCARDS;
+       break;
+
+      case WILDCARDS_MATCH_SLASH_OPTION:
+       exclude_options &= ~ FNM_FILE_NAME;
        break;
 
       case '0':
This page took 0.033621 seconds and 4 git commands to generate.