From 620a136e74f211c2fb98b45fe44261d5d775f6a9 Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Wed, 17 Oct 2007 09:11:34 +0000 Subject: [PATCH] New options --auto-compress (-a) and --lzma --- src/tar.c | 57 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 16 deletions(-) diff --git a/src/tar.c b/src/tar.c index a1e2936..41a53ec 100644 --- a/src/tar.c +++ b/src/tar.c @@ -268,6 +268,7 @@ enum IGNORE_FAILED_READ_OPTION, INDEX_FILE_OPTION, KEEP_NEWER_FILES_OPTION, + LZMA_OPTION, MODE_OPTION, MTIME_OPTION, NEWER_MTIME_OPTION, @@ -345,7 +346,7 @@ The version control may be set with --backup or VERSION_CONTROL, values are:\n\n /* NOTE: - Available option letters are DEIJQY and aeqy. Consider the following + Available option letters are DEIJQY and eqy. Consider the following assignments: [For Solaris tar compatibility =/= Is it important at all?] @@ -574,20 +575,29 @@ static struct argp_option options[] = { N_("control pax keywords"), GRID+8 }, {"label", 'V', N_("TEXT"), 0, N_("create archive with volume name TEXT; at list/extract time, use TEXT as a globbing pattern for volume name"), GRID+8 }, +#undef GRID + +#define GRID 90 + {NULL, 0, NULL, 0, + N_("Compression options:"), GRID }, + {"auto-compress", 'a', 0, 0, + N_("use archive suffix to determine the compression program"), GRID+1 }, {"bzip2", 'j', 0, 0, - N_("filter the archive through bzip2"), GRID+8 }, + N_("filter the archive through bzip2"), GRID+1 }, {"gzip", 'z', 0, 0, - N_("filter the archive through gzip"), GRID+8 }, - {"gunzip", 0, 0, OPTION_ALIAS, NULL, GRID+8 }, - {"ungzip", 0, 0, OPTION_ALIAS, NULL, GRID+8 }, + N_("filter the archive through gzip"), GRID+1 }, + {"gunzip", 0, 0, OPTION_ALIAS, NULL, GRID+1 }, + {"ungzip", 0, 0, OPTION_ALIAS, NULL, GRID+1 }, {"compress", 'Z', 0, 0, - N_("filter the archive through compress"), GRID+8 }, - {"uncompress", 0, 0, OPTION_ALIAS, NULL, GRID+8 }, + N_("filter the archive through compress"), GRID+1 }, + {"uncompress", 0, 0, OPTION_ALIAS, NULL, GRID+1 }, + {"lzma", LZMA_OPTION, 0, 0, + N_("filter the archive through lzma"), GRID+1 }, {"use-compress-program", USE_COMPRESS_PROGRAM_OPTION, N_("PROG"), 0, - N_("filter through PROG (must accept -d)"), GRID+8 }, + N_("filter through PROG (must accept -d)"), GRID+1 }, #undef GRID - -#define GRID 90 + +#define GRID 100 {NULL, 0, NULL, 0, N_("Local file selection:"), GRID }, @@ -647,7 +657,7 @@ static struct argp_option options[] = { N_("backup before removal, override usual suffix ('~' unless overridden by environment variable SIMPLE_BACKUP_SUFFIX)"), GRID+1 }, #undef GRID -#define GRID 92 +#define GRID 110 {NULL, 0, NULL, 0, N_("File name transformations:"), GRID }, {"strip-components", STRIP_COMPONENTS_OPTION, N_("NUMBER"), 0, @@ -657,7 +667,7 @@ static struct argp_option options[] = { N_("use sed replace EXPRESSION to transform file names"), GRID+1 }, #undef GRID -#define GRID 95 +#define GRID 120 {NULL, 0, NULL, 0, N_("File name matching options (affect both exclude and include patterns):"), GRID }, @@ -679,7 +689,7 @@ static struct argp_option options[] = { N_("wildcards match `/' (default for exclusion)"), GRID+1 }, #undef GRID -#define GRID 100 +#define GRID 130 {NULL, 0, NULL, 0, N_("Informative output:"), GRID }, @@ -720,7 +730,7 @@ static struct argp_option options[] = { N_("disable quoting for characters from STRING"), GRID+1 }, #undef GRID -#define GRID 110 +#define GRID 140 {NULL, 0, NULL, 0, N_("Compatibility options:"), GRID }, @@ -728,7 +738,7 @@ static struct argp_option options[] = { N_("when creating, same as --old-archive; when extracting, same as --no-same-owner"), GRID+1 }, #undef GRID -#define GRID 120 +#define GRID 150 {NULL, 0, NULL, 0, N_("Other options:"), GRID }, @@ -785,6 +795,8 @@ struct tar_args /* Variables used during option parsing */ char const *backup_suffix_string; /* --suffix option argument */ char const *version_control_string; /* --backup option argument */ bool input_files; /* True if some input files where given */ + int compress_autodetect; /* True if compression autodetection should + be attempted when creating archives */ }; @@ -1222,6 +1234,10 @@ parse_opt (int key, char *arg, struct argp_state *state) set_subcommand_option (CAT_SUBCOMMAND); break; + case 'a': + args->compress_autodetect = true; + break; + case 'b': { uintmax_t u; @@ -1341,6 +1357,10 @@ parse_opt (int key, char *arg, struct argp_state *state) } break; + case LZMA_OPTION: + set_use_compress_program_option ("lzma"); + break; + case 'm': touch_option = true; break; @@ -2001,7 +2021,8 @@ decode_options (int argc, char **argv) args.backup_suffix_string = getenv ("SIMPLE_BACKUP_SUFFIX"); args.version_control_string = 0; args.input_files = false; - + args.compress_autodetect = false; + subcommand_option = UNKNOWN_SUBCOMMAND; archive_format = DEFAULT_FORMAT; blocking_factor = DEFAULT_BLOCKING; @@ -2262,6 +2283,10 @@ decode_options (int argc, char **argv) if (!args.input_files && !files_from_option) USAGE_ERROR ((0, 0, _("Cowardly refusing to create an empty archive"))); + if (args.compress_autodetect && archive_names + && strcmp (archive_name_array[0], "-")) + set_comression_program_by_suffix (archive_name_array[0], + use_compress_program_option); break; case EXTRACT_SUBCOMMAND: -- 2.44.0