aboutsummaryrefslogtreecommitdiffhomepage
path: root/notmuch-new.c
diff options
context:
space:
mode:
authorGravatar Adrian Perez <aperez@igalia.com>2009-11-21 01:17:18 +0100
committerGravatar Carl Worth <cworth@cworth.org>2009-11-23 01:07:02 +0100
commit5fdce046a189f6232c1bd2f89a6df04e02b226f0 (patch)
tree7a427d35ed0c643aed95e41dfbb325fced9dd647 /notmuch-new.c
parentec738509f291fb6563013cc530d7930cfe6495fb (diff)
Support for printing file paths in new command
For very large mail boxes, it is desirable to know which files are being processed e.g. when a crash occurs to know which one was the cause. Also, it may be interesting to have a better idea of how the operation is progressing when processing mailboxes with big messages. This patch adds support for printing messages as they are processed by "notmuch new": * The "new" command now supports a "--verbose" flag. * When running in verbose mode, the file path of the message about to be processed is printed in the following format: current/total: /path/to/message/file Where "current" is the number of messages processed so far and "total" is the total count of files to be processed. The status line is erased using an ANSI sequence "\033[K" (erase current line from the cursor to the end of line) each time it is refreshed. This should not pose a problem because nearly every terminal supports it. * The signal handler for SIGALRM and the timer are not enabled when running in verbose mode, because we are already printing progress with each file, periodical reports are not neccessary.
Diffstat (limited to 'notmuch-new.c')
-rw-r--r--notmuch-new.c31
1 files changed, 26 insertions, 5 deletions
diff --git a/notmuch-new.c b/notmuch-new.c
index 0dd27844..a2b30bdc 100644
--- a/notmuch-new.c
+++ b/notmuch-new.c
@@ -179,6 +179,14 @@ add_files_recursive (notmuch_database_t *notmuch,
if (path_dbtime == 0 || st->st_mtime > path_dbtime) {
state->processed_files++;
+ if (state->verbose) {
+ printf ("\r\033[K%i/%i: %s\r",
+ state->processed_files,
+ state->total_files,
+ next);
+ fflush (stdout);
+ }
+
status = notmuch_database_add_message (notmuch, next, &message);
switch (status) {
/* success */
@@ -274,8 +282,10 @@ add_files (notmuch_database_t *notmuch,
return NOTMUCH_STATUS_FILE_ERROR;
}
- /* Setup our handler for SIGALRM */
- if (isatty (fileno (stdout)) && ! debugger_is_active ()) {
+ if (isatty (fileno (stdout)) && ! debugger_is_active ()
+ && ! state->verbose)
+ {
+ /* Setup our handler for SIGALRM */
memset (&action, 0, sizeof (struct sigaction));
action.sa_handler = handle_sigalrm;
sigemptyset (&action.sa_mask);
@@ -294,8 +304,8 @@ add_files (notmuch_database_t *notmuch,
status = add_files_recursive (notmuch, path, &st, state);
- /* Now stop the timer. */
if (timer_is_active) {
+ /* Now stop the timer. */
timerval.it_interval.tv_sec = 0;
timerval.it_interval.tv_usec = 0;
timerval.it_value.tv_sec = 0;
@@ -380,8 +390,7 @@ count_files (const char *path, int *count)
}
int
-notmuch_new_command (void *ctx,
- unused (int argc), unused (char *argv[]))
+notmuch_new_command (void *ctx, int argc, char *argv[])
{
notmuch_config_t *config;
notmuch_database_t *notmuch;
@@ -393,6 +402,18 @@ notmuch_new_command (void *ctx,
const char *db_path;
char *dot_notmuch_path;
struct sigaction action;
+ int i;
+
+ add_files_state.verbose = 0;
+
+ for (i = 0; i < argc && argv[i][0] == '-'; i++) {
+ if (STRNCMP_LITERAL (argv[i], "--verbose") == 0) {
+ add_files_state.verbose = 1;
+ } else {
+ fprintf (stderr, "Unrecognized option: %s\n", argv[i]);
+ return 1;
+ }
+ }
/* Setup our handler for SIGINT */
memset (&action, 0, sizeof (struct sigaction));