dovecot-2.0: dsync: When -v parameter is given, show progress co...

dovecot at dovecot.org dovecot at dovecot.org
Thu Jul 1 20:59:16 EEST 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/b37c85676f8e
changeset: 11687:b37c85676f8e
user:      Timo Sirainen <tss at iki.fi>
date:      Thu Jul 01 18:59:12 2010 +0100
description:
dsync: When -v parameter is given, show progress counter of saving new messages.

diffstat:

 src/dsync/dsync-brain-msgs-new.c |  15 +++++++++++++--
 src/dsync/dsync-brain-private.h  |   1 +
 src/dsync/dsync-brain.c          |   3 +++
 3 files changed, 17 insertions(+), 2 deletions(-)

diffs (84 lines):

diff -r cfee7da47bf0 -r b37c85676f8e src/dsync/dsync-brain-msgs-new.c
--- a/src/dsync/dsync-brain-msgs-new.c	Thu Jul 01 18:41:09 2010 +0100
+++ b/src/dsync/dsync-brain-msgs-new.c	Thu Jul 01 18:59:12 2010 +0100
@@ -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 @@
 				 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 @@
 			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 @@
 
 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 -r cfee7da47bf0 -r b37c85676f8e src/dsync/dsync-brain-private.h
--- a/src/dsync/dsync-brain-private.h	Thu Jul 01 18:41:09 2010 +0100
+++ b/src/dsync/dsync-brain-private.h	Thu Jul 01 18:59:12 2010 +0100
@@ -127,6 +127,7 @@
 	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 -r cfee7da47bf0 -r b37c85676f8e src/dsync/dsync-brain.c
--- a/src/dsync/dsync-brain.c	Thu Jul 01 18:41:09 2010 +0100
+++ b/src/dsync/dsync-brain.c	Thu Jul 01 18:59:12 2010 +0100
@@ -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 @@
 	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;
 }
 


More information about the dovecot-cvs mailing list