- If log_before_transfer is possible, don't force --verbose on for
[rsync/rsync.git] / options.c
index 835ed7e..9b260d4 100644 (file)
--- 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;
 
@@ -152,7 +153,7 @@ 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_partial, refused_progress, refused_delete_before;
 static char *dest_option = NULL;
 static char *max_size_arg;
 static char partialdir_for_delayupdate[] = ".~tmp~";
@@ -557,6 +558,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 +956,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,7 +1058,17 @@ int parse_arguments(int *argc, const char ***argv, int frommain)
                return 0;
        }
 
-       if (do_progress && !verbose && !itemize_changes) {
+       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 && !verbose && !log_before_transfer) {
                if (refused_verbose) {
                        create_refuse_error(refused_verbose);
                        return 0;
@@ -1207,7 +1225,7 @@ 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)
+       if (itemize_changes)
                argstr[x++] = 'i';
        if (preserve_hard_links)
                argstr[x++] = 'H';