X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/96b7b48efa86bf3fa164d85532dc8bf520d80531..0417c34e2d641cbac292ba5cf8a619249c87d4e3:/sender.c diff --git a/sender.c b/sender.c index f54542b5..b19ecb54 100644 --- a/sender.c +++ b/sender.c @@ -20,20 +20,24 @@ #include "rsync.h" extern int verbose; -extern int dry_run; +extern int do_xfers; extern int am_server; extern int am_daemon; 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; extern int make_backups; extern int do_progress; extern int inplace; +extern int batch_fd; +extern int write_batch; extern struct stats stats; extern struct file_list *the_file_list; extern char *log_format; @@ -54,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))) @@ -68,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); @@ -87,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", @@ -173,10 +188,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, @@ -208,6 +219,7 @@ void send_files(struct file_list *flist, int f_out, int f_in) int save_make_backups = make_backups; int itemizing = am_daemon ? daemon_log_format_has_i : !am_server && log_format_has_i; + int f_xfer = write_batch < 0 ? batch_fd : f_out; int i, j; if (verbose > 2) @@ -227,6 +239,7 @@ 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; } @@ -266,7 +279,7 @@ void send_files(struct file_list *flist, int f_out, int f_in) stats.num_transferred_files++; stats.total_transferred_size += file->length; - if (dry_run) { /* log the transfer */ + if (!do_xfers) { /* log the transfer */ if (!am_server && log_format) log_item(file, &stats, iflags, NULL); write_ndx_and_attrs(f_out, i, iflags, fnamecmp_type, @@ -323,7 +336,7 @@ void send_files(struct file_list *flist, int f_out, int f_in) write_ndx_and_attrs(f_out, i, iflags, fnamecmp_type, xname, xlen); - write_sum_head(f_out, s); + write_sum_head(f_xfer, s); if (verbose > 2) { rprintf(FINFO, "calling match_sums %s\n", @@ -337,7 +350,7 @@ void send_files(struct file_list *flist, int f_out, int f_in) set_compression(fname); - match_sums(f_out, s, mbuf, st.st_size); + match_sums(f_xfer, s, mbuf, st.st_size); if (do_progress) end_progress(st.st_size);