]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch.c
ruby: improve general data get helper
[notmuch] / notmuch.c
index bcb4b768d3b161b8b3f825190a2d531277116efe..2429999c2694345dd71b556e282b6dbb5a943dbe 100644 (file)
--- a/notmuch.c
+++ b/notmuch.c
@@ -31,8 +31,7 @@
  * Each subcommand should be passed either a config object, or an open
  * database
  */
-typedef int (*command_function_t) (notmuch_config_t *config, notmuch_database_t *notmuch,
-                                  int argc, char *argv[]);
+typedef int (*command_function_t) (notmuch_database_t *notmuch, int argc, char *argv[]);
 
 typedef struct command {
     const char *name;
@@ -42,10 +41,10 @@ typedef struct command {
 } command_t;
 
 static int
-notmuch_help_command (notmuch_config_t *config, notmuch_database_t *notmuch, int argc, char *argv[]);
+notmuch_help_command (notmuch_database_t *notmuch, int argc, char *argv[]);
 
 static int
-notmuch_command (notmuch_config_t *config, notmuch_database_t *notmuch, int argc, char *argv[]);
+notmuch_command (notmuch_database_t *notmuch, int argc, char *argv[]);
 
 static int
 _help_for (const char *topic);
@@ -141,11 +140,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 +174,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,
@@ -351,8 +348,7 @@ _help_for (const char *topic_name)
 }
 
 static int
-notmuch_help_command (unused (notmuch_config_t *config), unused(notmuch_database_t *notmuch), int
-                     argc, char *argv[])
+notmuch_help_command (unused(notmuch_database_t *notmuch), int argc, char *argv[])
 {
     int opt_index;
 
@@ -376,15 +372,25 @@ 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_database_t *notmuch,
+notmuch_command (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 (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"
@@ -448,13 +454,12 @@ main (int argc, char *argv[])
     const char *command_name = NULL;
     command_t *command;
     const char *config_file_name = NULL;
-    notmuch_config_t *config = NULL;
     notmuch_database_t *notmuch = NULL;
     int opt_index;
     int ret = EXIT_SUCCESS;
 
     notmuch_opt_desc_t options[] = {
-       { .opt_string = &config_file_name, .name = "config" },
+       { .opt_string = &config_file_name, .name = "config", .allow_empty = TRUE },
        { .opt_inherit = notmuch_shared_options },
        { }
     };
@@ -580,19 +585,9 @@ main (int argc, char *argv[])
 
     }
 
-    if (command->mode & NOTMUCH_COMMAND_CONFIG_OPEN) {
-       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);
+    ret = (command->function)(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