Fixed the use of a dot-dir path (foo/./bar) inside of a files-from file.

This commit is contained in:
Wayne Davison
2008-11-09 21:37:04 -08:00
parent 9411292489
commit 3ce3cabe34
2 changed files with 33 additions and 3 deletions

View File

@@ -2008,9 +2008,6 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
start_write = stats.total_written;
gettimeofday(&start_tv, NULL);
if (!orig_dir)
orig_dir = strdup(curr_dir);
if (relative_paths && protocol_version >= 30)
implied_dirs = 1; /* We send flagged implied dirs */
@@ -2036,6 +2033,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
use_ff_fd = 1;
}
if (!orig_dir)
orig_dir = strdup(curr_dir);
while (1) {
char fbuf[MAXPATHLEN], *fn, name_type;

30
testsuite/files-from.test Normal file
View File

@@ -0,0 +1,30 @@
#!/bin/sh
# Copyright (C) 2008 by Wayne Davison <wayned@samba.org>
# This program is distributable under the terms of the GNU GPL (see
# COPYING).
# Test that --files-from=FILE works right.
. "$suitedir/rsync.fns"
hands_setup
# This list of files skips the contents of "subsubdir" but includes
# the contents of "subsubdir2" due to its trailing slash.
cat >"$scratchdir/filelist" <<EOT
from/./
from/./dir/subdir
from/./dir/subdir/subsubdir
from/./dir/subdir/subsubdir2/
from/./dir/subdir/foobar.baz
EOT
# Create a chkdir without the content that we expect to be omitted.
$RSYNC -a --exclude=dir/text --exclude='subsubdir/**' "$fromdir/" "$chkdir/"
checkit "$RSYNC -av --files-from='$scratchdir/filelist' '$scratchdir' '$todir/'" "$chkdir" "$todir"
# The script would have aborted on error, so getting here means we've won.
exit 0