X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/a054570942981a1bb35ea81cb25a299688c4209a..ac669e8b922c7ace230294f9bf9a3a2bdfbd19d2:/sender.c diff --git a/sender.c b/sender.c index 5c7b9c54..76546f11 100644 --- a/sender.c +++ b/sender.c @@ -27,7 +27,9 @@ extern int log_before_transfer; extern int log_format_has_i; extern int daemon_log_format_has_i; extern int csum_length; +extern int append_mode; extern int io_error; +extern int allowed_lull; extern int protocol_version; extern int remove_sent_files; extern int updating_basis_file; @@ -56,6 +58,7 @@ static struct sum_struct *receive_sums(int f) { struct sum_struct *s; int32 i; + int lull_mod = allowed_lull * 5; OFF_T offset = 0; if (!(s = new(struct sum_struct))) @@ -70,6 +73,13 @@ static struct sum_struct *receive_sums(int f) (double)s->count, (long)s->blength, (long)s->remainder); } + if (append_mode) { + s->flength = (OFF_T)s->count * s->blength; + if (s->remainder) + s->flength -= s->blength - s->remainder; + return s; + } + if (s->count == 0) return(s); @@ -89,6 +99,9 @@ static struct sum_struct *receive_sums(int f) s->sums[i].len = s->blength; offset += s->sums[i].len; + if (allowed_lull && !(i % lull_mod)) + maybe_send_keepalive(); + if (verbose > 3) { rprintf(FINFO, "chunk[%d] len=%d offset=%.0f sum1=%08x\n", @@ -120,11 +133,9 @@ void successful_send(int ndx) file->dir.root, "/", NULL); } else offset = 0; - f_name_to(file, fname + offset); - if (remove_sent_files && do_unlink(fname) == 0 && verbose > 1) { - rprintf(FINFO, "sender removed %s\n", - safe_fname(fname + offset)); - } + f_name(file, fname + offset); + if (remove_sent_files && do_unlink(fname) == 0 && verbose > 1) + rprintf(FINFO, "sender removed %s\n", fname + offset); } static void write_ndx_and_attrs(int f_out, int ndx, int iflags, @@ -175,10 +186,6 @@ int read_item_attrs(int f_in, int f_out, int ndx, uchar *type_ptr, } *len_ptr = len; - /* Temporary handling of 2.6.4pre3 */ - if (iflags & ITEM_DUMMY_BIT && iflags & (ITEM_LOCAL_CHANGE|ITEM_TRANSFER)) - iflags &= ~ITEM_DUMMY_BIT; - if (iflags & ITEM_TRANSFER) { if (!S_ISREG(the_file_list->files[ndx]->mode)) { rprintf(FERROR, @@ -230,10 +237,11 @@ void send_files(struct file_list *flist, int f_out, int f_in) /* For inplace: redo phase turns off the backup * flag so that we do a regular inplace send. */ make_backups = 0; + append_mode = 0; continue; } - iflags = read_item_attrs(f_in, f_xfer, i, &fnamecmp_type, + iflags = read_item_attrs(f_in, f_out, i, &fnamecmp_type, xname, &xlen); if (iflags == ITEM_IS_NEW) /* no-op packet */ continue; @@ -246,7 +254,7 @@ void send_files(struct file_list *flist, int f_out, int f_in) fname[offset++] = '/'; } else offset = 0; - fname2 = f_name_to(file, fname + offset); + fname2 = f_name(file, fname + offset); if (verbose > 2) rprintf(FINFO, "send_files(%d, %s)\n", i, fname); @@ -272,7 +280,7 @@ void send_files(struct file_list *flist, int f_out, int f_in) if (!do_xfers) { /* log the transfer */ if (!am_server && log_format) log_item(file, &stats, iflags, NULL); - write_ndx_and_attrs(f_xfer, i, iflags, fnamecmp_type, + write_ndx_and_attrs(f_out, i, iflags, fnamecmp_type, xname, xlen); continue; } @@ -321,22 +329,20 @@ void send_files(struct file_list *flist, int f_out, int f_in) if (verbose > 2) { rprintf(FINFO, "send_files mapped %s of size %.0f\n", - safe_fname(fname), (double)st.st_size); + fname, (double)st.st_size); } - write_ndx_and_attrs(f_xfer, i, iflags, fnamecmp_type, + write_ndx_and_attrs(f_out, i, iflags, fnamecmp_type, xname, xlen); write_sum_head(f_xfer, s); - if (verbose > 2) { - rprintf(FINFO, "calling match_sums %s\n", - safe_fname(fname)); - } + if (verbose > 2) + rprintf(FINFO, "calling match_sums %s\n", fname); if (log_before_transfer) log_item(file, &initial_stats, iflags, NULL); else if (!am_server && verbose && do_progress) - rprintf(FINFO, "%s\n", safe_fname(fname2)); + rprintf(FINFO, "%s\n", fname2); set_compression(fname); @@ -360,10 +366,8 @@ void send_files(struct file_list *flist, int f_out, int f_in) free_sums(s); - if (verbose > 2) { - rprintf(FINFO, "sender finished %s\n", - safe_fname(fname)); - } + if (verbose > 2) + rprintf(FINFO, "sender finished %s\n", fname); /* Flag that we actually sent this entry. */ file->flags |= FLAG_SENT;