123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- # Process this file with autom4te to create testsuite. -*- Autotest -*-
- # Test suite for GNU tar.
- # Copyright 2005-2023 Free Software Foundation, Inc.
- # This file is part of GNU tar.
- # GNU tar is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 3 of the License, or
- # (at your option) any later version.
- # GNU tar is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- # You should have received a copy of the GNU General Public License
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
- # Description:
- # Restoring of directory modes and timestamps works correctly only
- # if the archive has normal member ordering, i.e. each directory
- # member is immediately followed by members located under that directory.
- # This is not true for incremental archives, where directory members
- # precede the non-directory ones. Due to this, GNU tar up to version 1.15.2
- # failed to correctly restore directory timestamps from an incremental
- # archive if this directory contained some files in it.
- #
- # References: <[email protected]>
- AT_SETUP([restoring timestamps from incremental])
- AT_KEYWORDS([incremental timestamp restore incr02])
- AT_TAR_CHECK([
- AT_CHECK_TIMESTAMP
- # Create directory structure
- mkdir dir
- mkdir dir/subdir1
- mkdir dir/subdir2
- genfile --length 10 --file dir/subdir1/file
- # Save mtime for later comparison
- genfile --stat=mtime dir/subdir1 > ts
- # Create an archive. Using incremental mode makes sure the
- # archive will have a directory-first member ordering,
- # i.e.:
- # dir/
- # dir/subdir1/
- # dir/subdir2/
- # dir/subdir1/foofile
- #
- # When restoring from this directory structure, 'dir/subdir2/' used to
- # trigger apply_nonancestor_delayed_set_stat() which restored stats for
- # 'subdir1' prior to restoring 'dir/subdir1/foofile'. Then, restoring the
- # latter clobbered the directory timestamp.
- tar -cf archive -g db dir
- # Move away the directory
- mv dir orig
- # Wait enough time for timestamps to differ in case of failure.
- sleep 5
- # Restore the directory
- tar -xf archive dir
- # Check the timestamp
- genfile --stat=mtime dir/subdir1 | diff ts -
- ],
- [0],
- [],[],[],[],[gnu, oldgnu, posix])
- AT_CLEANUP
- # End of incr02.at
|