#include <locale.h>
#endif
-extern int verbose;
extern int dry_run;
extern int list_only;
extern int am_root;
extern int am_server;
extern int am_sender;
-extern int am_generator;
extern int am_daemon;
extern int inc_recurse;
extern int blocking_io;
+extern int human_readable;
+extern int always_checksum;
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 msgs2stderr;
extern int module_id;
extern int copy_links;
extern int copy_dirlinks;
extern int read_batch;
extern int write_batch;
extern int batch_fd;
+extern int flist_eof;
extern int filesfrom_fd;
+extern int delete_during;
extern int connect_timeout;
+extern int check_for_io_err;
extern pid_t cleanup_child_pid;
extern unsigned int module_dirlen;
extern struct stats stats;
+extern char *stdout_format;
+extern char *logfile_format;
extern char *filesfrom_host;
extern char *partial_dir;
extern char *dest_option;
-extern char *basis_dir[];
extern char *rsync_path;
extern char *shell_cmd;
extern char *batch_name;
extern char *password_file;
extern char curr_dir[MAXPATHLEN];
+extern char *basis_dir[MAX_BASIS_DIRS+1];
extern struct file_list *first_flist;
extern struct filter_list_struct daemon_filter_list;
uid_t our_uid;
+int am_generator = 0;
int local_server = 0;
int daemon_over_rsh = 0;
mode_t orig_umask = 0;
int batch_gen_fd = -1;
+int sender_keeps_checksum = 0;
/* There's probably never more than at most 2 outstanding child processes,
* but set it higher, just in case. */
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();
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",
(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)" : "");
}
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");
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));
}
&& 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) {
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());
}
exit_cleanup(RERR_IPC);
}
+ check_for_io_err = inc_recurse && delete_during && !flist_eof;
+
if (pid == 0) {
close(error_pipe[0]);
if (f_in != f_out)
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);
int exit_code;
struct file_list *flist;
char *local_name = NULL;
- int save_verbose = verbose;
+ int negated_levels;
- if (filesfrom_fd >= 0) {
+ if (filesfrom_fd >= 0 && !msgs2stderr) {
/* 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());
}
}
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]);
if (am_sender) {
keep_dirlinks = 0; /* Must be disabled on the sender. */
+
+ if (always_checksum
+ && (log_format_has(stdout_format, 'C')
+ || log_format_has(logfile_format, 'C')))
+ sender_keeps_checksum = 1;
+
if (protocol_version >= 30)
io_start_multiplex_out();
else
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)
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);
}
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);
}
}
- 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]) : "");