Ver Fonte

Handle new options --to-command,--ignore-command-error

Sergey Poznyakoff há 20 anos atrás
pai
commit
4d24adbecb
1 ficheiros alterados com 23 adições e 0 exclusões
  1. 23 0
      src/tar.c

+ 23 - 0
src/tar.c

@@ -192,6 +192,7 @@ enum
   GROUP_OPTION,
   HANG_OPTION,
   IGNORE_CASE_OPTION,
+  IGNORE_COMMAND_ERROR_OPTION,
   IGNORE_FAILED_READ_OPTION,
   INDEX_FILE_OPTION,
   KEEP_NEWER_FILES_OPTION,
@@ -200,6 +201,7 @@ enum
   NEWER_MTIME_OPTION,
   NO_ANCHORED_OPTION,
   NO_IGNORE_CASE_OPTION,
+  NO_IGNORE_COMMAND_ERROR_OPTION,
   NO_OVERWRITE_DIR_OPTION,
   NO_RECURSION_OPTION,
   NO_SAME_OWNER_OPTION,
@@ -228,6 +230,7 @@ enum
   SHOW_OMITTED_DIRS_OPTION,
   STRIP_COMPONENTS_OPTION,
   SUFFIX_OPTION,
+  TO_COMMAND_OPTION,
   TOTALS_OPTION,
   UNQUOTE_OPTION,
   USAGE_OPTION,
@@ -315,6 +318,12 @@ static struct argp_option options[] = {
    N_("handle sparse files efficiently"), 21 },
   {"to-stdout", 'O', 0, 0,
    N_("extract files to standard output"), 21 },
+  {"to-command", TO_COMMAND_OPTION, N_("COMMAND"), 0,
+   N_("pipe extracted files to another program"), 21 },
+  {"ignore-command-error", IGNORE_COMMAND_ERROR_OPTION, 0, 0,
+   N_("ignore exit codes of children"), 21 },
+  {"no-ignore-command-error", NO_IGNORE_COMMAND_ERROR_OPTION, 0, 0,
+   N_("treat non-zero exit codes of children as error"), 21 },
   {"incremental", 'G', 0, 0,
    N_("handle old GNU-format incremental backup"), 21 },
   {"listed-incremental", 'g', N_("FILE"), 0,
@@ -1088,6 +1097,10 @@ parse_opt (int key, char *arg, struct argp_state *state)
     case IGNORE_CASE_OPTION:
       args->exclude_options |= FNM_CASEFOLD;
       break;
+
+    case IGNORE_COMMAND_ERROR_OPTION:
+      ignore_command_error_option = true;
+      break;
       
     case IGNORE_FAILED_READ_OPTION:
       ignore_failed_read_option = true;
@@ -1129,6 +1142,10 @@ parse_opt (int key, char *arg, struct argp_state *state)
       args->exclude_options &= ~ FNM_CASEFOLD;
       break;
       
+    case NO_IGNORE_COMMAND_ERROR_OPTION:
+      ignore_command_error_option = false;
+      break;
+
     case NO_OVERWRITE_DIR_OPTION:
       old_files_option = NO_OVERWRITE_DIR_OLD_FILES;
       break;
@@ -1249,6 +1266,12 @@ parse_opt (int key, char *arg, struct argp_state *state)
       backup_option = true;
       args->backup_suffix_string = arg;
       break;
+
+    case TO_COMMAND_OPTION:
+      if (to_command_option)
+        USAGE_ERROR ((0, 0, _("Only one --to-command option allowed")));
+      to_command_option = arg;
+      break;
       
     case TOTALS_OPTION:
       totals_option = true;