diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2014-11-07 13:03:18 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2014-11-07 13:15:54 +0200 |
commit | e7b6f8e3aecf2699ecd1e18f905e14a2841c5e00 (patch) | |
tree | 2fcef69765f59cca5226e4641ad6581098b1a44a | |
parent | 586a6263e9d97494139b4285c81ee5907c9d7252 (diff) | |
download | tar-e7b6f8e3aecf2699ecd1e18f905e14a2841c5e00.tar.gz |
Honor the pax-option overrides when creating archive.
Changes proposed by Denis Excoffier.
* NEWS: Fix typos.
* doc/tar.texi: Fix typos. Improve recipe for creation of binary
equivalent archives.
* src/create.c (write_extended): Use the value of the
--mtime option (if specified) as the default for exthdr.mtime.
* src/xheader.c (xheader_store): Create the header if at least
one override is supplied in --pax-option.
-rw-r--r-- | NEWS | 6 | ||||
-rw-r--r-- | doc/tar.texi | 19 | ||||
-rw-r--r-- | src/create.c | 2 | ||||
-rw-r--r-- | src/xheader.c | 6 |
4 files changed, 25 insertions, 8 deletions
@@ -1,4 +1,4 @@ -GNU tar NEWS - User visible changes. 2014-07-27 +GNU tar NEWS - User visible changes. 2014-11-07 Please send GNU tar bug reports to <bug-tar@gnu.org> @@ -369,7 +369,7 @@ Modification times in ustar header blocks of extended headers are set to mtimes of the corresponding archive members. This can be overridden by the - --pax-opion='exthdr.mtime=STRING' + --pax-option='exthdr.mtime=STRING' command line option. The STRING is either number of seconds since the Epoch or a "Time reference" (see below). @@ -379,7 +379,7 @@ headers are set to the time when tar was invoked. This can be overridden by the - --pax-opion='globexthdr.mtime=STRING' + --pax-option='globexthdr.mtime=STRING' command line option. The STRING is either number of seconds since the Epoch or a "Time reference" (see below). diff --git a/doc/tar.texi b/doc/tar.texi index 0adcfc06..119ae168 100644 --- a/doc/tar.texi +++ b/doc/tar.texi @@ -9930,7 +9930,8 @@ will use the following default value: This keyword defines the value of the @samp{mtime} field that is written into the ustar header blocks for the extended headers. By default, the @samp{mtime} field is set to the modification time -of the archive member described by that extended headers. +of the archive member described by that extended header (or to the +value of the @option{--mtime} option, if supplied). @item globexthdr.name=@var{string} This keyword allows user control over the name that is written into @@ -10023,6 +10024,22 @@ same contents: --pax-option=exthdr.name=%d/PaxHeaders/%f,atime:=0 @end smallexample +@noindent +If you extract files from such an archive and recreate the archive +from them, you will also need to eliminate changes due to ctime, as +shown in examples below: + +@smallexample +--pax-option=exthdr.name=%d/PaxHeaders/%f,atime:=0,ctime:=0 +@end smallexample + +@noindent +or + +@smallexample +--pax-option=exthdr.name=%d/PaxHeaders/%f,atime:=0,delete=ctime +@end smallexample + @node Checksumming @subsection Checksumming Problems diff --git a/src/create.c b/src/create.c index e2f4ede6..0d1a5ffe 100644 --- a/src/create.c +++ b/src/create.c @@ -706,7 +706,7 @@ write_extended (bool global, struct tar_stat_info *st, union block *old_header) { type = XHDTYPE; p = xheader_xhdr_name (st); - t = st->stat.st_mtime; + t = set_mtime_option ? mtime_option.tv_sec : st->stat.st_mtime; } xheader_write (type, p, t, &st->xhdr); free (p); diff --git a/src/xheader.c b/src/xheader.c index 361f6847..b7a54a66 100644 --- a/src/xheader.c +++ b/src/xheader.c @@ -813,11 +813,11 @@ xheader_store (char const *keyword, struct tar_stat_info *st, t = locate_handler (keyword); if (!t || !t->coder) return; - if (xheader_keyword_deleted_p (keyword) - || xheader_keyword_override_p (keyword)) + if (xheader_keyword_deleted_p (keyword)) return; xheader_init (&st->xhdr); - t->coder (st, keyword, &st->xhdr, data); + if (!xheader_keyword_override_p (keyword)) + t->coder (st, keyword, &st->xhdr, data); } void |