Optimize searches for directory structures by keeping a pointer to struct directory in struct name.
* src/common.h (struct name): New member `directory' replaces dir_contents. Rearrange members. (rebase_directory): Change signature. (scan_directory): Change signature. (name_fill_directory) (directory_contents, safe_directory_contents): New prototypes. (append_incremental_renames): Change signature. (replace_prefix): New proto. * src/compare.c (diff_dumpdir): Use directory_contents + scan_directory. * src/create.c * src/incremen.c (replace_prefix): Move to misc.c (rebase_directory): Rewrite. (scan_directory): Return pointer to struct directory. (directory_contents, safe_directory_contents): New functions. (get_directory_contents): Remove. (name_fill_directory): New function. (append_incremental_renames): Rewrite. This also fixes a memory leak. * src/names.c (name_gather, addname): Reflect changes in struct name. (add_hierarchy_to_namelist): Rewrite using name_fill_directory and directory_contents. (rebase_child_list): Update call to rebase_directory. (collect_and_sort_names): Optimize * src/misc.c (replace_prefix): New function. * src/names.c (add_hierarchy_to_namelist): Use new get_directory_contents. * tests/incr05.at: New test case. * tests/incr06.at: New test case. * tests/Makefile.am, test/testsuite.at: Add incr05.at and incr06.at. * doc/Makefile.am (check-options): Improve rule. * doc/tar.texi, NEWS: Update.
This commit is contained in:
@@ -76,6 +76,8 @@ TESTSUITE_AT = \
|
||||
incr02.at\
|
||||
incr03.at\
|
||||
incr04.at\
|
||||
incr05.at\
|
||||
incr06.at\
|
||||
indexfile.at\
|
||||
ignfail.at\
|
||||
link01.at\
|
||||
|
||||
49
tests/incr05.at
Normal file
49
tests/incr05.at
Normal file
@@ -0,0 +1,49 @@
|
||||
# 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, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
AT_SETUP([incremental dumps with -C])
|
||||
AT_KEYWORDS([incremental incr05])
|
||||
|
||||
AT_TAR_CHECK([
|
||||
mkdir dir
|
||||
mkdir dir/sub
|
||||
genfile --file dir/file1
|
||||
genfile --file dir/sub/file2
|
||||
|
||||
dbfile=`pwd`/db
|
||||
|
||||
echo Level 0
|
||||
tar -c -f archive.tar -g $dbfile -C dir -v --warning=no-new-dir .
|
||||
|
||||
genfile --file dir/file3
|
||||
echo Level 1
|
||||
tar -c -f archive.tar -g $dbfile -C dir -v --warning=no-new-dir .
|
||||
],
|
||||
[0],
|
||||
[Level 0
|
||||
./
|
||||
./sub/
|
||||
./file1
|
||||
./sub/file2
|
||||
Level 1
|
||||
./
|
||||
./sub/
|
||||
./file3
|
||||
],[],[],[],[gnu, oldgnu, posix])
|
||||
|
||||
AT_CLEANUP
|
||||
81
tests/incr06.at
Normal file
81
tests/incr06.at
Normal file
@@ -0,0 +1,81 @@
|
||||
# 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, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
AT_SETUP([incremental dumps of nested directories])
|
||||
AT_KEYWORDS([incremental incr06])
|
||||
|
||||
AT_TAR_CHECK([
|
||||
mkdir dir
|
||||
mkdir dir/sub
|
||||
mkdir dir/sub/a
|
||||
mkdir dir/sub/b
|
||||
genfile --file dir/file1
|
||||
genfile --file dir/sub/file2
|
||||
genfile --file dir/sub/a/file3
|
||||
|
||||
dbfile=`pwd`/db
|
||||
|
||||
echo Level 0 . sub
|
||||
tar -c -f archive-0.1.tar -g $dbfile.1 -C dir -v --warning=no-new-dir . sub
|
||||
echo Level 0 sub .
|
||||
tar -c -f archive-0.2.tar -g $dbfile.2 -C dir -v --warning=no-new-dir sub .
|
||||
|
||||
mkdir dir/c
|
||||
genfile --file dir/sub/b/file4
|
||||
|
||||
echo Level 1 . sub
|
||||
tar -c -f archive-1.1.tar -g $dbfile.1 -C dir -v --warning=no-new-dir . sub
|
||||
echo Level 1 sub .
|
||||
tar -c -f archive-1.2.tar -g $dbfile.2 -C dir -v --warning=no-new-dir sub .
|
||||
],
|
||||
[0],
|
||||
[Level 0 . sub
|
||||
./
|
||||
sub/
|
||||
sub/a/
|
||||
sub/b/
|
||||
./file1
|
||||
sub/file2
|
||||
sub/a/file3
|
||||
Level 0 sub .
|
||||
./
|
||||
sub/
|
||||
sub/a/
|
||||
sub/b/
|
||||
./file1
|
||||
sub/file2
|
||||
sub/a/file3
|
||||
Level 1 . sub
|
||||
./
|
||||
./c/
|
||||
sub/
|
||||
sub/a/
|
||||
sub/b/
|
||||
sub/b/file4
|
||||
Level 1 sub .
|
||||
./
|
||||
./c/
|
||||
sub/
|
||||
sub/a/
|
||||
sub/b/
|
||||
sub/b/file4
|
||||
],[],[],[],[gnu, oldgnu, posix])
|
||||
|
||||
AT_CLEANUP
|
||||
|
||||
|
||||
@@ -152,6 +152,8 @@ m4_include([listed01.at])
|
||||
m4_include([listed02.at])
|
||||
m4_include([incr03.at])
|
||||
m4_include([incr04.at])
|
||||
m4_include([incr05.at])
|
||||
m4_include([incr06.at])
|
||||
m4_include([rename01.at])
|
||||
m4_include([rename02.at])
|
||||
m4_include([rename03.at])
|
||||
|
||||
Reference in New Issue
Block a user