X-Git-Url: https://git.cworth.org/git?p=notmuch;a=blobdiff_plain;f=notmuch.c;h=16504fc599a25a4bf10527051653480540ee32cb;hp=fd4a7945e7b61ee90589e670261717c352306514;hb=d613d10ddd5948b4fa5a186fc54752047b25023d;hpb=319efe21c9d2754c99951cecc71184faf7ca9054 diff --git a/notmuch.c b/notmuch.c index fd4a7945..16504fc5 100644 --- a/notmuch.c +++ b/notmuch.c @@ -145,27 +145,27 @@ static command_t commands[] = { "Interactively set up notmuch for first use." }, { "new", notmuch_new_command, NOTMUCH_COMMAND_CONFIG_OPEN, "Find and import new messages to the notmuch database." }, - { "insert", notmuch_insert_command, NOTMUCH_COMMAND_CONFIG_OPEN, + { "insert", notmuch_insert_command, NOTMUCH_COMMAND_DATABASE_EARLY | NOTMUCH_COMMAND_DATABASE_WRITE, "Add a new message into the maildir and notmuch database." }, - { "search", notmuch_search_command, NOTMUCH_COMMAND_CONFIG_OPEN, + { "search", notmuch_search_command, NOTMUCH_COMMAND_DATABASE_EARLY, "Search for messages matching the given search terms." }, - { "address", notmuch_address_command, NOTMUCH_COMMAND_CONFIG_OPEN, + { "address", notmuch_address_command, NOTMUCH_COMMAND_DATABASE_EARLY, "Get addresses from messages matching the given search terms." }, { "show", notmuch_show_command, NOTMUCH_COMMAND_CONFIG_OPEN, "Show all messages matching the search terms." }, - { "count", notmuch_count_command, NOTMUCH_COMMAND_CONFIG_OPEN, + { "count", notmuch_count_command, NOTMUCH_COMMAND_DATABASE_EARLY, "Count messages matching the search terms." }, - { "reply", notmuch_reply_command, NOTMUCH_COMMAND_CONFIG_OPEN, + { "reply", notmuch_reply_command, NOTMUCH_COMMAND_DATABASE_EARLY, "Construct a reply template for a set of messages." }, { "tag", notmuch_tag_command, NOTMUCH_COMMAND_CONFIG_OPEN, "Add/remove tags for all messages matching the search terms." }, - { "dump", notmuch_dump_command, NOTMUCH_COMMAND_CONFIG_OPEN, + { "dump", notmuch_dump_command, NOTMUCH_COMMAND_DATABASE_EARLY | NOTMUCH_COMMAND_DATABASE_WRITE, "Create a plain-text dump of the tags for each message." }, - { "restore", notmuch_restore_command, NOTMUCH_COMMAND_CONFIG_OPEN, + { "restore", notmuch_restore_command, NOTMUCH_COMMAND_DATABASE_EARLY | NOTMUCH_COMMAND_DATABASE_WRITE, "Restore the tags from the given dump file (see 'dump')." }, { "compact", notmuch_compact_command, NOTMUCH_COMMAND_CONFIG_OPEN, "Compact the notmuch database." }, - { "reindex", notmuch_reindex_command, NOTMUCH_COMMAND_CONFIG_OPEN, + { "reindex", notmuch_reindex_command, NOTMUCH_COMMAND_DATABASE_EARLY | NOTMUCH_COMMAND_DATABASE_WRITE, "Re-index all messages matching the search terms." }, { "config", notmuch_config_command, NOTMUCH_COMMAND_CONFIG_OPEN, "Get or set settings in the notmuch configuration file." }, @@ -457,6 +457,7 @@ main (int argc, char *argv[]) command_t *command; const char *config_file_name = NULL; notmuch_config_t *config = NULL; + notmuch_database_t *notmuch = NULL; int opt_index; int ret; @@ -500,13 +501,35 @@ main (int argc, char *argv[]) goto DONE; } - config = notmuch_config_open (local, config_file_name, command->mode); - if (! config) { - ret = EXIT_FAILURE; - goto DONE; - } + if (command->mode & NOTMUCH_COMMAND_DATABASE_EARLY) { + char *status_string = NULL; + notmuch_database_mode_t mode; + if (command->mode & NOTMUCH_COMMAND_DATABASE_WRITE) + mode = NOTMUCH_DATABASE_MODE_READ_WRITE; + else + mode = NOTMUCH_DATABASE_MODE_READ_ONLY; + + if (notmuch_database_open_with_config (NULL, + mode, + config_file_name, + NULL, + ¬much, + &status_string)) { + if (status_string) { + fputs (status_string, stderr); + free (status_string); + } - ret = (command->function)(config, NULL, argc - opt_index, argv + opt_index); + return EXIT_FAILURE; + } + } else { + config = notmuch_config_open (local, config_file_name, command->mode); + if (! config) { + ret = EXIT_FAILURE; + goto DONE; + } + } + ret = (command->function)(config, notmuch, argc - opt_index, argv + opt_index); DONE: if (config)