X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/87383697e8cbfab13f5119b63f5426a73c96d928..5c5e1598923b1a4bd57a26202f0280965eab8aaa:/options.c diff --git a/options.c b/options.c index d2b95bc3..1d84bba7 100644 --- a/options.c +++ b/options.c @@ -143,6 +143,7 @@ int verbose = 0; int quiet = 0; int itemize_changes = 0; int log_before_transfer = 0; +int log_format_has_o_or_i = 0; int always_checksum = 0; int list_only = 0; @@ -152,7 +153,7 @@ char *batch_name = NULL; static int daemon_opt; /* sets am_daemon after option error-reporting */ static int F_option_cnt = 0; static int modify_window_set; -static int refused_verbose, refused_delete, refused_archive_part; +static int refused_delete, refused_archive_part; static int refused_partial, refused_progress, refused_delete_before; static char *dest_option = NULL; static char *max_size_arg; @@ -548,9 +549,6 @@ static void set_refuse_options(char *bp) /* These flags are set to let us easily check * an implied option later in the code. */ switch (*shortname) { - case 'v': - refused_verbose = op->val; - break; case 'r': case 'd': case 'l': case 'p': case 't': case 'g': case 'o': case 'D': refused_archive_part = op->val; @@ -1061,6 +1059,8 @@ int parse_arguments(int *argc, const char ***argv, int frommain) if (log_format) { if (strstr(log_format, "%i") != NULL) itemize_changes = 1; + else + itemize_changes = 0; if (strstr(log_format, "%b") == NULL && strstr(log_format, "%c") == NULL) log_before_transfer = !am_server; @@ -1070,13 +1070,15 @@ int parse_arguments(int *argc, const char ***argv, int frommain) } if ((do_progress || dry_run) && !verbose && !log_before_transfer - && !refused_verbose) + && !am_server) verbose = 1; if (verbose && !log_format) { log_format = "%n%L"; log_before_transfer = !am_server; } + if (itemize_changes || (log_format && strstr(log_format, "%o") != NULL)) + log_format_has_o_or_i = 1; if (daemon_bwlimit && (!bwlimit || bwlimit > daemon_bwlimit)) bwlimit = daemon_bwlimit; @@ -1227,6 +1229,8 @@ void server_options(char **args,int *argc) * default for remote transfers, and in any case old versions * of rsync will not understand it. */ + if (itemize_changes && am_sender) + argstr[x++] = 'i'; if (preserve_hard_links) argstr[x++] = 'H'; if (preserve_uid) @@ -1272,6 +1276,15 @@ void server_options(char **args,int *argc) if (list_only > 1) args[ac++] = "--list-only"; + /* The server side doesn't use our log-format, but in certain + * circumstances they need to know a little about the option. */ + if (log_format && am_sender && !itemize_changes) { + if (log_format_has_o_or_i) + args[ac++] = "--log-format=%o"; + else if (!verbose) + args[ac++] = "--log-format=X"; + } + if (block_size) { if (asprintf(&arg, "-B%lu", block_size) < 0) goto oom;