mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 20:38:08 +01:00
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.
This commit is contained in:
parent
ec738509f2
commit
5fdce046a1
3 changed files with 36 additions and 7 deletions
|
@ -74,6 +74,7 @@ typedef void (*add_files_callback_t) (notmuch_message_t *message);
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int ignore_read_only_directories;
|
int ignore_read_only_directories;
|
||||||
int saw_read_only_directory;
|
int saw_read_only_directory;
|
||||||
|
int verbose;
|
||||||
|
|
||||||
int total_files;
|
int total_files;
|
||||||
int processed_files;
|
int processed_files;
|
||||||
|
|
|
@ -179,6 +179,14 @@ add_files_recursive (notmuch_database_t *notmuch,
|
||||||
if (path_dbtime == 0 || st->st_mtime > path_dbtime) {
|
if (path_dbtime == 0 || st->st_mtime > path_dbtime) {
|
||||||
state->processed_files++;
|
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);
|
status = notmuch_database_add_message (notmuch, next, &message);
|
||||||
switch (status) {
|
switch (status) {
|
||||||
/* success */
|
/* success */
|
||||||
|
@ -274,8 +282,10 @@ add_files (notmuch_database_t *notmuch,
|
||||||
return NOTMUCH_STATUS_FILE_ERROR;
|
return NOTMUCH_STATUS_FILE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isatty (fileno (stdout)) && ! debugger_is_active ()
|
||||||
|
&& ! state->verbose)
|
||||||
|
{
|
||||||
/* Setup our handler for SIGALRM */
|
/* Setup our handler for SIGALRM */
|
||||||
if (isatty (fileno (stdout)) && ! debugger_is_active ()) {
|
|
||||||
memset (&action, 0, sizeof (struct sigaction));
|
memset (&action, 0, sizeof (struct sigaction));
|
||||||
action.sa_handler = handle_sigalrm;
|
action.sa_handler = handle_sigalrm;
|
||||||
sigemptyset (&action.sa_mask);
|
sigemptyset (&action.sa_mask);
|
||||||
|
@ -294,8 +304,8 @@ add_files (notmuch_database_t *notmuch,
|
||||||
|
|
||||||
status = add_files_recursive (notmuch, path, &st, state);
|
status = add_files_recursive (notmuch, path, &st, state);
|
||||||
|
|
||||||
/* Now stop the timer. */
|
|
||||||
if (timer_is_active) {
|
if (timer_is_active) {
|
||||||
|
/* Now stop the timer. */
|
||||||
timerval.it_interval.tv_sec = 0;
|
timerval.it_interval.tv_sec = 0;
|
||||||
timerval.it_interval.tv_usec = 0;
|
timerval.it_interval.tv_usec = 0;
|
||||||
timerval.it_value.tv_sec = 0;
|
timerval.it_value.tv_sec = 0;
|
||||||
|
@ -380,8 +390,7 @@ count_files (const char *path, int *count)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
notmuch_new_command (void *ctx,
|
notmuch_new_command (void *ctx, int argc, char *argv[])
|
||||||
unused (int argc), unused (char *argv[]))
|
|
||||||
{
|
{
|
||||||
notmuch_config_t *config;
|
notmuch_config_t *config;
|
||||||
notmuch_database_t *notmuch;
|
notmuch_database_t *notmuch;
|
||||||
|
@ -393,6 +402,18 @@ notmuch_new_command (void *ctx,
|
||||||
const char *db_path;
|
const char *db_path;
|
||||||
char *dot_notmuch_path;
|
char *dot_notmuch_path;
|
||||||
struct sigaction action;
|
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 */
|
/* Setup our handler for SIGINT */
|
||||||
memset (&action, 0, sizeof (struct sigaction));
|
memset (&action, 0, sizeof (struct sigaction));
|
||||||
|
|
11
notmuch.c
11
notmuch.c
|
@ -107,8 +107,8 @@ command_t commands[] = {
|
||||||
"\t\tInvoking notmuch with no command argument will run setup if\n"
|
"\t\tInvoking notmuch with no command argument will run setup if\n"
|
||||||
"\t\tthe setup command has not previously been completed." },
|
"\t\tthe setup command has not previously been completed." },
|
||||||
{ "new", notmuch_new_command,
|
{ "new", notmuch_new_command,
|
||||||
NULL,
|
"[--verbose]",
|
||||||
"Find and import new messages to the notmuch database.",
|
"\t\tFind and import new messages to the notmuch database.",
|
||||||
"\t\tScans all sub-directories of the mail directory, performing\n"
|
"\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\tfull-text indexing on new messages that are found. Each new\n"
|
||||||
"\t\tmessage will be tagged as both \"inbox\" and \"unread\".\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\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"
|
"\t\tThese subsequent runs will be much quicker than the initial run.\n"
|
||||||
"\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\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\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"
|
"\t\tdirectories that will not receive any new mail (and make\n"
|
||||||
|
|
Loading…
Reference in a new issue