Previously the '--checkpoint-action=echo' was triggered after '--checkpoint-action=sleep=1' - so the order of events *usually* was (for --format='gnu'): ... 1. checkpoint handler before write of 'dir/sub' member 2. one-second delay 3. stderr write: 'tar: Write checkpoint 3' 4. write the member 'dir/sub' into the archive 5. check that the member's ctime has not been changed 6. genfile's detecting 'Write checkpoint', doing unlink ... But sometimes, the genfile was fast enough to win the race and unlinked the directory before the member was written into the archive (IOW, the order was 1-2-3-6-4-5). This led to the occasional warning 'tar: dir/sub: file changed as we read it'. Swap the order of 'sleep=1' and 'echo' actions so the genfile utility has (hopefully) enough time to do the unlink before writing the file into the archive (enforce 1-2-3-6-4-5 order). * tests/dirrem01.at: Swap 'sleep=1' and 'echo' actions. * tests/dirrem02.at: Likewise.
64 lines
2.0 KiB
Plaintext
64 lines
2.0 KiB
Plaintext
# Process this file with autom4te to create testsuite. -*- Autotest -*-
|
|
|
|
# Test suite for GNU tar.
|
|
# Copyright 2017 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:
|
|
#
|
|
# When a directory in a deep directory disappeared during creation
|
|
# of incremental dump, tar <= 1.29 exits with TAREXIT_FAILURE (2).
|
|
#
|
|
# In case of files tar does not return TAREXIT_FAILURE, but instead
|
|
# it prints a warning and exits with TAREXIT_DIFFERS.
|
|
#
|
|
# This test checks whether this behaviour is mimicked for directories, too.
|
|
|
|
# Remark: This file is based on 'filerem01.at', which is the test-case for
|
|
# a vanishing file.
|
|
|
|
AT_SETUP([directory removed before reading])
|
|
AT_KEYWORDS([create incremental listed dirchange dirrem dirrem01])
|
|
|
|
AT_TAR_CHECK([
|
|
mkdir dir
|
|
mkdir dir/sub
|
|
genfile --file dir/file1
|
|
genfile --file dir/sub/file2
|
|
|
|
case "$TEST_TAR_FORMAT" in
|
|
posix) CPT=5;;
|
|
gnu) CPT=3;;
|
|
*) AT_SKIP_TEST
|
|
esac
|
|
|
|
genfile --run --checkpoint=$CPT --unlink dir/sub/file2 --unlink dir/sub -- \
|
|
tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='echo' \
|
|
--checkpoint-action='sleep=1' -c -f archive.tar \
|
|
--listed-incremental db -v dir >/dev/null
|
|
],
|
|
[1],
|
|
[ignore],
|
|
[tar: dir: Directory is new
|
|
tar: dir/sub: Directory is new
|
|
tar: dir/sub: file changed as we read it
|
|
tar: dir/sub: File removed before we read it
|
|
],[],[],[gnu,posix])
|
|
|
|
AT_CLEANUP
|
|
|