From: Timo Sirainen Date: Thu, 1 Jul 2010 17:59:12 +0000 (+0100) Subject: dsync: When -v parameter is given, show progress counter of saving new messages. X-Git-Tag: 2.0.rc1~31 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f02212eddd715b924269fee2cbdf3913fa7d0c95;p=thirdparty%2Fdovecot%2Fcore.git dsync: When -v parameter is given, show progress counter of saving new messages. --HG-- branch : HEAD --- diff --git a/src/dsync/dsync-brain-msgs-new.c b/src/dsync/dsync-brain-msgs-new.c index d360508a9c..bb60dfa719 100644 --- a/src/dsync/dsync-brain-msgs-new.c +++ b/src/dsync/dsync-brain-msgs-new.c @@ -34,6 +34,8 @@ #include "dsync-worker.h" #include "dsync-brain-private.h" +#include + 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); } diff --git a/src/dsync/dsync-brain-private.h b/src/dsync/dsync-brain-private.h index 617db0d261..893c5bca35 100644 --- a/src/dsync/dsync-brain-private.h +++ b/src/dsync/dsync-brain-private.h @@ -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); diff --git a/src/dsync/dsync-brain.c b/src/dsync/dsync-brain.c index 6aba69d33a..a1353b66d7 100644 --- a/src/dsync/dsync-brain.c +++ b/src/dsync/dsync-brain.c @@ -7,6 +7,8 @@ #include "dsync-worker.h" #include "dsync-brain-private.h" +#include + 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; }