summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2008-11-09 21:37:04 -0800
committerWayne Davison <wayned@samba.org>2008-11-09 21:39:08 -0800
commitb8a1fd6404054c8cea348e445d666050520e899b (patch)
tree24892507bb09c9ad7599bf3330f385e76addaa6f
parent3082dffbe25505db86d16a938f92b77c84ffb1fd (diff)
downloadrsync-b8a1fd6404054c8cea348e445d666050520e899b.tar.gz
Fixed the use of a dot-dir path (foo/./bar) inside of a files-from file.
-rw-r--r--flist.c6
-rw-r--r--testsuite/files-from.test30
2 files changed, 33 insertions, 3 deletions
diff --git a/flist.c b/flist.c
index 35efc8b1..6d39196d 100644
--- a/flist.c
+++ b/flist.c
@@ -1962,9 +1962,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 */
@@ -1990,6 +1987,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;
diff --git a/testsuite/files-from.test b/testsuite/files-from.test
new file mode 100644
index 00000000..ea202025
--- /dev/null
+++ b/testsuite/files-from.test
@@ -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