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.
This commit is contained in:
Sergey Poznyakoff
2014-11-07 13:03:18 +02:00
parent 586a6263e9
commit e7b6f8e3ae
4 changed files with 25 additions and 8 deletions

6
NEWS
View File

@@ -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).

View File

@@ -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

View File

@@ -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);

View File

@@ -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