X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/b86f0cefa23fff464bb68f53b76523cf8ce26436..245fbb5129975a8b6550d14123bd0bdc40f3f63b:/main.c diff --git a/main.c b/main.c index c46de2a1..5bd5b8a1 100644 --- a/main.c +++ b/main.c @@ -34,32 +34,47 @@ static void report(int f) extern int am_sender; extern int am_daemon; extern int do_stats; + extern int remote_version; + int send_stats; if (am_daemon) { log_exit(0, __FILE__, __LINE__); if (f == -1 || !am_sender) return; } - if (!verbose) return; - - if (am_server && !am_sender) return; - - if (am_server && am_sender) { - write_longint(f,stats.total_read); - write_longint(f,stats.total_written); - write_longint(f,stats.total_size); + send_stats = verbose || + ((remote_version >= 20) && (PROTOCOL_VERSION >= 20)); + if (am_server) { + if (am_sender && send_stats) { + int64 w; + /* store total_written in a temporary + because write_longint changes it */ + w = stats.total_written; + write_longint(f,stats.total_read); + write_longint(f,w); + write_longint(f,stats.total_size); + } return; } - - if (!am_sender) { + + /* this is the client */ + + if (!am_sender && send_stats) { int64 r; stats.total_written = read_longint(f); + /* store total_read in a temporary, read_longint changes it */ r = read_longint(f); stats.total_size = read_longint(f); stats.total_read = r; } if (do_stats) { + if (!am_sender && !send_stats) { + /* missing the bytes written by the generator */ + rprintf(FINFO, "\nCannot show stats as receiver because protocol version is less than 20\n"); + rprintf(FINFO, "Use --stats -v to show stats\n"); + return; + } rprintf(FINFO,"\nNumber of files: %d\n", stats.num_files); rprintf(FINFO,"Number of files transferred: %d\n", stats.num_transferred_files); @@ -78,13 +93,15 @@ static void report(int f) (double)stats.total_read); } - rprintf(FINFO,"wrote %.0f bytes read %.0f bytes %.2f bytes/sec\n", - (double)stats.total_written, - (double)stats.total_read, - (stats.total_written+stats.total_read)/(0.5 + (t-starttime))); - rprintf(FINFO,"total size is %.0f speedup is %.2f\n", - (double)stats.total_size, - (1.0*stats.total_size)/(stats.total_written+stats.total_read)); + if (verbose || do_stats) { + rprintf(FINFO,"wrote %.0f bytes read %.0f bytes %.2f bytes/sec\n", + (double)stats.total_written, + (double)stats.total_read, + (stats.total_written+stats.total_read)/(0.5 + (t-starttime))); + rprintf(FINFO,"total size is %.0f speedup is %.2f\n", + (double)stats.total_size, + (1.0*stats.total_size)/(stats.total_written+stats.total_read)); + } fflush(stdout); fflush(stderr); @@ -318,6 +335,7 @@ static void do_server_recv(int f_in, int f_out, int argc,char *argv[]) char *local_name=NULL; char *dir = NULL; extern int delete_mode; + extern int delete_excluded; extern int am_daemon; if (verbose > 2) @@ -334,7 +352,7 @@ static void do_server_recv(int f_in, int f_out, int argc,char *argv[]) } } - if (delete_mode) + if (delete_mode && !delete_excluded) recv_exclude_list(f_in); flist = recv_file_list(f_in); @@ -391,9 +409,10 @@ int client_run(int f_in, int f_out, int pid, int argc, char *argv[]) if (am_sender) { extern int cvs_exclude; extern int delete_mode; + extern int delete_excluded; if (cvs_exclude) add_cvs_excludes(); - if (delete_mode) + if (delete_mode && !delete_excluded) send_exclude_list(f_out); flist = send_file_list(f_out,argc,argv); if (verbose > 3)