static bool
dump_hard_link (struct tar_stat_info *st)
{
- if (link_table && st->stat.st_nlink > 1)
+ if (link_table && (st->stat.st_nlink > 1 || remove_files_option))
{
struct link lp;
struct link *duplicate;
{
if (lp->nlink)
{
- WARN ((0, 0, _("Missing links to %s.\n"), quote (lp->name)));
+ WARN ((0, 0, _("Missing links to %s."), quote (lp->name)));
}
}
}
indexfile.at\
ignfail.at\
link01.at\
+ link02.at\
+ link03.at\
listed01.at\
listed02.at\
long01.at\
# Process this file with autom4te to create testsuite. -*- Autotest -*-
# Test suite for GNU tar.
-# Copyright (C) 2004, 2007 Free Software Foundation, Inc.
+# Copyright (C) 2004, 2007, 2009 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
# http://lists.gnu.org/archive/html/bug-tar/2004-07/msg00009.html
AT_SETUP([link count gt 2])
-AT_KEYWORDS([link01])
+AT_KEYWORDS([hardlinks link01])
AT_TAR_CHECK([
mkdir directory
--- /dev/null
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+
+# Test suite for GNU tar.
+# Copyright (C) 2009 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# Tar 1.22 failed to recognize last hard link when creating an archive with
+# the --remove-files option.
+#
+# Reported by: "Theodore Y. Ts'o" <tytso@mit.edu>,
+# Carl Worth <cworth@cworth.org>
+# References:
+# <E194EAe-0001lE-00@think.thunk.org>
+# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=188663
+# <1248955024.1545.1.camel@yoom.home.cworth.org>
+# http://lists.gnu.org/archive/html/bug-tar/2009-07/msg00015.html
+
+AT_SETUP([preserve hard links with --remove-files])
+AT_KEYWORDS([hardlinks link02])
+
+AT_TAR_CHECK([
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
+tar -c -f archive --remove-files file1 file2 file3 file4
+tar tfv archive | sed -n 's/.*file[[2-4]] link to //p'
+],
+[0],
+[file1
+file1
+file1
+])
+
+AT_CLEANUP
+
+# End of link02.at
+
--- /dev/null
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+
+# Test suite for GNU tar.
+# Copyright (C) 2009 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# Make sure -l option works correctly in conjunction with --remove-files
+# See also link02.at
+
+AT_SETUP([working -l with --remove-files])
+AT_KEYWORDS([hardlinks link03])
+
+m4_define([create_files],[
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
+])
+
+AT_TAR_CHECK([
+create_files
+echo archive.1
+tar -c -f archive.1 -l --remove-files file1 file2 file3 file4
+create_files
+echo archive.2
+tar -c -f archive.2 -l --remove-files file1 file2 file3
+echo testing archive.2
+tar tfv archive.2 | sed -n 's/.*file[[2-3]] link to //p'
+],
+[0],
+[archive.1
+archive.2
+testing archive.2
+file1
+file1
+],
+[tar: Missing links to `file1'.
+])
+
+AT_CLEANUP
+
+
m4_include([ignfail.at])
m4_include([link01.at])
+m4_include([link02.at])
+m4_include([link03.at])
m4_include([longv7.at])
m4_include([long01.at])