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:
@@ -59,25 +59,28 @@ check-format:
|
||||
fi
|
||||
|
||||
check-options:
|
||||
@ARGP_HELP_FMT='usage-indent=0,short-opt-col=0,long-opt-col=0,\
|
||||
doc-opt-col=0,opt-doc-col=0,header-col=0,rmargin=1' \
|
||||
@ARGP_HELP_FMT='usage-indent=0,short-opt-col=0,long-opt-col=0,doc-opt-col=0,opt-doc-col=0,header-col=0,rmargin=1' \
|
||||
$(top_builddir)/src/tar --usage | \
|
||||
sed -n 's/^\[--\([^]\=\[]*\).*/\1/p' | sort | uniq > opts.$$$$;\
|
||||
$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -E - \
|
||||
$(info_TEXINFOS) | \
|
||||
sed -n '/^@macro/,/^@end macro/d;s/@opindex *\([^@,]*\).*/\1/p' \
|
||||
| sort | uniq > docs.$$$$;\
|
||||
(echo 'Not documented options:';\
|
||||
join -v1 opts.$$$$ docs.$$$$;\
|
||||
echo 'Non-existing options:';\
|
||||
join -v2 opts.$$$$ docs.$$$$) > report.$$$$;\
|
||||
rm opts.$$$$ docs.$$$$;\
|
||||
if [ -n "`sed '1,2d' report.$$$$`" ]; then \
|
||||
cat report.$$$$;\
|
||||
rm report.$$$$;\
|
||||
exit 1;\
|
||||
fi;\
|
||||
rm report.$$$$
|
||||
status=0;\
|
||||
join -v1 opts.$$$$ docs.$$$$ > report.$$$$;\
|
||||
if test -s report.$$$$; then \
|
||||
echo 'Not documented options:'; \
|
||||
cat report.$$$$; \
|
||||
status=1; \
|
||||
fi; \
|
||||
join -v2 opts.$$$$ docs.$$$$ > report.$$$$;\
|
||||
if test -s report.$$$$; then \
|
||||
echo 'Non-existing options:';\
|
||||
cat report.$$$$; \
|
||||
status=1; \
|
||||
fi; \
|
||||
rm opts.$$$$ docs.$$$$ report.$$$$;\
|
||||
test $$status -ne 0 && exit $$status
|
||||
|
||||
check-refs:
|
||||
@for file in $(info_TEXINFOS) $(tar_TEXINFOS); \
|
||||
|
||||
Reference in New Issue
Block a user