diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2010-08-23 19:12:25 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2010-08-23 19:13:12 -0700 |
commit | 37ddfb0b7eb41cc3f58bce686d389b1e965e9ccf (patch) | |
tree | fec0020d41f4900c8a9811ca606f4b286e77f775 /tests/link04.at | |
parent | 09f039050e4c04f7344cdcaee15c817927de7c9c (diff) | |
download | tar-37ddfb0b7eb41cc3f58bce686d389b1e965e9ccf.tar.gz |
tar: handle files that occur multiple times but have link count 1
This patch was inspired by the following patch that addressed a
similar problem in GNU coreutils du:
http://git.savannah.gnu.org/gitweb/?p=coreutils.git;h=efe53cc72b599979ea292754ecfe8abf7c839d22
* src/common.h (name_count): New decl.
* src/create.c (trivial_link_count): New static var.
(create_archive): Initialize it.
(dump_hard_link, file_count_links): Use it, so that files with
link count 1 are handled correctly when they are found multiple times.
* src/names.c (allocated_entries): Renamed from allocated_names,
since the identifier's name was misleading. All uses changed.
(entries): Renamed from names. All uses changed.
(scanned): Renamed from name_index. All uses changed.
(name_count): New var.
(name_add_name): Increment it.
* tests/link04.at: New file.
* tests/testsuite.at: Add it.
* tests/Makefile.am (TESTSUITE_AT): Likewise.
Diffstat (limited to 'tests/link04.at')
-rw-r--r-- | tests/link04.at | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/tests/link04.at b/tests/link04.at new file mode 100644 index 00000000..a950476b --- /dev/null +++ b/tests/link04.at @@ -0,0 +1,58 @@ +# 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# written by Paul Eggert + +AT_SETUP([link count is 1 but multiple occurrences]) +AT_KEYWORDS([hardlinks link04]) + +AT_TAR_CHECK([ +mkdir dir +echo TEST > dir/file +ln -s file dir/symlink || AT_SKIP_TEST + +tar cf archive dir dir +tar tvf archive | sed ' + s,.*[[0-9]] dir/,dir/, +' | sort + +echo == + +tar chf archive dir +tar tvf archive | sed ' + s,.*[[0-9]] dir/,dir/, + s,file,FOO,g + s,symlink,FOO,g +' | sort +], +[0], +[dir/ +dir/ +dir/file +dir/file link to dir/file +dir/symlink -> file +dir/symlink link to dir/symlink +== +dir/ +dir/FOO +dir/FOO link to dir/FOO +]) + +AT_CLEANUP |