X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/bc40a305032db262e72b92c938203fd2bd42e4c9..7fc2ca2551088823f4600264a3ce7fa7360d737e:/receiver.c diff --git a/receiver.c b/receiver.c index 74c2e752..ee8e015a 100644 --- a/receiver.c +++ b/receiver.c @@ -361,7 +361,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); } @@ -384,12 +384,11 @@ static int we_want_redo(int desired_ndx) return 0; } -static int gen_wants_ndx(int desired_ndx) +static int gen_wants_ndx(int desired_ndx, int flist_num) { static int next_ndx = -1; static int done_cnt = 0; static BOOL got_eof = False; - int flist_num = first_flist->flist_num; if (got_eof) return 0; @@ -461,13 +460,17 @@ int recv_files(int f_in, char *local_name) end_progress(0); } if (inc_recurse && first_flist) { - if (read_batch) - gen_wants_ndx(first_flist->used + first_flist->ndx_start); + if (read_batch) { + ndx = first_flist->used + first_flist->ndx_start; + gen_wants_ndx(ndx, first_flist->flist_num); + } flist_free(first_flist); if (first_flist) continue; - } else if (read_batch && first_flist) - gen_wants_ndx(first_flist->used); + } else if (read_batch && first_flist) { + ndx = first_flist->used; + gen_wants_ndx(ndx, first_flist->flist_num); + } if (++phase > max_phase) break; if (DEBUG_GTE(RECV, 1)) @@ -559,6 +562,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, cur_flist->flist_num); + 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) @@ -572,18 +590,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) {