X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=notmuch.c;h=ff9ad18b5d36ea0fb32dbbd4c52cb967b608e415;hb=8d5b8753cf9292d7b316bee7d3de2239d6b41e6d;hp=f2bf9c24a11fe03a5e6b02f62fa650f628d7d8b7;hpb=6e6c319c260b779e6e91905f8c142ad2b82a41c9;p=notmuch diff --git a/notmuch.c b/notmuch.c index f2bf9c24..ff9ad18b 100644 --- a/notmuch.c +++ b/notmuch.c @@ -141,9 +141,11 @@ notmuch_process_shared_indexing_options (notmuch_database_t *notmuch) static command_t commands[] = { - { NULL, notmuch_command, NOTMUCH_COMMAND_CONFIG_OPEN | NOTMUCH_COMMAND_CONFIG_CREATE, + { NULL, notmuch_command, NOTMUCH_COMMAND_CONFIG_OPEN | NOTMUCH_COMMAND_CONFIG_CREATE + | NOTMUCH_COMMAND_CONFIG_LOAD, "Notmuch main command." }, - { "setup", notmuch_setup_command, NOTMUCH_COMMAND_CONFIG_OPEN | NOTMUCH_COMMAND_CONFIG_CREATE, + { "setup", notmuch_setup_command, NOTMUCH_COMMAND_CONFIG_OPEN | NOTMUCH_COMMAND_CONFIG_CREATE + | NOTMUCH_COMMAND_CONFIG_LOAD, "Interactively set up notmuch for first use." }, { "new", notmuch_new_command, NOTMUCH_COMMAND_DATABASE_EARLY | NOTMUCH_COMMAND_DATABASE_WRITE | @@ -175,7 +177,7 @@ static command_t commands[] = { { "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, + { "config", notmuch_config_command, NOTMUCH_COMMAND_CONFIG_OPEN | NOTMUCH_COMMAND_CONFIG_LOAD, "Get or set settings in the notmuch configuration file." }, #if WITH_EMACS { "emacs-mua", NULL, 0, @@ -375,7 +377,7 @@ notmuch_help_command (unused (notmuch_config_t *config), unused(notmuch_database */ static int notmuch_command (notmuch_config_t *config, - unused(notmuch_database_t *notmuch), + notmuch_database_t *notmuch, unused(int argc), unused(char **argv)) { char *db_path; @@ -385,11 +387,11 @@ notmuch_command (notmuch_config_t *config, * notmuch_setup_command which will give a nice welcome message, * and interactively guide the user through the configuration. */ if (notmuch_config_is_new (config)) - return notmuch_setup_command (config, NULL, 0, NULL); + return notmuch_setup_command (config, notmuch, 0, NULL); /* Notmuch is already configured, but is there a database? */ db_path = talloc_asprintf (config, "%s/%s", - notmuch_config_get_database_path (config), + notmuch_config_get (notmuch, NOTMUCH_CONFIG_DATABASE_PATH), ".notmuch"); if (stat (db_path, &st)) { if (errno != ENOENT) { @@ -420,8 +422,8 @@ notmuch_command (notmuch_config_t *config, "or any other interface described at https://notmuchmail.org\n\n" "And don't forget to run \"notmuch new\" whenever new mail arrives.\n\n" "Have fun, and may your inbox never have much mail.\n\n", - notmuch_config_get_user_name (config), - notmuch_config_get_user_primary_email (config)); + notmuch_config_get (notmuch, NOTMUCH_CONFIG_USER_NAME), + notmuch_config_get (notmuch, NOTMUCH_CONFIG_PRIMARY_EMAIL)); return EXIT_SUCCESS; } @@ -471,7 +473,7 @@ main (int argc, char *argv[]) notmuch_config_t *config = NULL; notmuch_database_t *notmuch = NULL; int opt_index; - int ret; + int ret = EXIT_SUCCESS; notmuch_opt_desc_t options[] = { { .opt_string = &config_file_name, .name = "config" }, @@ -559,8 +561,34 @@ main (int argc, char *argv[]) return EXIT_FAILURE; } } - } else { - config = notmuch_config_open (local, config_file_name, command->mode); + } + + if (command->mode & NOTMUCH_COMMAND_CONFIG_LOAD) { + char *status_string = NULL; + notmuch_status_t status; + status = notmuch_database_load_config (NULL, + config_file_name, + NULL, + ¬much, + &status_string); + + if (status == NOTMUCH_STATUS_NO_CONFIG && ! (command->mode & NOTMUCH_COMMAND_CONFIG_CREATE)) { + fputs ("Try running 'notmuch setup' to create a configuration.", stderr); + goto DONE; + } + + if (status && (status != NOTMUCH_STATUS_NO_CONFIG)) { + if (status_string) { + fputs (status_string, stderr); + free (status_string); + } + goto DONE; + } + + } + + if (command->mode & NOTMUCH_COMMAND_CONFIG_OPEN) { + config = notmuch_config_open (notmuch, config_file_name, command->mode); if (! config) { ret = EXIT_FAILURE; goto DONE;