int64 start_write;
int future_cnt, save_io_error = io_error;
- if (send_dir_ndx < 0)
+ if (flist_eof)
return;
/* Keep sending data until we have the requested number of
&& (len == 1 || fbuf[len-2] == '/');
}
- if (link_stat(fbuf, &st, copy_dirlinks) != 0) {
- io_error |= IOERR_GENERAL;
- rsyserr(FERROR, errno, "link_stat %s failed",
- full_fname(fbuf));
- continue;
- }
-
- if (S_ISDIR(st.st_mode) && !xfer_dirs) {
- rprintf(FINFO, "skipping directory %s\n", fbuf);
- continue;
- }
-
dir = NULL;
if (!relative_paths) {
if (fn != fbuf)
memmove(fbuf, fn, len + 1);
+ if (link_stat(fbuf, &st, copy_dirlinks) != 0) {
+ io_error |= IOERR_GENERAL;
+ rsyserr(FERROR, errno, "link_stat %s failed",
+ full_fname(fbuf));
+ continue;
+ }
+
+ if (S_ISDIR(st.st_mode) && !xfer_dirs) {
+ rprintf(FINFO, "skipping directory %s\n", fbuf);
+ continue;
+ }
+
if (implied_dirs && (p=strrchr(fbuf,'/')) && p != fbuf) {
/* Send the implied directories at the start of the
* source spec, so we get their permissions right. */
if (inc_recurse) {
add_dirs_to_tree(-1, 0, dir_flist->count - 1);
- if (file_total == 1) {
+ if (send_dir_ndx < 0) {
+ write_ndx(f, NDX_FLIST_EOF);
+ flist_eof = 1;
+ }
+ else if (file_total == 1) {
/* If we're creating incremental file-lists and there
* was just 1 item in the first file-list, send 1 more
* file-list to check if this is a 1-file xfer. */
- if (send_dir_ndx < 0)
- write_ndx(f, NDX_DONE);
- else
- send_extra_file_list(f, 1);
+ send_extra_file_list(f, 1);
}
}
{
struct file_list *flist;
int ndx = read_ndx(f);
- if (ndx == NDX_DONE) {
+ if (ndx == NDX_FLIST_EOF) {
flist_eof = 1;
change_local_filter_dir(NULL, 0, 0);
} else {
chgrp 5002 "$name1" || test_skipped "Can't chgrp (probably need root)"
chgrp 5003 "$name2" || test_skipped "Can't chgrp (probably need root)"
-checkit "$RSYNC -aHvv \"$fromdir/\" \"$todir/\"" "$fromdir" "$todir"
+# This makes sure that multi-file, non-dir, relative transfers work.
+cd "$fromdir/.."
+checkit "$RSYNC -aHvv from/* to/" "$fromdir" "$todir"
# The script would have aborted on error, so getting here means we've won.
exit 0