extern int am_server;
extern int am_daemon;
extern int do_progress;
-extern int recurse;
extern int relative_paths;
extern int implied_dirs;
extern int keep_dirlinks;
extern int delete_after;
extern int module_id;
extern int ignore_errors;
-extern int remove_sent_files;
+extern int remove_source_files;
extern int delay_updates;
extern int update_only;
extern int ignore_existing;
STRUCT_STAT st;
int j;
- if (dry_run > 1 /* destination doesn't exist yet */
- || list_only)
+ /* dry_run is incremented when the destination doesn't exist yet. */
+ if (dry_run > 1 || list_only)
return;
for (j = 0; j < flist->count; j++) {
fuzzy_dirlist = NULL;
}
if (missing_below >= 0) {
- dry_run--;
+ if (dry_run)
+ dry_run--;
missing_below = -1;
}
parent_dirname = "";
}
}
- if (missing_below >= 0 && file->dir.depth <= missing_below) {
- dry_run--;
- missing_below = -1;
+ if (missing_below >= 0) {
+ if (file->dir.depth <= missing_below) {
+ if (dry_run)
+ dry_run--;
+ missing_below = -1;
+ } else if (!dry_run)
+ return;
}
if (dry_run > 1) {
statret = -1;
rsyserr(FERROR, errno,
"recv_generator: mkdir %s failed",
full_fname(fname));
+ file->flags |= FLAG_MISSING;
+ if (ndx+1 < the_file_list->count
+ && the_file_list->files[ndx+1]->dir.depth > file->dir.depth) {
+ rprintf(FERROR,
+ "*** Skipping everything below this failed directory ***\n");
+ missing_below = file->dir.depth;
+ }
+ return;
}
}
if (set_file_attrs(fname, file, statret ? NULL : &st, 0)
itemizing,
code);
}
+ if (remove_source_files == 1)
+ goto return_with_success;
return;
}
}
rprintf(code, "%s -> %s\n", fname,
file->u.link);
}
- if (remove_sent_files && !dry_run) {
- char numbuf[4];
- SIVAL(numbuf, 0, ndx);
- send_msg(MSG_SUCCESS, numbuf, 4);
- }
if (preserve_hard_links && file->link_u.links)
hard_link_cluster(file, ndx, itemizing, code);
+ if (remove_source_files)
+ goto return_with_success;
}
#endif
return;
hard_link_cluster(file, ndx,
itemizing, code);
}
+ if (remove_source_files == 1)
+ goto return_with_success;
}
} else {
if (itemizing)
set_file_attrs(fname, file, &st, maybe_ATTRS_REPORT);
if (preserve_hard_links && file->link_u.links)
hard_link_cluster(file, ndx, itemizing, code);
+ if (remove_source_files == 1)
+ goto return_with_success;
}
return;
}
if (statret != 0 && basis_dir[0] != NULL) {
int j = try_dests_reg(file, fname, ndx, fnamecmpbuf, &st,
itemizing, maybe_ATTRS_REPORT, code);
- if (j == -2)
+ if (j == -2) {
+ if (remove_source_files == 1)
+ goto return_with_success;
return;
+ }
if (j != -1) {
fnamecmp = fnamecmpbuf;
fnamecmp_type = j;
set_file_attrs(fname, file, &st, maybe_ATTRS_REPORT);
if (preserve_hard_links && file->link_u.links)
hard_link_cluster(file, ndx, itemizing, code);
+ if (remove_source_files != 1)
+ return;
+ return_with_success:
+ if (!dry_run) {
+ char numbuf[4];
+ SIVAL(numbuf, 0, ndx);
+ send_msg(MSG_SUCCESS, numbuf, 4);
+ }
return;
}
rprintf(FINFO, "generating and sending sums for %d\n", ndx);
notify_others:
- if (remove_sent_files && !delay_updates && !phase)
- increment_active_files(ndx, itemizing, code);
+ if (remove_source_files && !delay_updates && !phase)
+ increment_active_files(ndx, itemizing, code);
write_int(f_out, ndx);
if (itemizing) {
int iflags = ITEM_TRANSFER;
continue;
if (!need_retouch_dir_times && file->mode & S_IWUSR)
continue;
+ if (file->flags & FLAG_MISSING) {
+ int missing = file->dir.depth;
+ while (++i < flist->count) {
+ file = flist->files[i];
+ if (file->dir.depth <= missing)
+ break;
+ }
+ i--;
+ continue;
+ }
recv_generator(f_name(file, NULL), file, i, itemizing,
maybe_ATTRS_REPORT, code, -1);
if (allowed_lull && !(++j % lull_mod))