extern int dry_run;
extern int am_server;
extern int relative_paths;
+extern int keep_dirlinks;
extern int preserve_hard_links;
extern int preserve_perms;
extern int cvs_exclude;
extern int ignore_errors;
extern int orig_umask;
extern int keep_partial;
+extern int checksum_seed;
static void delete_one(char *fn, int is_dir)
{
}
} else {
if (do_rmdir(fn) != 0) {
+ if (errno == ENOTDIR && keep_dirlinks) {
+ delete_one(fn, 0);
+ return;
+ }
if (errno != ENOTEMPTY && errno != EEXIST) {
rsyserr(FERROR, errno,
"delete_one: rmdir %s failed",
read_sum_head(f_in, &sum);
- sum_init();
+ sum_init(checksum_seed);
while ((i = recv_token(f_in, &data)) != 0) {
if (do_progress)
char *fnamecmp;
char fnamecmpbuf[MAXPATHLEN];
struct map_struct *mapbuf;
- int i;
struct file_struct *file;
- int phase=0;
- int recv_ok;
struct stats initial_stats;
+ int save_make_backups = make_backups;
+ int i, recv_ok, phase = 0;
if (verbose > 2) {
rprintf(FINFO,"recv_files(%d) starting\n",flist->count);
i = read_int(f_in);
if (i == -1) {
- if (phase == 0) {
- phase++;
- csum_length = SUM_LENGTH;
- if (verbose > 2)
- rprintf(FINFO,"recv_files phase=%d\n",phase);
- send_msg(MSG_DONE, "", 0);
- continue;
- }
- break;
+ if (phase)
+ break;
+ phase = 1;
+ csum_length = SUM_LENGTH;
+ if (verbose > 2)
+ rprintf(FINFO, "recv_files phase=%d\n", phase);
+ send_msg(MSG_DONE, "", 0);
+ if (keep_partial)
+ make_backups = 0; /* prevents double backup */
+ continue;
}
if (i < 0 || i >= flist->count) {
}
}
}
+ make_backups = save_make_backups;
if (delete_after && recurse && delete_mode && !local_name
&& flist->count > 0)