X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/9c63d83d3d7ddd8a70507ffddc481ef9d2166c32..f7112154e918f741638cdfae6445068f1126272a:/generator.c diff --git a/generator.c b/generator.c index ca3e0737..a4a54a05 100644 --- a/generator.c +++ b/generator.c @@ -25,6 +25,7 @@ extern int verbose; extern int dry_run; +extern int do_xfers; extern int log_format_has_i; extern int log_format_has_o_or_i; extern int daemon_log_format_has_i; @@ -291,6 +292,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) @@ -665,7 +668,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, if (only_existing && statret == -1 && stat_errno == ENOENT) { /* we only want to update existing files */ if (verbose > 1) { - rprintf(FINFO, "not creating new file \"%s\"\n", + rprintf(FINFO, "not creating new %s \"%s\"\n", + S_ISDIR(file->mode) ? "directory" : "file", safe_fname(fname)); } return; @@ -923,8 +927,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; @@ -1001,7 +1022,7 @@ prepare_to_open: statret = 0; } - if (dry_run || read_batch || whole_file) + if (!do_xfers || read_batch || whole_file) goto notify_others; if (fuzzy_basis) { @@ -1073,7 +1094,7 @@ notify_others: fuzzy_file ? fuzzy_file->basename : NULL); } - if (dry_run) { + if (!do_xfers) { if (preserve_hard_links && file->link_u.links) hard_link_cluster(file, ndx, itemizing, code); return; @@ -1113,6 +1134,7 @@ void generate_files(int f_out, struct file_list *flist, char *local_name) int save_only_existing = only_existing; int save_opt_ignore_existing = opt_ignore_existing; 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; @@ -1122,9 +1144,9 @@ void generate_files(int f_out, struct file_list *flist, char *local_name) maybe_PERMS_REPORT = log_format_has_i ? 0 : PERMS_REPORT; code = daemon_log_format_has_i ? 0 : FLOG; } else if (am_daemon) { - itemizing = daemon_log_format_has_i && !dry_run; + itemizing = daemon_log_format_has_i && do_xfers; maybe_PERMS_REPORT = PERMS_REPORT; - code = itemizing || dry_run ? FCLIENT : FINFO; + code = itemizing || !do_xfers ? FCLIENT : FINFO; } else if (!am_server) { itemizing = log_format_has_i; maybe_PERMS_REPORT = log_format_has_i ? 0 : PERMS_REPORT; @@ -1169,7 +1191,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) { @@ -1185,6 +1208,8 @@ void generate_files(int f_out, struct file_list *flist, char *local_name) if (allowed_lull && !(i % lull_mod)) maybe_send_keepalive(); + else if (!(i % 200)) + maybe_flush_socket(); } recv_generator(NULL, NULL, 0, 0, 0, code, -1); if (delete_during) @@ -1218,6 +1243,7 @@ void generate_files(int f_out, struct file_list *flist, char *local_name) phase++; only_existing = save_only_existing; opt_ignore_existing = save_opt_ignore_existing; + make_backups = save_make_backups; if (verbose > 2) rprintf(FINFO,"generate_files phase=%d\n",phase); @@ -1258,8 +1284,10 @@ void generate_files(int f_out, struct file_list *flist, char *local_name) continue; recv_generator(f_name(file), file, i, itemizing, maybe_PERMS_REPORT, code, -1); - if (allowed_lull && !(j++ % lull_mod)) + if (allowed_lull && !(++j % lull_mod)) maybe_send_keepalive(); + else if (!(j % 200)) + maybe_flush_socket(); } } recv_generator(NULL, NULL, 0, 0, 0, code, -1);