]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dsync: When -v parameter is given, show progress counter of saving new messages.
authorTimo Sirainen <tss@iki.fi>
Thu, 1 Jul 2010 17:59:12 +0000 (18:59 +0100)
committerTimo Sirainen <tss@iki.fi>
Thu, 1 Jul 2010 17:59:12 +0000 (18:59 +0100)
--HG--
branch : HEAD

src/dsync/dsync-brain-msgs-new.c
src/dsync/dsync-brain-private.h
src/dsync/dsync-brain.c

index d360508a9c28ce698dd6db2f8a2718f589102c8c..bb60dfa71963a7420154b5e3c2712cd9fedb0a30 100644 (file)
@@ -34,6 +34,8 @@
 #include "dsync-worker.h"
 #include "dsync-brain-private.h"
 
+#include <stdio.h>
+
 struct dsync_brain_msg_copy_context {
        struct dsync_brain_msg_iter *iter;
        unsigned int msg_idx;
@@ -180,13 +182,18 @@ dsync_brain_mailbox_add_new_msgs(struct dsync_brain_msg_iter *iter,
                                 const mailbox_guid_t *mailbox_guid)
 {
        struct dsync_brain_new_msg *msgs;
-       unsigned int msg_count;
+       unsigned int msg_count, n = 0;
+       bool output_stats = iter->sync->brain->verbose &&
+               iter->sync->brain->stdout_tty;
        bool ret = TRUE;
 
        msgs = array_get_modifiable(&iter->new_msgs, &msg_count);
        while (iter->next_new_msg < msg_count) {
                struct dsync_brain_new_msg *msg = &msgs[iter->next_new_msg];
 
+               if (output_stats && (n++ % 10) == 0)
+                       printf("\r%u/%u", iter->next_new_msg, msg_count);
+
                if (msg->mailbox_idx != iter->mailbox_idx) {
                        i_assert(msg->mailbox_idx > iter->mailbox_idx);
                        ret = FALSE;
@@ -203,8 +210,11 @@ dsync_brain_mailbox_add_new_msgs(struct dsync_brain_msg_iter *iter,
                        break;
                }
        }
-       if (iter->next_new_msg == msg_count)
+       if (iter->next_new_msg == msg_count) {
+               if (output_stats)
+                       printf("\r%u msgs saved\n", msg_count);
                ret = FALSE;
+       }
 
        /* flush copy commands */
        if (dsync_worker_output_flush(iter->worker) > 0 && ret) {
@@ -359,6 +369,7 @@ dsync_brain_msg_iter_sync_new_msgs(struct dsync_brain_msg_iter *iter)
 
 void dsync_brain_msg_sync_new_msgs(struct dsync_brain_mailbox_sync *sync)
 {
+       printf("Syncing new messages:\n");
        dsync_brain_msg_iter_sync_new_msgs(sync->src_msg_iter);
        dsync_brain_msg_iter_sync_new_msgs(sync->dest_msg_iter);
 }
index 617db0d2612942587177c019bb77ce6963c9fcf9..893c5bca35430c5ea1c63d3e18b0d6fd2247b49e 100644 (file)
@@ -127,6 +127,7 @@ struct dsync_brain {
        unsigned int verbose:1;
        unsigned int backup:1;
        unsigned int unexpected_changes:1;
+       unsigned int stdout_tty:1;
 };
 
 void dsync_brain_fail(struct dsync_brain *brain);
index 6aba69d33a0fab4a2cc4cdfa12b6ba5d524ec8ec..a1353b66d707d58df08d591e508fe7b7bc2f19a5 100644 (file)
@@ -7,6 +7,8 @@
 #include "dsync-worker.h"
 #include "dsync-brain-private.h"
 
+#include <unistd.h>
+
 static void
 dsync_brain_mailbox_list_deinit(struct dsync_brain_mailbox_list **list);
 static void
@@ -26,6 +28,7 @@ dsync_brain_init(struct dsync_worker *src_worker,
        brain->flags = flags;
        brain->verbose = (flags & DSYNC_BRAIN_FLAG_VERBOSE) != 0;
        brain->backup = (flags & DSYNC_BRAIN_FLAG_BACKUP) != 0;
+       brain->stdout_tty = isatty(STDOUT_FILENO) > 0;
        return brain;
 }