From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by olra.theworths.org (Postfix) with ESMTP id DC56B431FBC for ; Sun, 22 Nov 2009 16:09:36 -0800 (PST) X-Virus-Scanned: Debian amavisd-new at olra.theworths.org Received: from olra.theworths.org ([127.0.0.1]) by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id BE2jBL0gfPEr for ; Sun, 22 Nov 2009 16:09:36 -0800 (PST) Received: from alice.connectical.com (alice.connectical.com [208.89.208.235]) by olra.theworths.org (Postfix) with ESMTP id 2E0DE431FAE for ; Sun, 22 Nov 2009 16:09:36 -0800 (PST) Received: (qmail 1559 invoked from network); 23 Nov 2009 00:09:27 -0000 Received: from 28.218.27.77.dynamic.mundo-r.com (HELO hikari.localdomain) (aperez@77.27.218.28) by alice.connectical.com with ESMTPA; 23 Nov 2009 00:09:27 -0000 Received: by hikari.localdomain (Postfix, from userid 500) id D6575310915F; Mon, 23 Nov 2009 01:10:44 +0100 (CET) From: Adrian Perez To: notmuch@notmuchmail.org Date: Mon, 23 Nov 2009 01:10:44 +0100 Message-Id: <1258935044-30169-1-git-send-email-aperez@igalia.com> X-Mailer: git-send-email 1.6.5.2 In-Reply-To: <1258762638-22905-1-git-send-email-aperez@igalia.com> References: <1258762638-22905-1-git-send-email-aperez@igalia.com> Subject: [PATCH] Support for printing file paths in new command X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Nov 2009 00:09:37 -0000 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. * When output is not being sent to a terminal, then each file processed is printed in a new line and ANSI escapes are not used at all. * 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. --- notmuch-client.h | 2 ++ notmuch-new.c | 32 +++++++++++++++++++++++++++++--- notmuch.c | 11 +++++++++-- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/notmuch-client.h b/notmuch-client.h index ea77686..4fe182e 100644 --- a/notmuch-client.h +++ b/notmuch-client.h @@ -74,6 +74,8 @@ typedef void (*add_files_callback_t) (notmuch_message_t *message); typedef struct { int ignore_read_only_directories; int saw_read_only_directory; + int output_is_a_tty; + int verbose; int total_files; int processed_files; diff --git a/notmuch-new.c b/notmuch-new.c index 0dd2784..b5c6cc6 100644 --- a/notmuch-new.c +++ b/notmuch-new.c @@ -179,6 +179,19 @@ add_files_recursive (notmuch_database_t *notmuch, if (path_dbtime == 0 || st->st_mtime > path_dbtime) { state->processed_files++; + if (state->verbose) { + if (state->output_is_a_tty) + printf("\r\033[K"); + + printf ("%i/%i: %s", + state->processed_files, + state->total_files, + next); + + putchar((state->output_is_a_tty) ? '\r' : '\n'); + fflush (stdout); + } + status = notmuch_database_add_message (notmuch, next, &message); switch (status) { /* success */ @@ -275,7 +288,7 @@ add_files (notmuch_database_t *notmuch, } /* Setup our handler for SIGALRM */ - if (isatty (fileno (stdout)) && ! debugger_is_active ()) { + if (state->output_is_a_tty && ! debugger_is_active () && ! state->verbose) { memset (&action, 0, sizeof (struct sigaction)); action.sa_handler = handle_sigalrm; sigemptyset (&action.sa_mask); @@ -296,6 +309,7 @@ add_files (notmuch_database_t *notmuch, /* 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 +394,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 +406,19 @@ notmuch_new_command (void *ctx, const char *db_path; char *dot_notmuch_path; struct sigaction action; + int i; + + add_files_state.verbose = 0; + add_files_state.output_is_a_tty = isatty (fileno (stdout)); + + 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)); diff --git a/notmuch.c b/notmuch.c index 5cc8e4c..8cb1310 100644 --- a/notmuch.c +++ b/notmuch.c @@ -107,8 +107,8 @@ command_t commands[] = { "\t\tInvoking notmuch with no command argument will run setup if\n" "\t\tthe setup command has not previously been completed." }, { "new", notmuch_new_command, - NULL, - "Find and import new messages to the notmuch database.", + "[--verbose]", + "\t\tFind and import new messages to the notmuch database.", "\t\tScans all sub-directories of the mail directory, performing\n" "\t\tfull-text indexing on new messages that are found. Each new\n" "\t\tmessage will be tagged as both \"inbox\" and \"unread\".\n" @@ -122,6 +122,13 @@ command_t commands[] = { "\t\tis delivered and you wish to incorporate it into the database.\n" "\t\tThese subsequent runs will be much quicker than the initial run.\n" "\n" + "\t\tSupported options for new include:\n" + "\n" + "\t\t--verbose\n" + "\n" + "\t\t\tVerbose operation. Shows paths of message files as\n" + "\t\t\tthey are being indexed.\n" + "\n" "\t\tNote: \"notmuch new\" runs (other than the first run) will\n" "\t\tskip any read-only directories, so you can use that to mark\n" "\t\tdirectories that will not receive any new mail (and make\n" -- 1.6.5.2