X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/b225b089b8e7ec1fbed235ba743a2cbd2b540c30..87a57a3072c0fe742b154bd62869cc08c65625bb:/generator.c diff --git a/generator.c b/generator.c index deefff4e..c0613863 100644 --- a/generator.c +++ b/generator.c @@ -59,8 +59,8 @@ extern int csum_length; extern int ignore_times; extern int size_only; extern OFF_T max_size; -extern int io_timeout; extern int io_error; +extern int allowed_lull; extern int sock_f_out; extern int ignore_timeout; extern int protocol_version; @@ -89,8 +89,6 @@ extern int backup_suffix_len; extern struct file_list *the_file_list; extern struct filter_list_struct server_filter_list; -int allowed_lull = 0; - static int deletion_count = 0; /* used to implement --max-delete */ @@ -152,7 +150,7 @@ static int delete_item(char *fname, int mode, int flags) deletion_count--; return 0; } - if (!zap_dir || (errno != ENOTEMPTY && errno != EEXIST)) { + if (!zap_dir) { rsyserr(FERROR, errno, "delete_file: rmdir %s failed", full_fname(fname)); return -1; @@ -171,10 +169,7 @@ static int delete_item(char *fname, int mode, int flags) continue; f_name_to(fp, buf); - if (delete_item(buf, fp->mode, flags & ~DEL_TERSE) != 0) { - flist_free(dirlist); - return -1; - } + delete_item(buf, fp->mode, flags & ~DEL_TERSE); } flist_free(dirlist); @@ -186,7 +181,7 @@ static int delete_item(char *fname, int mode, int flags) if (do_rmdir(fname) == 0) { if (!(flags & DEL_TERSE)) log_delete(fname, mode); - } else if (errno != ENOTEMPTY && errno != ENOENT) { + } else if (errno != ENOTEMPTY && errno != EEXIST && errno != ENOENT) { rsyserr(FERROR, errno, "delete_file: rmdir %s failed", full_fname(fname)); return -1; @@ -262,13 +257,12 @@ static void delete_in_dir(struct file_list *flist, char *fbuf, * from the filesystem. */ for (i = dirlist->count; i--; ) { struct file_struct *fp = dirlist->files[i]; - if (!fp->basename) + if (!fp->basename || fp->flags & FLAG_MOUNT_POINT) continue; if (flist_find(flist, fp) < 0) { int mode = fp->mode; f_name_to(fp, delbuf); - if (delete_item(delbuf, mode, DEL_FORCE_RECURSE) < 0) - break; + delete_item(delbuf, mode, DEL_FORCE_RECURSE); } } @@ -329,7 +323,8 @@ void itemize(struct file_struct *file, int ndx, int statret, STRUCT_STAT *st, : S_ISDIR(file->mode) ? !omit_dir_times : !S_ISLNK(file->mode); - if ((iflags & (ITEM_TRANSFER|ITEM_LOCAL_CHANGE) && !keep_time) + if ((iflags & (ITEM_TRANSFER|ITEM_LOCAL_CHANGE) && !keep_time + && (!(iflags & ITEM_XNAME_FOLLOWS) || *xname)) || (keep_time && file->modtime != st->st_mtime)) iflags |= ITEM_REPORT_TIME; if (preserve_perms && file->mode != st->st_mode) @@ -1145,10 +1140,11 @@ notify_others: void generate_files(int f_out, struct file_list *flist, char *local_name) { - int i, lull_mod; + int i; char fbuf[MAXPATHLEN]; int itemizing, maybe_PERMS_REPORT; enum logcode code; + int lull_mod = allowed_lull * 5; int need_retouch_dir_times = preserve_times && !omit_dir_times; int need_retouch_dir_perms = 0; int save_only_existing = only_existing; @@ -1156,9 +1152,6 @@ void generate_files(int f_out, struct file_list *flist, char *local_name) int save_do_progress = do_progress; int save_make_backups = make_backups; - allowed_lull = read_batch ? 0 : (io_timeout + 1) / 2; - lull_mod = allowed_lull * 5; - if (protocol_version >= 29) { itemizing = 1; maybe_PERMS_REPORT = log_format_has_i ? 0 : PERMS_REPORT;