Fix creation of incremental archives when a subdirectory becomes a mountpoint.

When used with --listed-incrfental and --one-file-system, tar
was unable to cope with directories that had once been part of the
dumped system and became separate mount points afterwards.  The bug
has been reported and a fix proposed by Nathan Stratton Treadway.

* src/incremen.c (procdir): If one_file_system_option is in effect,
clear out dumpdir info from the directory.
* tests/Makefile.am: Add new testcase.
* tests/listed05.at: New testcase.
* tests/testsuite.at (AT_PRIVILEGED_PREREQ): New macro.
include listed05.at.
* THANKS: Update.
This commit is contained in:
Sergey Poznyakoff
2012-11-14 09:09:47 +02:00
parent 099f71f78d
commit 643a8844a5
5 changed files with 112 additions and 11 deletions
+1
View File
@@ -114,6 +114,7 @@ TESTSUITE_AT = \
listed02.at\
listed03.at\
listed04.at\
listed05.at\
long01.at\
longv7.at\
lustar01.at\
+76
View File
@@ -0,0 +1,76 @@
# Process this file with autom4te to create testsuite. -*- Autotest -*-
#
# Test suite for GNU tar.
# Copyright (C) 2010 Free Software Foundation, Inc.
#
# This program 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, or (at your option)
# any later version.
#
# This program 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/>.
# Tar up to 1.26 was unable to cope with directories that had once
# been part of the dumped system and became separate mount points
# afterwards. The bug has been reported by Nathan Stratton Treadway,
# who also proposed a fix and a testcase, on which the present one is
# built.
# Reported-by: Nathan Stratton Treadway <nathanst+bugtar@ontko.com>
# Last-Affected-Version: 1.26
# References: <20120527212417.GR2654@shire.ontko.com>
# http://lists.gnu.org/archive/html/bug-tar/2012-05/msg00022.html
# This testcase is Linux-specific and requires root privileges.
AT_SETUP([--listed-incremental and remounted directories])
AT_KEYWORDS([listed incremental listed05])
AT_TAR_CHECK([
AT_PRIVILEGED_PREREQ
options="-C tartest --create --one-file-system --verbose"
rm -rf archive-[01].snar archive-[01].tar tartest subdir
# Create initial structure
mkdir tartest
echo "hi" > tartest/top-level-file
mkdir tartest/subdir
echo "hi" > tartest/subdir/subdir-file
echo "# Level 0"
tar $options --file archive-0.tar --listed-incremental=archive-0.snar .
echo "# Remount"
mv tartest/subdir .
mkdir tartest/subdir
mount -t ramfs none tartest/subdir || AT_SKIP_TEST
tar -C subdir -c -f - . | tar -C tartest/subdir -x -f -
echo "# Level 1"
cp archive-0.snar archive-1.snar
tar $options --file archive-1.tar --listed-incremental=archive-1.snar .
umount tartest/subdir
],
[0],
[# Level 0
./
./subdir/
./top-level-file
./subdir/subdir-file
# Remount
# Level 1
./
./subdir/
],
[tar: .: Directory is new
tar: ./subdir: Directory is new
tar: ./subdir: directory is on a different filesystem; not dumped
],[],[],[gnu])
AT_CLEANUP
+11
View File
@@ -103,6 +103,16 @@ rm -f $[]$
test $result -eq 0 && AT_SKIP_TEST
])
dnl AT_PRIVILEGED_PREREQ - Skip test if not running at root privileges
m4_define([AT_PRIVILEGED_PREREQ],[
echo "test" > $[]$
chmod 0 $[]$
cat $[]$ > /dev/null 2>&1
result=$?
rm -f $[]$
test $result -eq 0 || AT_SKIP_TEST
])
m4_define([AT_TAR_MKHIER],[
install-sh -d $1 >/dev/null dnl
m4_if([$2],,,&& genfile --file [$1]/[$2]) || AT_SKIP_TEST])
@@ -186,6 +196,7 @@ m4_include([listed01.at])
m4_include([listed02.at])
m4_include([listed03.at])
m4_include([listed04.at])
m4_include([listed05.at])
m4_include([incr03.at])
m4_include([incr04.at])
m4_include([incr05.at])