+ if (command->mode & NOTMUCH_COMMAND_DATABASE_WRITE ||
+ command->mode & NOTMUCH_COMMAND_DATABASE_CREATE)
+ mode = NOTMUCH_DATABASE_MODE_READ_WRITE;
+ else
+ mode = NOTMUCH_DATABASE_MODE_READ_ONLY;
+
+ if (command->mode & NOTMUCH_COMMAND_DATABASE_CREATE) {
+ status = notmuch_database_create_with_config (NULL,
+ config_file_name,
+ NULL,
+ ¬much,
+ &status_string);
+ if (status && status != NOTMUCH_STATUS_DATABASE_EXISTS) {
+ if (status_string) {
+ fputs (status_string, stderr);
+ free (status_string);
+ }
+
+ if (status == NOTMUCH_STATUS_NO_CONFIG)
+ fputs ("Try running 'notmuch setup' to create a configuration.", stderr);
+
+ return EXIT_FAILURE;
+ }
+ }
+
+ if (notmuch == NULL) {
+ status = notmuch_database_open_with_config (NULL,
+ mode,
+ config_file_name,
+ NULL,
+ ¬much,
+ &status_string);
+ if (status) {
+ if (status_string) {
+ fputs (status_string, stderr);
+ free (status_string);
+ }
+
+ 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);