X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/29a89172f77ed76dcf53612e96dc35daf15d7362..6d56efa6ea66afa2e6f4eb79d9dd5f3b54b723c3:/main.c diff --git a/main.c b/main.c index f08d359f..73440865 100644 --- a/main.c +++ b/main.c @@ -27,7 +27,6 @@ #include #endif -extern int verbose; extern int dry_run; extern int list_only; extern int am_root; @@ -37,10 +36,11 @@ extern int am_generator; extern int am_daemon; extern int inc_recurse; extern int blocking_io; +extern int human_readable; extern int remove_source_files; +extern int output_needs_newline; extern int need_messages_from_generator; extern int kluge_around_eof; -extern int do_stats; extern int got_xfer_error; extern int module_id; extern int copy_links; @@ -183,7 +183,7 @@ static void handle_stats(int f) total_read = stats.total_read; total_written = stats.total_written; - if (do_stats && verbose > 1) { + if (INFO_GTE(STATS, 3)) { /* These come out from every process */ show_malloc_stats(); show_flist_stats(); @@ -239,21 +239,21 @@ static void handle_stats(int f) static void output_summary(void) { - if (do_stats) { + if (INFO_GTE(STATS, 2)) { rprintf(FCLIENT, "\n"); rprintf(FINFO,"Number of files: %d\n", stats.num_files); rprintf(FINFO,"Number of files transferred: %d\n", stats.num_transferred_files); rprintf(FINFO,"Total file size: %s bytes\n", - human_num(stats.total_size)); + big_num(stats.total_size, human_readable)); rprintf(FINFO,"Total transferred file size: %s bytes\n", - human_num(stats.total_transferred_size)); + big_num(stats.total_transferred_size, human_readable)); rprintf(FINFO,"Literal data: %s bytes\n", - human_num(stats.literal_data)); + big_num(stats.literal_data, human_readable)); rprintf(FINFO,"Matched data: %s bytes\n", - human_num(stats.matched_data)); + big_num(stats.matched_data, human_readable)); rprintf(FINFO,"File list size: %s\n", - human_num(stats.flist_size)); + big_num(stats.flist_size, human_readable)); if (stats.flist_buildtime) { rprintf(FINFO, "File list generation time: %.3f seconds\n", @@ -263,19 +263,20 @@ static void output_summary(void) (double)stats.flist_xfertime / 1000); } rprintf(FINFO,"Total bytes sent: %s\n", - human_num(total_written)); + big_num(total_written, human_readable)); rprintf(FINFO,"Total bytes received: %s\n", - human_num(total_read)); + big_num(total_read, human_readable)); } - if (verbose || do_stats) { + if (INFO_GTE(STATS, 1)) { rprintf(FCLIENT, "\n"); rprintf(FINFO, "sent %s bytes received %s bytes %s bytes/sec\n", - human_num(total_written), human_num(total_read), + big_num(total_written, human_readable), + big_num(total_read, human_readable), human_dnum((total_written + total_read)/(0.5 + (endtime - starttime)), 2)); rprintf(FINFO, "total size is %s speedup is %.2f%s\n", - human_num(stats.total_size), + big_num(stats.total_size, human_readable), (double)stats.total_size / (total_written+total_read), write_batch < 0 ? " (BATCH ONLY)" : dry_run ? " (DRY RUN)" : ""); } @@ -434,7 +435,7 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char **remote_argv, in args[argc] = NULL; - if (verbose > 3) { + if (DEBUG_GTE(CMD, 2)) { for (i = 0; i < argc; i++) rprintf(FCLIENT, "cmd[%d]=%s ", i, args[i]); rprintf(FCLIENT, "\n"); @@ -499,7 +500,7 @@ static char *get_local_name(struct file_list *flist, char *dest_path) int statret; char *cp; - if (verbose > 2) { + if (DEBUG_GTE(RECV, 1)) { rprintf(FINFO, "get_local_name count=%d %s\n", file_total, NS(dest_path)); } @@ -507,12 +508,21 @@ static char *get_local_name(struct file_list *flist, char *dest_path) if (!dest_path || list_only) return NULL; - if (daemon_filter_list.head - && (check_filter(&daemon_filter_list, FLOG, dest_path, 0 != 0) < 0 - || check_filter(&daemon_filter_list, FLOG, dest_path, 1 != 0) < 0)) { - rprintf(FERROR, "skipping daemon-excluded destination \"%s\"\n", - dest_path); - exit_cleanup(RERR_FILESELECT); + if (daemon_filter_list.head) { + char *slash = strrchr(dest_path, '/'); + if (slash && (slash[1] == '\0' || (slash[1] == '.' && slash[2] == '\0'))) + *slash = '\0'; + else + slash = NULL; + if ((*dest_path != '.' || dest_path[1] != '\0') + && (check_filter(&daemon_filter_list, FLOG, dest_path, 0) < 0 + || check_filter(&daemon_filter_list, FLOG, dest_path, 1) < 0)) { + rprintf(FERROR, "skipping daemon-excluded destination \"%s\"\n", + dest_path); + exit_cleanup(RERR_FILESELECT); + } + if (slash) + *slash = '/'; } /* See what currently exists at the destination. */ @@ -571,7 +581,7 @@ static char *get_local_name(struct file_list *flist, char *dest_path) && strcmp(flist->files[flist->low]->basename, ".") == 0) flist->files[0]->flags |= FLAG_DIR_CREATED; - if (verbose) + if (INFO_GTE(NAME, 1)) rprintf(FINFO, "created directory %s\n", dest_path); if (dry_run) { @@ -673,7 +683,7 @@ static void do_server_sender(int f_in, int f_out, int argc, char *argv[]) struct file_list *flist; char *dir = argv[0]; - if (verbose > 2) { + if (DEBUG_GTE(SEND, 1)) { rprintf(FINFO, "server_sender starting pid=%ld\n", (long)getpid()); } @@ -766,6 +776,11 @@ static int do_recv(int f_in, int f_out, char *local_name) io_flush(FULL_FLUSH); handle_stats(f_in); + if (output_needs_newline) { + fputc('\n', stdout); + output_needs_newline = 0; + } + send_msg(MSG_DONE, "", 1, 0); write_varlong(error_pipe[1], stats.total_read, 3); io_flush(FULL_FLUSH); @@ -839,15 +854,17 @@ static void do_server_recv(int f_in, int f_out, int argc, char *argv[]) int exit_code; struct file_list *flist; char *local_name = NULL; - int save_verbose = verbose; + int negated_levels; if (filesfrom_fd >= 0) { /* We can't mix messages with files-from data on the socket, - * so temporarily turn off verbose messages. */ - verbose = 0; - } + * so temporarily turn off info/debug messages. */ + negate_output_levels(); + negated_levels = 1; + } else + negated_levels = 0; - if (verbose > 2) { + if (DEBUG_GTE(RECV, 1)) { rprintf(FINFO, "server_recv(%d) starting pid=%ld\n", argc, (long)getpid()); } @@ -892,7 +909,9 @@ static void do_server_recv(int f_in, int f_out, int argc, char *argv[]) } if (inc_recurse && file_total == 1) recv_additional_file_list(f_in); - verbose = save_verbose; + + if (negated_levels) + negate_output_levels(); if (argc > 0) local_name = get_local_name(flist,argv[0]); @@ -1008,7 +1027,7 @@ int client_run(int f_in, int f_out, pid_t pid, int argc, char *argv[]) start_write_batch(f_out); flist = send_file_list(f_out, argc, argv); set_msg_fd_in(-1); - if (verbose > 3) + if (DEBUG_GTE(FLIST, 3)) rprintf(FINFO,"file list sent\n"); if (protocol_version >= 23) @@ -1021,7 +1040,7 @@ int client_run(int f_in, int f_out, pid_t pid, int argc, char *argv[]) if (protocol_version >= 24) read_final_goodbye(f_in); if (pid != -1) { - if (verbose > 3) + if (DEBUG_GTE(EXIT, 2)) rprintf(FINFO,"client_run waiting on %d\n", (int) pid); io_flush(FULL_FLUSH); wait_process_with_flush(pid, &exit_code); @@ -1063,7 +1082,7 @@ int client_run(int f_in, int f_out, pid_t pid, int argc, char *argv[]) } if (pid != -1) { - if (verbose > 3) + if (DEBUG_GTE(RECV, 1)) rprintf(FINFO,"client_run2 waiting on %d\n", (int) pid); io_flush(FULL_FLUSH); wait_process_with_flush(pid, &exit_code); @@ -1245,7 +1264,7 @@ static int start_client(int argc, char *argv[]) } } - if (verbose > 3) { + if (DEBUG_GTE(CMD, 2)) { rprintf(FINFO,"cmd=%s machine=%s user=%s path=%s\n", NS(shell_cmd), NS(shell_machine), NS(shell_user), remote_argv ? NS(remote_argv[0]) : "");