+2005-11-30 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/tar.texi (Option Summary): Rewrite the
+ --atime-preserve=system description in response to Ian Turner's
+ proposed patch.
+
+2005-11-30 Ian Turner <ian@zmanda.com>
+
+ * doc/tar.texi (Extracting Specific Files): Remove obsolescent
+ FIXME.
+
+2005-11-29 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: New option --atime-preserve=system, which uses O_NOATIME.
+ * THANKS: Add Ian Turner.
+
+ * configure.ac: Prefer AC_CHECK_HEADERS_ONCE to AC_CHECK_HEADERS.
+ Check for stropts.h and sys/filio.h too, for _FIOSATIME.
+ * doc/tar.texi: Change "modification time" to "data modification
+ time", "change time" to "status change time", and "filesystem" to
+ "file system", so that we use terminology consistent with POSIX.
+ Use American spacing rather than French for sentence ends.
+ "non-dependable" -> "undependable".
+ (Option Summary, Attributes): Explain better the pitfalls of the
+ --atime-preserve option, and suggest read-only mounts,loopback
+ mounts, and noatime mounts for older systems.
+ * doc/value.texi (op-atime-preserve-system): Renamed from
+ op-atime-preserver-system to fix a misspelling.
+ * src/common.h (enum atime_preserve): Use lower case for enum values.
+ * src/compare.c: Don't include utimens.h; no longer needed.
+ (diff_file): Use set_file_atime rather than utimens; avoid closing
+ diff_handle until after this, so that we can set the file time stamp
+ via the file descriptor rather than via its name.
+ * src/create.c: Don't include utimens.h; no longer needed.
+ (dump_regular_finish): Remove. All callers now do its work inline.
+ (dump_dir): New arg FD. All callers changed.
+ Use fdsavedir rather than savedir.
+ (unknown_file_error): Arg is a const pointer now.
+ (dump_file0): 2nd arg is a const pointer now.
+ Treat directories more like files, with respect to --atime-preserve.
+ For example, also warn if a directory changes while we are dumping it.
+ Prefer file descriptors to file names when retrieving/setting file
+ attributes; this saves path-resolution time and allows us to avoid
+ changing mtime/ctime on Solaris when restoring atime as root.
+ Use O_DIRECTORY when opening directories, to avoid some race conditions.
+ Do not reset atime if mtime has changed. Report an error if
+ we cannot reset atime.
+
+ * lib/.cvsignore: Add malloc.h, regcomp.c, regex.c, regex.h,
+ regex_internal.c, regex_internal.h, regexc.c; used by rpmatch.
+
+2005-11-29 Ian Turner <ian@zmanda.com>
+
+ First cut at adding support for --atime-preserve=system.
+ * doc/tar.texi (Option Summary): First cut at documenting it.
+ All other uses of --atime-preserve changed to --atime-preserve=replace.
+ * doc/value.texi (op-atime-preserve-replace, op-atime-preserver-system):
+ New.
+ (op-atime-preserve): Mention METHOD.
+ * src/common.h (atime_preserve): New enum.
+ (atime_preserve_option): Now of the enum type rather than bool.
+ All uses changed.
+ * src/compare.c (diff_file): Read with O_NOATIME if asked for.
+ * src/create.c (dump_file0): Read regular and CTG files with O_NOATIME
+ if asked for.
+ * src/tar.c (usage): Mention new usage.
+ (parse_opt): Parse new usage.
+
+2005-11-29 Paul Eggert <eggert@cs.ucla.edu>
+
+ * THANKS: Convert back to UTF-8, sort (using LC_ALL=C on Debian
+ stable), and consistently use tabs rather than spaces.
+
+2005-11-27 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * src/xheader.c: Remove parts of code prematurely introduced
+ yesterday. Thanks Eric Blake.
+
+2005-11-26 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * src/xheader.c (xheader_format_name): Fix memory leak.
+
+2005-11-11 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * gnulib.modules: Add rpmatch
+ * lib/stdopen.h, lib/stdopen.c: New file. Imported from coreutils.
+ * lib/Makefile.tmpl: Add stdopen.h, stdopen.c
+ * po/POTFILES.in: Add rpmatch.c
+ * src/tar.c (confirm): Rewritten using rpmatch.
+ (decode_options): Minor optimizations
+ (main): Call stdopen() to ensure the first three descriptors are
+ open.
+
+ * tests/multiv01.at, tests/multiv02.at, tests/multiv03.at,
+ tests/multiv04.at, tests/sparsemv.at, tests/sparsemvp.at,
+ tests/star/multi-fail.at: Close stdin so that if something fails
+ causing tar to ask for the next volume, it won't hang the
+ testsuite.
+
+ * src/buffer.c (flush_write,flush_read): Change data type.
+ (flush_archive): Compute actual buffer fill level before calling
+ low level function.
+ (close_archive): Call flush_archive again if the first call
+ resulted in partially filled buffer.
+ (try_new_volume): Rewritten handling of initial headers.
+ (add_chunk_header): New function. Write an additional header
+ before the continuation chunk. The purpose of the header is to
+ allow third-party tars to extract the member.
+ (simple_flush_write): Take an argument.
+ (_gnu_flush_write): Correctly handle partially filled buffers.
+ * src/common.h (flush_read,flush_write): Functions, again.
+ (write_extended): Changed declaration
+ (xheader_format_name): New declaration
+ * src/create.c (write_extended): Change type and meaning of
+ the first argument. All callers updated
+ * src/xheader.c (xheader_format_name): Remove static
+ qualifier. Change last argument.
+ Correct buffer size calculation (allocated too much space).
+ (xheader_write): Increase global_header_count here ...
+ (xheader_write_global): ... instead of here
+
+ * tests/testsuite.at (AT_TAR_CHECK): Define TEST_TAR_FORMAT
+ * tests/multiv01.at: Update
+ * tests/multiv02.at: Update
+ * tests/multiv03.at: Update
+ * tests/sparsemvp.at: Update
+ * tests/star/multi-fail.at: Update
+
+ * scripts/tarcat: Handle archives in pax format. Improve handling
+ of traditional archives.
+ * doc/tar.texi (Tarcat): New node
+
+2005-11-10 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Fix splitting of sparse files between the volumes.
+
+ * src/buffer.c (try_new_volume): Bugfix. Always check
+ continued_file_name. If it is absent, the volume is out
+ of sync.
+ (add_multi_volume_header): Create GNU.volume.filename keyword in
+ the extended header.
+ * src/sparse.c (sparse_dump_region): Call mv_size_left.
+ (sparse_dump_file): Enclose the loop in mv_begin/mv_end.
+ * src/system.c: Do not pad compressed output if it goes to
+ stdout.
+ * src/xheader.c (xhdr_tab): New keyword GNU.volume.filename.
+
+ * tests/sparsemv.at: New testcase
+ * tests/sparsemvp.at: New testcase
+ * tests/Makefile.am: Add sparsemv.at and sparsemvp.at.
+ * tests/testsuite.at: Likewise.
+
+2005-11-09 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * src/buffer.c: Rewritten in a more modular fashion to provide
+ GNU extensions (multi-volume archives and archive labels) in
+ pax format.
+ NOTICE, that some of the aspects (e.g. splitting the archive
+ on the extended header boundary) are still not solved, others
+ (splitting a sparse file between the volume) require additional
+ testing. Wait for the next commit.
+
+ (volume_label,continued_file_name,continued_file_size)
+ (continued_file_offset): New globals.
+ (save_name,save_totsize,save_sizeleft): Make static
+ (mv_begin,mv_end,mv_total_size,mv_size_left): New functions
+ (open_archive,flush_write,flush_read): Rewritten
+
+ * src/common.h (save_name,save_sizeleft,save_totsize): Remove
+ globals.
+ (volume_label,continued_file_name,continued_file_size): New
+ variables.
+ (flush_read,flush_write): Pointers to functions
+ (mv_begin,mv_end,mv_total_size,mv_size_left): New functions
+ (write_extended): New function.
+
+ * src/compare.c, src/create.c, src/extract.c, src/incremen.c,
+ src/list.c: Use mv_.* functions uniformly instead of fiddling
+ with the global variables.
+ * src/sparse.c: Use mv_.* functions where necessary.
+ * src/tar.c (decode_options): Allow to use --multi-volume and
+ --label with pax archives.
+ * src/xheader.c (xhdr_tab): Support for new GNU keywords.
+
+ * tests/delete01.at, tests/delete02.at, tests/delete03.at,
+ tests/delete04.at, tests/delete05.at, tests/extrac01.at,
+ tests/extrac02.at, tests/extrac03.at, tests/extrac04.at,
+ tests/extrac05.at, tests/incr01.at, tests/incremental.at,
+ tests/listed01.at, tests/listed02.at, tests/long01.at,
+ tests/longv7.at, tests/multiv01.at, tests/multiv02.at,
+ tests/multiv03.at, tests/multiv04.at, tests/options.at,
+ tests/options02.at, tests/same-order01.at, tests/same-order02.at,
+ tests/sparse01.at, tests/sparse02.at, tests/sparse03.at,
+ tests/star/multi-fail.at (AT_KEYWORDS): Improve to allow execution
+ of related tests in groups.
+
+ * doc/tar.texi: Update
+
+2005-11-07 Paul Eggert <eggert@cs.ucla.edu>
+
+ * src/xheader.c (struct xhdr_tab.coder): Last arg is void const *,
+ not void *, to avoid create.c warning from GCC "passing argument 3
+ of 'xheader_store' discards qualifiers from pointer target type".
+ (dummy_coder, atime_coder, gid_coder, gname_coder, linkpath_coder):
+ (ctime_coder, mtime_coder, path_coder, size_coder, uid_coder):
+ (uname_coder, sparse_size_coder, sparse_numblocks_coder):
+ (sparse_offset_coder, sparse_numbytes_coder, dumpdir_coder):
+ (xheader_store): Likewise.
+ * src/common.h (xheader_store): Likewise.
+
+2005-11-07 Sergey Poznyakoff <gray@gnu.org.ua>
+ and Paul Eggert <eggert@cs.ucla.edu>
+
+ * src/tar.c (NS_PRECISION_FORMAT_MASK): New macro.
+ (tar_timespec_cmp): New function. Wrapper over
+ timespec_cmp using the timespec precision provided by the
+ current archive format.
+ * src/common.h (tar_timespec_cmp): New declaration.
+ * src/compare.c (diff_file): Use tar_timespec_cmp.
+ * src/extract.c (file_newer_p): Likewise.
+ * src/update.c (update_archive): Likewise.
+ * tests/truncate.at: Reverted changes
+ * tests/update.at: Reverted changes
+
+2005-11-07 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Support for incremental formats in pax archives.
+ Fixed POSIX compatibility of `sparse' extended header keywords.
+
+ * src/common.h (dumpdir_size,get_gnu_dumpdir)
+ (xheader_string_begin,xheader_string_add)
+ (xheader_string_end): New functions.
+ * src/create.c (dump_dir0): Handle incremental backups in pax
+ archives.
+ * src/incremen.c (dumpdir_size, get_gnu_dumpdir): New functions.
+ (purge_directory): Use stat_info.dumpdir instead of getting its
+ value explicitely.
+ * src/list.c (list_archive): Handle incremental backups in pax
+ format.
+ (decode_header): Initialize stat_info.dumpdir
+ * src/sparse.c (sparse_diff_file): Bugfix: set seekable.
+ (pax_dump_header): Store sparse map in GNU.sparse.map. If this
+ variable has been explicitely deleted, use GNU.sparse.offset/
+ GNU.sparse.numbytes variables.
+ * src/tar.c (decode_options): Incremental options are allowed with
+ --format=pax
+ (tar_stat_destroy): Free dumpdir
+ * src/tar.h (struct tar_stat_info.dumpdir): New member.
+ * src/xheader.c (xheader_keyword_deleted_p): Remove static
+ qualifier.
+ (struct xhdr_tab.decoder): Change prototype. POSIX allows string
+ values to contain embedded nulls, so take an extra argument
+ specifying the length of the string.
+ (decx,decg,dummy_decoder,atime_decoder,gid_decoder)
+ (gname_decoder,linkpath_decoder,ctime_decoder,mtime_decoder)
+ (path_decoder,size_decoder,uid_decoder,uname_decoder)
+ (sparse_size_decoder,sparse_numblocks_decoder)
+ (sparse_offset_decoder,sparse_numbytes_decoder): Likewise.
+ (decode_record): Pass value length to the handler
+ (run_override_list): Pass value length to the decoder
+ (xheader_print_n): New function
+ (xheader_print): Rewritten using xheader_print_n
+ (xheader_finish): Do not rely om strlen to compute the length of
+ the collected string: it can contain embedded nulls
+ (xheader_string_begin,xheader_string_add,xheader_string_end): New
+ functions.
+ (sparse_map_decoder,dumpdir_coder,dumpdir_decoder): New
+ functions. Handle GNU.sparse.map and GNU.dumpdir variables.
+ (xhdr_tab): Add new variables.
+
+ * tests/incr01.at: Test gnu, oldgnu, and posix formats
+ * tests/incremental.at: Likewise
+
+2005-11-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: Minor language and white space fixes.
+
+ * tests/truncate.at: Create files whose time stamps must fall on
+ 1-second boundaries. This prevents tests from failing on hosts
+ like Solaris 8 that have nanosecond-resolution file time stamps.
+ * tests/update.at: Likewise.
+
+ * src/xheader.c (strtoimax, strtoumax): Remove decls; now done
+ in system.h.
+
+2005-11-06 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * doc/tar.texi: Properly document incremental dumps
+ * doc/value.texi: Likewise.
+ * doc/snapshot.texi: Likewise.
+
+2005-11-05 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Improve listed incremental format:
+
+ * src/common.h (update_parent_directory): New prototype.
+ * src/create.c (dump_file): Call update_parent_directory.
+ * src/incremen.c (struct directory.mtime): New member.
+ (note_directory): Take additional arguments. All callers updated.
+ (scan_directory): Updated to use more metadata. In particular,
+ this allows to correctly detect renamed files.
+ (read_directory_file,write_directory_file)
+ (write_directory_file_entry): Support new directory file format.
+ * tests/listed01.at: Sleep 1 sec before creating second file.
+ * tests/listed02.at: Never skip the test. It should work on any
+ filesystem.
+
+ * doc/snapshot.texi: New file
+ * doc/tar.texi: Update.
+ * doc/Makefile.am: Update.
+
+2005-11-04 Paul Eggert <eggert@cs.ucla.edu>
+
+ * src/extract.c (set_stat): Rewrite to avoid bug in Forte
+ Developer 7 C 5.4 Patch 111708-09 (2004-02-19).
+
+2005-11-04 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * bootstrap: Fix quoting in help output.
+ (update_po): Use backward-compatible wget option --cache instead
+ of deprecated -C to accomodate for wget 1.10.
+ Changes proposed by Eric Blake
+ * THANKS: Add Eric Blake
+
+2005-11-02 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/tar.texi: Consistently put two spaces after sentences,
+ and put commas after "i.e." and "e.g.". This is the usual GNU
+ style in manuals.
+
+ * lib/.cvsignore: Add creat-safer.c, fcntl--.h, fcntl-safer.h,
+ open-safer.c, openat-die.c, verify.h, to accommodate recent gnulib
+ changes.
+
+2005-10-27 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * src/compare.c (diff_dumpdir): Pass a valid device number to
+ get_directory_contents.
+
+ * THANKS: Add John Thomas McDole
+
+ * bootstrap: If file `.bootstrap' exists in the cwd and is
+ readable, prepend its contents to the command line
+
+2005-10-21 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * tests/link01.at: Skip test if ln fails (suppose the OS does
+ not support hard links).
+
+2005-10-04 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * src/tar.c (decode_options): Report error if -A or -r is used
+ together with compression option.
+
+2005-09-29 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * doc/tar.texi: Use @option and @kbd consistently.
+ Document new options.
+
+2005-09-28 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * NEWS: Updated
+ * src/common.h (show_stored_names_option): New variable
+ * src/list.c (print_header): If show_stored_names_option is given,
+ list member names as stored in the archive. Patch proposed by Erik
+ Cumps <erik.cumps@icos.be>
+ * src/tar.c: Implement --show-stored-names option
+
+ * src/common.h (test_label_option): New variable;
+ * src/list.c (print_header): Special handling if test_label_option
+ is set.
+ * src/names.c (all_names_found): If test_label_option is set
+ return true.
+ * src/tar.c: New option --test-label tests the archive volume
+ label. The option proposed by Wouter Verhelst <wouter@nixsys.be>
+
+2005-09-21 Paul Eggert <eggert@cs.ucla.edu>
+
+ * tests/Makefile.am (clean-local): Don't attempt to run
+ $(TESTSUITE) if it doesn't exist. Problem reported by
+ Eric Blake.
+
+2005-09-16 Paul Eggert <eggert@cs.ucla.edu>
+
+ Don't filter time stamps through the resolution supported
+ by struct stat; keep them to full nanosecond resolution.
+ This affects behavior only on older hosts or file systems
+ that have lower-resolution time stamps.
+ * src/common.h (OLDER_STAT_TIME): Parenthesize arg.
+ (OLDER_TAR_STAT_TIME): New macro.
+ (code_timespec): New function.
+ (BILLION, LOG10_BILLION, TIMESPEC_STRSIZE_BOUND): New constants.
+ * src/compare.c (diff_file): Use full time stamp resolution.
+ * src/create.c (start_header, dump_file0): Likewise.
+ (start_header, dump_file0): Adjust to new structure layout.
+ (dump_regular_finish): Simplify by using timespec_cmp.
+ * src/extract.c (struct delayed_set_stat): Don't store stat info
+ that we don't need, to save space. All uses changed.
+ (struct delayed_set_stat, struct delayed_link, file_newer_p):
+ (create_placeholder_file, extract_link, apply_delayed_links):
+ Use full time stamp resolution.
+ (check_time): Use code_timespec rather than rolling our own code.
+ (set_stat, delay_set_stat): Arg now points to tar_stat_info to
+ avoid losing time information. All callers changed.
+ * src/list.c (read_and, decode_header, print_heaeder):
+ Use full time stamp resolution.
+ * src/misc.c (code_timespec): New function.
+ * src/tar.h (struct tar_stat_info): Record atime, mtime, ctime
+ separately, for benefit of hosts with lower resolution.
+ * src/update.c (update_archive): Use full time stamp resolution.
+ * src/xheader.c (code_time): Use new code_timespec function
+ to simplify code.
+ (atime_coder, atime_decoder, ctime_coder, ctime_decoder):
+ (mtime_coder, mtime_decoder): Use full time stamp resolution.
+
+ Report time stamps to full resolution in environment.
+ Report memory allocation failures rather than ignoring them.
+ * src/system.c (time_to_env): New function.
+ (oct_to_env, str_to_env, chr_to_env): Report memory allocation failures.
+ (stat_to_env): Report full resolution in time stamps.
+
+2005-09-16 Paul Eggert <eggert@cs.ucla.edu>
+
+ Merge changes from gnulib for file system sub-second time stamps.
+ * configure.ac: Remove checks for struct stat.st_spare1, struct
+ stat.st_atim.tv_nsec, struct stat.st_atimespec.tv_nsec, struct
+ stat.st_atimensec, as gnulib now does this for us.
+ Similarly for LIB_CLOCK_GETTIME.
+ * gnulib.modules: Add stat-time.
+ * lib/.cvsignore: Add stat-time.h.
+ * src/common.h: Include stat-time.h.
+ (timespec_lt): Remove. All callers changed to use timespec_cmp.
+ (get_stat_atime, get_stat_ctime, get_stat_mtime):
+ (set_stat_atime, set_stat_ctime, set_stat_mtime):
+ Remove; now defined by stat-time.h.
+
+2005-09-14 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * src/incremen.c (list_dumpdir): New function. Used to dump
+ contents of GNUTYPE_DUMPDIR blocks.
+ * src/common.h (list_dumpdir): Likewise.
+ * src/list.c (list_archive): Use list_dumpdir() to display
+ GNUTYPE_DUMPDIR blocks. Do that only if two or more -v options are
+ given.
+
+2005-09-12 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/.cvsignore: Adjust to current gnulib and modules used.
+ Add getdelim.c, getdelim.h, mbchar.c, mbchar.h, mbuiter.h, memchr.c,
+ pipe-safer.c, size_max.h, strdup.c, strdup.h, strnlen.h, strnlen1.c,
+ strnlen1.h, unistd--.h.
+ Remove getndelim2.c, getndelim2.h, pathmax.h, sysexits.h, xstrdup.c.
+
+ Treat fishy-looking hard links like fishy-looking symlinks.
+ * src/extract.c (struct delayed_set_stat): Rename after_symlinks
+ member to after_links. All uses changed.
+ (struct delayed_link): Renamed from struct delayed_symlink.
+ All uses changed. New member is_symlink.
+ (delayed_link_head): Renamed from delayed_symlink_head. All uses
+ changed.
+ (create_placeholder_file): New function, taken from extract_symlink.
+ (extract_link): Create placeholders for fishy-looking hard links.
+ (extract_symlink): Move code into create_placeholder_file.
+ (apply_delayed_links): Renamed from apply_delayed_symlinks.
+ All uses changed. Create both hard links and symlinks.
+
+2005-09-03 Paul Eggert <eggert@cs.ucla.edu>
+
+ * README-alpha: Modernize description of software required for
+ developers.
+
+2005-09-03 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * gnulib.modules: Add strdup
+ * src/incremen.c (purge_directory): Do not dereference symbolic
+ links. Bug reported by Ralph Corderoy <ralph@inputplus.co.uk> and
+ David Brown <davidb@davidb.org>
+ * tests/incr01.at: New test.
+ * tests/Makefile.am: Add incr01.at
+ * tests/testsuite.at: Likewise
+ * THANKS: Updated
+
+2005-08-17 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * src/incremen.c (read_directory_file): Use strtoumax to read
+ snapshot file contents.
+ (write_directory_file_entry): Use umaxtostr().
+
2005-07-31 Sergey Poznyakoff <gray@gnu.org.ua>
* src/create.c (file_dumpable_p,dump_file0): Fix handling of
- sparse files to /dev/null with --totals option.
+ sparse files to /dev/null with --totals option.
* tests/update.at: Remove dependency on file order.
2005-07-08 Sergey Poznyakoff <gray@Mirddin.farlep.net>
* tests/star/ustar-big-2g.at: Likewise
* tests/star/ustar-big-8g.at: Likewise
- * tests/sparse03.at: New test.
+ * tests/sparse03.at: New test.
* tests/Makefile.am: Add sparse03.at
* tests/testsuite.at: Likewise
* src/xheader.c (size_decoder): Do not set archive_file_size.
Fix bugs introduced yesterday:
-
+
* src/sparse.c (tar_sparse_init): Initialize
- dimped_size to 0.
+ dimped_size to 0.
(sparse_scan_file): Initialize archive_file_size to 0. The
variable keeps size of the file *as stored in the archive*, not
the size reported by stat.