X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/70352269ba69d983d714f76c35af087f395202a9..a06e2b7cab2f16e77e3403bbe8d756806ece186f:/generator.c diff --git a/generator.c b/generator.c index b9197c71..245690c3 100644 --- a/generator.c +++ b/generator.c @@ -31,6 +31,7 @@ extern int daemon_log_format_has_i; extern int am_root; extern int am_server; extern int am_daemon; +extern int do_progress; extern int recurse; extern int relative_paths; extern int keep_dirlinks; @@ -70,7 +71,6 @@ extern int compare_dest; extern int copy_dest; extern int link_dest; extern int whole_file; -extern int local_server; extern int list_only; extern int read_batch; extern int only_existing; @@ -291,6 +291,8 @@ static void do_delete_pass(struct file_list *flist) delete_in_dir(flist, fbuf, file); } + if (do_progress && !am_server) + rprintf(FINFO, " \r"); } static int unchanged_attrs(struct file_struct *file, STRUCT_STAT *st) @@ -923,8 +925,25 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, } match_level = 0; statret = -1; - } else - set_perms(fname, file, NULL, 0); + } else { + if (itemizing) { + itemize(file, ndx, 0, &st, + ITEM_LOCAL_CHANGE, 0, + NULL); + } else if (verbose && code) { + rprintf(code, "%s\n", + safe_fname(fname)); + } + set_perms(fname, file, NULL, + maybe_PERMS_REPORT); + if (preserve_hard_links + && file->link_u.links) { + hard_link_cluster(file, ndx, + itemizing, + code); + } + return; + } } else if (compare_dest || match_level == 1) { fnamecmp = fnamecmpbuf; fnamecmp_type = i; @@ -1112,6 +1131,7 @@ void generate_files(int f_out, struct file_list *flist, char *local_name) int need_retouch_dir_perms = 0; int save_only_existing = only_existing; int save_opt_ignore_existing = opt_ignore_existing; + int save_do_progress = do_progress; allowed_lull = read_batch ? 0 : (io_timeout + 1) / 2; lull_mod = allowed_lull * 5; @@ -1141,6 +1161,7 @@ void generate_files(int f_out, struct file_list *flist, char *local_name) if (delete_before && !local_name && flist->count > 0) do_delete_pass(flist); + do_progress = 0; if (whole_file < 0) whole_file = 0; @@ -1167,7 +1188,8 @@ void generate_files(int f_out, struct file_list *flist, char *local_name) /* We need to ensure that any dirs we create have writeable * permissions during the time we are putting files within * them. This is then fixed after the transfer is done. */ - if (!am_root && S_ISDIR(file->mode) && !(file->mode & S_IWUSR)) { + if (!am_root && S_ISDIR(file->mode) && !(file->mode & S_IWUSR) + && !list_only) { int mode = file->mode | S_IWUSR; /* user write */ char *fname = local_name ? local_name : fbuf; if (do_chmod(fname, mode & CHMOD_BITS) < 0) { @@ -1238,6 +1260,7 @@ void generate_files(int f_out, struct file_list *flist, char *local_name) get_redo_num(itemizing, code); } + do_progress = save_do_progress; if (delete_after && !local_name && flist->count > 0) do_delete_pass(flist);