summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2014-11-07 13:03:18 +0200
committerSergey Poznyakoff <gray@gnu.org>2014-11-07 13:15:54 +0200
commite7b6f8e3aecf2699ecd1e18f905e14a2841c5e00 (patch)
tree2fcef69765f59cca5226e4641ad6581098b1a44a
parent586a6263e9d97494139b4285c81ee5907c9d7252 (diff)
downloadtar-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--NEWS6
-rw-r--r--doc/tar.texi19
-rw-r--r--src/create.c2
-rw-r--r--src/xheader.c6
4 files changed, 25 insertions, 8 deletions
diff --git a/NEWS b/NEWS
index 32bc881d..c3385f8b 100644
--- a/NEWS
+++ b/NEWS
@@ -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