X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/ddf64101306042c94eb3017c4d5a87f47d33caa1..f2ae9e8583d289ed876c3666bd533dba13ffbfb8:/main.c diff --git a/main.c b/main.c index 72b55295..f48febe8 100644 --- a/main.c +++ b/main.c @@ -34,7 +34,6 @@ extern int blocking_io; extern int cvs_exclude; extern int delete_mode; extern int delete_before; -extern int delete_after; extern int delete_excluded; extern int daemon_over_rsh; extern int do_stats; @@ -65,11 +64,10 @@ extern char *basis_dir[]; extern char *rsync_path; extern char *shell_cmd; extern char *batch_name; +extern struct filter_list_struct filter_list; - -/* there's probably never more than at most 2 outstanding child processes, - * but set it higher just in case. - */ +/* There's probably never more than at most 2 outstanding child processes, + * but set it higher, just in case. */ #define MAXCHILDPROCS 5 struct pid_status { @@ -148,6 +146,10 @@ static void report(int f) write_longint(f, total_read); write_longint(f, total_written); write_longint(f, stats.total_size); + if (protocol_version >= 29) { + write_longint(f, stats.flist_buildtime); + write_longint(f, stats.flist_xfertime); + } } return; } @@ -160,12 +162,20 @@ static void report(int f) total_written = read_longint(f); total_read = read_longint(f); stats.total_size = read_longint(f); + if (protocol_version >= 29) { + stats.flist_buildtime = read_longint(f); + stats.flist_xfertime = read_longint(f); + } } else if (write_batch) { /* The --read-batch process is going to be a client * receiver, so we need to give it the stats. */ write_longint(batch_fd, total_read); write_longint(batch_fd, total_written); write_longint(batch_fd, stats.total_size); + if (protocol_version >= 29) { + write_longint(batch_fd, stats.flist_buildtime); + write_longint(batch_fd, stats.flist_xfertime); + } } if (do_stats) { @@ -181,6 +191,14 @@ static void report(int f) rprintf(FINFO,"Matched data: %.0f bytes\n", (double)stats.matched_data); rprintf(FINFO,"File list size: %d\n", stats.flist_size); + if (stats.flist_buildtime) { + rprintf(FINFO, + "File list generation time: %.3f seconds\n", + (double)stats.flist_buildtime / 1000); + rprintf(FINFO, + "File list transfer time: %.3f seconds\n", + (double)stats.flist_xfertime / 1000); + } rprintf(FINFO,"Total bytes sent: %.0f\n", (double)total_written); rprintf(FINFO,"Total bytes received: %.0f\n", @@ -207,28 +225,36 @@ static void report(int f) **/ static void show_malloc_stats(void) { -#ifdef HAVE_MALLINFO +#if HAVE_MALLINFO struct mallinfo mi; mi = mallinfo(); rprintf(FINFO, "\n" RSYNC_NAME "[%d] (%s%s%s) heap statistics:\n", - getpid(), - am_server ? "server " : "", - am_daemon ? "daemon " : "", - who_am_i()); - rprintf(FINFO, " arena: %10d (bytes from sbrk)\n", mi.arena); - rprintf(FINFO, " ordblks: %10d (chunks not in use)\n", mi.ordblks); - rprintf(FINFO, " smblks: %10d\n", mi.smblks); - rprintf(FINFO, " hblks: %10d (chunks from mmap)\n", mi.hblks); - rprintf(FINFO, " hblkhd: %10d (bytes from mmap)\n", mi.hblkhd); - rprintf(FINFO, " allmem: %10d (bytes from sbrk + mmap)\n", - mi.arena + mi.hblkhd); - rprintf(FINFO, " usmblks: %10d\n", mi.usmblks); - rprintf(FINFO, " fsmblks: %10d\n", mi.fsmblks); - rprintf(FINFO, " uordblks: %10d (bytes used)\n", mi.uordblks); - rprintf(FINFO, " fordblks: %10d (bytes free)\n", mi.fordblks); - rprintf(FINFO, " keepcost: %10d (bytes in releasable chunk)\n", mi.keepcost); + getpid(), am_server ? "server " : "", + am_daemon ? "daemon " : "", who_am_i()); + rprintf(FINFO, " arena: %10ld (bytes from sbrk)\n", + (long)mi.arena); + rprintf(FINFO, " ordblks: %10ld (chunks not in use)\n", + (long)mi.ordblks); + rprintf(FINFO, " smblks: %10ld\n", + (long)mi.smblks); + rprintf(FINFO, " hblks: %10ld (chunks from mmap)\n", + (long)mi.hblks); + rprintf(FINFO, " hblkhd: %10ld (bytes from mmap)\n", + (long)mi.hblkhd); + rprintf(FINFO, " allmem: %10ld (bytes from sbrk + mmap)\n", + (long)mi.arena + mi.hblkhd); + rprintf(FINFO, " usmblks: %10ld\n", + (long)mi.usmblks); + rprintf(FINFO, " fsmblks: %10ld\n", + (long)mi.fsmblks); + rprintf(FINFO, " uordblks: %10ld (bytes used)\n", + (long)mi.uordblks); + rprintf(FINFO, " fordblks: %10ld (bytes free)\n", + (long)mi.fordblks); + rprintf(FINFO, " keepcost: %10ld (bytes in releasable chunk)\n", + (long)mi.keepcost); #endif /* HAVE_MALLINFO */ } @@ -474,10 +500,9 @@ static int do_recv(int f_in,int f_out,struct file_list *flist,char *local_name) if (preserve_hard_links) init_hard_links(flist); - if (delete_before) { - /* I moved this here from recv_files() to prevent a race condition */ - if (recurse && !local_name && flist->count > 0) - delete_files(flist); + if (delete_before && !local_name && flist->count > 0) { + /* Moved here from recv_files() to prevent a race condition */ + delete_files(flist); } if (fd_pair(error_pipe) < 0 @@ -597,8 +622,8 @@ static void do_server_recv(int f_in, int f_out, int argc,char *argv[]) io_start_buffering_in(); if (delete_mode && !delete_excluded) recv_filter_list(f_in); - if (cvs_exclude) - add_cvs_excludes(); + if (cvs_exclude && protocol_version < 29) + add_filter(&filter_list, ":C", 0); if (filesfrom_fd >= 0) { /* We need to send the files-from names to the sender at the