aboutsummaryrefslogtreecommitdiff
path: root/notmuch.c
diff options
context:
space:
mode:
authorDavid Bremner <david@tethera.net>2021-02-27 09:22:32 -0400
committerDavid Bremner <david@tethera.net>2021-04-06 21:32:36 -0300
commitec4b7efbe4bd6d50bd6046bac5f7ef4ceaa30154 (patch)
treeeddfc4417ad06ddb22498aeabaef37c15810781a /notmuch.c
parent77d4b26d3e374afac0012148a8ac0a08158406f1 (diff)
CLI/config: remove calls to notmuch_config_open from top level
This will allow simplifying the subcommand interface. Change the internal API to notmuch_config_open to not tie it to the implementation of subcommands in notmuch.c. It also fixes a previously broken test, since notmuch_config_open does not understand the notion of the empty string as a config file name.
Diffstat (limited to 'notmuch.c')
-rw-r--r--notmuch.c40
1 files changed, 18 insertions, 22 deletions
diff --git a/notmuch.c b/notmuch.c
index 61663908..757d0eae 100644
--- a/notmuch.c
+++ b/notmuch.c
@@ -141,11 +141,9 @@ notmuch_process_shared_indexing_options (notmuch_database_t *notmuch)
static command_t commands[] = {
- { NULL, notmuch_command, NOTMUCH_COMMAND_CONFIG_OPEN | NOTMUCH_COMMAND_CONFIG_CREATE
- | NOTMUCH_COMMAND_CONFIG_LOAD,
+ { NULL, notmuch_command, NOTMUCH_COMMAND_CONFIG_CREATE | NOTMUCH_COMMAND_CONFIG_LOAD,
"Notmuch main command." },
- { "setup", notmuch_setup_command, NOTMUCH_COMMAND_CONFIG_OPEN | NOTMUCH_COMMAND_CONFIG_CREATE
- | NOTMUCH_COMMAND_CONFIG_LOAD,
+ { "setup", notmuch_setup_command, 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 |
@@ -177,7 +175,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 | NOTMUCH_COMMAND_CONFIG_LOAD,
+ { "config", notmuch_config_command, NOTMUCH_COMMAND_CONFIG_LOAD,
"Get or set settings in the notmuch configuration file." },
#if WITH_EMACS
{ "emacs-mua", NULL, 0,
@@ -376,15 +374,26 @@ notmuch_help_command (unused (notmuch_config_t *config), unused(notmuch_database
* to be more clever about this in the future.
*/
static int
-notmuch_command (notmuch_config_t *config,
+notmuch_command (unused(notmuch_config_t *config),
notmuch_database_t *notmuch,
unused(int argc), unused(char **argv))
{
- /* If the user has never configured notmuch, then run
+
+ const char *config_path;
+
+ /* If the user has not created a configuration file, then run
* 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, notmuch, 0, NULL);
+ config_path = notmuch_config_path (notmuch);
+ if (access (config_path, R_OK | F_OK) == -1) {
+ if (errno != ENOENT) {
+ fprintf (stderr, "Error: %s config file access failed: %s\n", config_path,
+ strerror (errno));
+ return EXIT_FAILURE;
+ } else {
+ return notmuch_setup_command (NULL, notmuch, 0, NULL);
+ }
+ }
printf ("Notmuch is configured and appears to have a database. Excellent!\n\n"
"At this point you can start exploring the functionality of notmuch by\n"
@@ -580,22 +589,9 @@ main (int argc, char *argv[])
}
- if (command->mode & NOTMUCH_COMMAND_CONFIG_OPEN) {
- if (! config_file_name)
- config_file_name = notmuch_config_path (notmuch);
-
- config = notmuch_config_open (notmuch, 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)
- notmuch_config_close (config);
-
talloc_report = getenv ("NOTMUCH_TALLOC_REPORT");
if (talloc_report && strcmp (talloc_report, "") != 0) {
/* this relies on the previous call to