X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/b78296cb0b14777a318635d0608a9bb55ac6ff0d..c786a7aec545259f857212a2376ee4c274d2e3b6:/options.c diff --git a/options.c b/options.c index 835ed7e7..e04ee616 100644 --- a/options.c +++ b/options.c @@ -142,6 +142,7 @@ int basis_dir_cnt = 0; int verbose = 0; int quiet = 0; int itemize_changes = 0; +int log_before_transfer = 0; int always_checksum = 0; int list_only = 0; @@ -151,8 +152,8 @@ 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_partial, refused_progress; +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; static char partialdir_for_delayupdate[] = ".~tmp~"; @@ -547,9 +548,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; @@ -557,6 +555,8 @@ static void set_refuse_options(char *bp) case '\0': if (wildmatch("delete", op->longName)) refused_delete = op->val; + else if (wildmatch("delete-before", op->longName)) + refused_delete_before = op->val; else if (wildmatch("partial", op->longName)) refused_partial = op->val; else if (wildmatch("progress", op->longName)) @@ -953,8 +953,13 @@ int parse_arguments(int *argc, const char ***argv, int frommain) delete_mode = delete_excluded = 0; } else if (delete_before || delete_during || delete_after) delete_mode = 1; - else if (delete_mode || delete_excluded) + else if (delete_mode || delete_excluded) { + if (refused_delete_before) { + create_refuse_error(refused_delete_before); + return 0; + } delete_mode = delete_before = 1; + } if (delete_mode && refused_delete) { create_refuse_error(refused_delete); @@ -1050,12 +1055,24 @@ int parse_arguments(int *argc, const char ***argv, int frommain) return 0; } - if (do_progress && !verbose && !itemize_changes) { - if (refused_verbose) { - create_refuse_error(refused_verbose); - return 0; - } + if (log_format) { + if (strstr(log_format, "%i") != NULL) + itemize_changes = 1; + if (strstr(log_format, "%b") == NULL + && strstr(log_format, "%c") == NULL) + log_before_transfer = !am_server; + } else if (itemize_changes) { + log_format = "%i %n%L"; + log_before_transfer = !am_server; + } + + if ((do_progress || dry_run) && !verbose && !log_before_transfer + && !am_server) verbose = 1; + + if (verbose && !log_format) { + log_format = "%n%L"; + log_before_transfer = !am_server; } if (daemon_bwlimit && (!bwlimit || bwlimit > daemon_bwlimit)) @@ -1207,8 +1224,6 @@ 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)