Add xz support.

* src/buffer.c, src/suffix.c: Add support for xz compression.
* src/tar.c: New option --xz, for compression/decompression using xz.
Re-assign -J as a short equivalent of --xz.
* doc/tar.texi, NEWS: Document --xz
This commit is contained in:
Sergey Poznyakoff
2009-03-04 16:50:31 +00:00
parent 7a968d67c8
commit c10830a35b
6 changed files with 70 additions and 10 deletions

View File

@@ -1,3 +1,11 @@
2009-03-04 Sergey Poznyakoff <gray@gnu.org.ua>
Add xz support.
* src/buffer.c, src/suffix.c: Add support for xz compression.
* src/tar.c: New option --xz, for compression/decompression using xz.
Re-assign -J as a short equivalent of --xz.
2009-01-19 Sergey Poznyakoff <gray@gnu.org.ua>
* doc/tar.texi: Fix typo.

33
NEWS
View File

@@ -1,6 +1,37 @@
GNU tar NEWS - User visible changes. 2008-12-27
GNU tar NEWS - User visible changes. 2009-03-04
Please send GNU tar bug reports to <bug-tar@gnu.org>
version 1.21.90 (CVS)
* Support for xz compression
Tar uses xz for compression if at least one of the following
conditions is met:
1. The option --xz or -J (see below) is used.
2. The xz binary is set as compressor using --use-compress-program option.
3. The file name of the archive being created ends in `.xz' and
auto-compress option (-a) is used.
Xz is used for decompression if at least one of the following
conditions is met:
1. The option --xz or -J is used.
2. The xz binary is set as compressor using --use-compress-program option.
3. The file is recognized as xz compressed stream data.
* Short option -J
The decision to assign -J option was taken just before the XZ format
has been officially declared stable. Now, that stable xz tools are
available, the -J option is re-assigned as a short equivalent of --xz.
* New option -I
The -I option is assigned as a short equivalent for
--use-compress-program.
version 1.21 - Sergey Poznyakoff, 2008-12-27

View File

@@ -2786,7 +2786,6 @@ incremental format. @xref{Incremental Dumps}.
@opsummary{lzma}
@item --lzma
@itemx -J
This option tells @command{tar} to read or write archives through
@command{lzma}. @xref{gzip}.
@@ -3359,6 +3358,12 @@ Use wildcards when matching member names with patterns.
@item --wildcards-match-slash
Wildcards match @samp{/}.
@xref{controlling pattern-matching}.
@opsummary{xz}
@item --xz
@itemx -J
Use @command{xz} for compressing or decompressing the archives. @xref{gzip}.
@end table
@node Short Option Summary
@@ -3380,7 +3385,7 @@ them with the equivalent long option.
@item -G @tab @ref{--incremental}.
@item -J @tab @ref{--lzma}.
@item -J @tab @ref{--xz}.
@item -K @tab @ref{--starting-file}.
@@ -8406,7 +8411,8 @@ Creating a compressed archive is simple: you just specify a
commands. The compression option is @option{-z} (@option{--gzip}) to
create a @command{gzip} compressed archive, @option{-j}
(@option{--bzip2}) to create a @command{bzip2} compressed archive,
@option{-J} (@option{--lzma}) to create an @asis{LZMA} compressed
@option{-J} (@option{--xz}) to create an @asis{XZ} archive,
@option{--lzma} to create an @asis{LZMA} compressed
archive, @option{--lzop} to create an @asis{LSOP} archive, and
@option{-Z} (@option{--compress}) to use @command{compress} program.
For example:
@@ -8504,6 +8510,7 @@ suffix. The following suffixes are recognized:
@item @samp{.lzma} @tab @command{lzma}
@item @samp{.tlz} @tab @command{lzma}
@item @samp{.lzo} @tab @command{lzop}
@item @samp{.xz} @tab @command{xz}
@end multitable
@opindex gzip
@@ -8548,13 +8555,17 @@ lose some compressibility. But this would have make recovering easier.
So, there are pros and cons. We'll see!
@opindex bzip2
@item -J
@itemx --xz
Filter the archive through @code{xz}. Otherwise like
@option{--gzip}.
@item -j
@itemx --bzip2
Filter the archive through @code{bzip2}. Otherwise like @option{--gzip}.
@opindex lzma
@item --lzma
@itemx -J
Filter the archive through @command{lzma}. Otherwise like @option{--gzip}.
@opindex lzop

View File

@@ -204,7 +204,8 @@ enum compress_type {
ct_gzip,
ct_bzip2,
ct_lzma,
ct_lzop
ct_lzop,
ct_xz
};
struct zip_magic
@@ -222,8 +223,9 @@ static struct zip_magic const magic[] = {
{ ct_compress, 2, "\037\235", "compress", "-Z" },
{ ct_gzip, 2, "\037\213", "gzip", "-z" },
{ ct_bzip2, 3, "BZh", "bzip2", "-j" },
{ ct_lzma, 6, "\xFFLZMA", "lzma", "-J" }, /* FIXME: ???? */
{ ct_lzma, 6, "\xFFLZMA", "lzma", "--lzma" }, /* FIXME: ???? */
{ ct_lzop, 4, "\211LZO", "lzop", "--lzop" },
{ ct_xz, 6, "\0xFD7zXZ", "-J" },
};
#define NMAGIC (sizeof(magic)/sizeof(magic[0]))

View File

@@ -40,6 +40,7 @@ struct compression_suffix compression_suffixes[] = {
{ S(lzma, lzma) },
{ S(tlz, lzma) },
{ S(lzo, lzop) },
{ S(xz, xz) },
#undef S
};

View File

@@ -271,6 +271,7 @@ enum
IGNORE_FAILED_READ_OPTION,
INDEX_FILE_OPTION,
KEEP_NEWER_FILES_OPTION,
LZMA_OPTION,
LZOP_OPTION,
MODE_OPTION,
MTIME_OPTION,
@@ -593,7 +594,7 @@ static struct argp_option options[] = {
{"auto-compress", 'a', 0, 0,
N_("use archive suffix to determine the compression program"), GRID+1 },
{"no-auto-compress", NO_AUTO_COMPRESS_OPTION, 0, 0,
N_("do not use use archive suffix to determine the compression program"),
N_("do not use archive suffix to determine the compression program"),
GRID+1 },
{"bzip2", 'j', 0, 0,
N_("filter the archive through bzip2"), GRID+1 },
@@ -604,10 +605,12 @@ static struct argp_option options[] = {
{"compress", 'Z', 0, 0,
N_("filter the archive through compress"), GRID+1 },
{"uncompress", 0, 0, OPTION_ALIAS, NULL, GRID+1 },
{"lzma", 'J', 0, 0,
{"lzma", LZMA_OPTION, 0, 0,
N_("filter the archive through lzma"), GRID+1 },
{"lzop", LZOP_OPTION, 0, 0,
N_("filter the archive through lzop"), GRID+8 },
{"xz", 'J', 0, 0,
N_("filter the archive through xz"), GRID+8 },
{"use-compress-program", 'I', N_("PROG"), 0,
N_("filter through PROG (must accept -d)"), GRID+1 },
#undef GRID
@@ -1367,7 +1370,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
break;
case 'J':
set_use_compress_program_option ("lzma");
set_use_compress_program_option ("xz");
break;
case 'k':
@@ -1401,6 +1404,10 @@ parse_opt (int key, char *arg, struct argp_state *state)
}
break;
case LZMA_OPTION:
set_use_compress_program_option ("lzma");
break;
case LZOP_OPTION:
set_use_compress_program_option ("lzop");
break;