X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/445640e8033e095be64db441e5d1fb3d26b0b309..refs/heads/hacks/missing-args-b3.0.x:/receiver.c diff --git a/receiver.c b/receiver.c index e298e8f3..39c5e490 100644 --- a/receiver.c +++ b/receiver.c @@ -360,7 +360,7 @@ static void no_batched_update(int ndx, BOOL is_redo) rprintf(FERROR_XFER, "(No batched update for%s \"%s\")\n", is_redo ? " resend of" : "", f_name(file, NULL)); - if (inc_recurse) + if (inc_recurse && !dry_run) send_msg_int(MSG_NO_SEND, ndx); } @@ -386,15 +386,23 @@ static int we_want_redo(int desired_ndx) static int gen_wants_ndx(int desired_ndx) { static int next_ndx = -1; - static BOOL got_eof = 0; + static int done_cnt = 0; + static BOOL got_eof = False; + int flist_num = first_flist->flist_num; if (got_eof) return 0; while (next_ndx < desired_ndx) { + if (inc_recurse && flist_num <= done_cnt) + return 0; if (next_ndx >= 0) no_batched_update(next_ndx, False); if ((next_ndx = read_int(batch_gen_fd)) < 0) { + if (inc_recurse) { + done_cnt++; + continue; + } got_eof = True; return 0; } @@ -475,14 +483,14 @@ int recv_files(int f_in, char *local_name) rprintf(FINFO, "recv_files(%s)\n", fname); #ifdef SUPPORT_XATTRS - if (iflags & ITEM_REPORT_XATTR && !dry_run) + if (iflags & ITEM_REPORT_XATTR && do_xfers) recv_xattr_request(file, f_in); #endif if (!(iflags & ITEM_TRANSFER)) { maybe_log_item(file, iflags, itemizing, xname); #ifdef SUPPORT_XATTRS - if (preserve_xattrs && iflags & ITEM_REPORT_XATTR && !dry_run) + if (preserve_xattrs && iflags & ITEM_REPORT_XATTR && do_xfers) set_file_attrs(fname, file, NULL, fname, 0); #endif continue; @@ -529,6 +537,21 @@ int recv_files(int f_in, char *local_name) exit_cleanup(RERR_PROTOCOL); } + if (read_batch) { + int wanted = redoing + ? we_want_redo(ndx) + : gen_wants_ndx(ndx); + if (!wanted) { + rprintf(FINFO, + "(Skipping batched update for%s \"%s\")\n", + redoing ? " resend of" : "", + fname); + discard_receive_data(f_in, F_LENGTH(file)); + file->flags |= FLAG_FILE_SENT; + continue; + } + } + if (!do_xfers) { /* log the transfer */ log_item(FCLIENT, file, &stats, iflags, NULL); if (read_batch) @@ -542,18 +565,6 @@ int recv_files(int f_in, char *local_name) continue; } - if (read_batch) { - if (!(redoing ? we_want_redo(ndx) : gen_wants_ndx(ndx))) { - rprintf(FINFO, - "(Skipping batched update for%s \"%s\")\n", - redoing ? " resend of" : "", - fname); - discard_receive_data(f_in, F_LENGTH(file)); - file->flags |= FLAG_FILE_SENT; - continue; - } - } - partialptr = partial_dir ? partial_dir_fname(fname) : fname; if (protocol_version >= 29) {