Pārlūkot izejas kodu

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.
Sergey Poznyakoff 10 gadi atpakaļ
vecāks
revīzija
e7b6f8e3ae
4 mainītis faili ar 25 papildinājumiem un 8 dzēšanām
  1. 3 3
      NEWS
  2. 18 1
      doc/tar.texi
  3. 1 1
      src/create.c
  4. 3 3
      src/xheader.c

+ 3 - 3
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).

+ 18 - 1
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
 

+ 1 - 1
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);

+ 3 - 3
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