summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 cb667aa1..19936cab 100644
--- a/flist.c
+++ b/flist.c
@@ -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;
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