* 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_config_t *config, notmuch_database_t *notmuch,
+ int argc, char *argv[]);
typedef struct command {
const char *name;
notmuch_status_t status;
if (indexing_cli_choices.opts == NULL)
return NOTMUCH_STATUS_OUT_OF_MEMORY;
- status = notmuch_indexopts_set_decrypt_policy (indexing_cli_choices.opts, indexing_cli_choices.decrypt_policy);
+ status = notmuch_indexopts_set_decrypt_policy (indexing_cli_choices.opts,
+ indexing_cli_choices.decrypt_policy);
if (status != NOTMUCH_STATUS_SUCCESS) {
fprintf (stderr, "Error: Failed to set index decryption policy to %d. (%s)\n",
indexing_cli_choices.decrypt_policy, notmuch_status_to_string (status));
"Notmuch main command." },
{ "setup", notmuch_setup_command, NOTMUCH_COMMAND_CONFIG_OPEN | NOTMUCH_COMMAND_CONFIG_CREATE,
"Interactively set up notmuch for first use." },
- { "new", notmuch_new_command, NOTMUCH_COMMAND_CONFIG_OPEN,
+ { "new", notmuch_new_command,
+ NOTMUCH_COMMAND_DATABASE_EARLY | NOTMUCH_COMMAND_DATABASE_WRITE |
+ NOTMUCH_COMMAND_DATABASE_CREATE,
"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,
+ { "tag", notmuch_tag_command, NOTMUCH_COMMAND_DATABASE_EARLY | NOTMUCH_COMMAND_DATABASE_WRITE,
"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", notmuch_compact_command, NOTMUCH_COMMAND_DATABASE_EARLY |
+ NOTMUCH_COMMAND_DATABASE_WRITE,
"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." },
notmuch_exit_if_unsupported_format (void)
{
if (notmuch_format_version > NOTMUCH_FORMAT_CUR) {
- fprintf (stderr, "\
+ fprintf (stderr,
+ "\
A caller requested output format version %d, but the installed notmuch\n\
CLI only supports up to format version %d. You may need to upgrade your\n\
notmuch CLI.\n",
notmuch_format_version, NOTMUCH_FORMAT_CUR);
exit (NOTMUCH_EXIT_FORMAT_TOO_NEW);
} else if (notmuch_format_version < NOTMUCH_FORMAT_MIN) {
- fprintf (stderr, "\
+ fprintf (stderr,
+ "\
A caller requested output format version %d, which is no longer supported\n\
by the notmuch CLI (it requires at least version %d). You may need to\n\
upgrade your notmuch front-end.\n",
/* Warn about old version requests so compatibility issues are
* less likely when we drop support for a deprecated format
* versions. */
- fprintf (stderr, "\
+ fprintf (stderr,
+ "\
A caller requested deprecated output format version %d, which may not\n\
be supported in the future.\n", notmuch_format_version);
}
}
static int
-notmuch_help_command (unused (notmuch_config_t *config), unused(notmuch_database_t *notmuch), int argc, char *argv[])
+notmuch_help_command (unused (notmuch_config_t *config), unused(notmuch_database_t *notmuch), int
+ argc, char *argv[])
{
int opt_index;
if (command->mode & NOTMUCH_COMMAND_DATABASE_EARLY) {
char *status_string = NULL;
notmuch_database_mode_t mode;
- if (command->mode & NOTMUCH_COMMAND_DATABASE_WRITE)
+ notmuch_status_t status;
+
+ 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 (notmuch_database_open_with_config (NULL,
- mode,
- config_file_name,
- NULL,
- ¬much,
- &status_string)) {
- if (status_string) {
- fputs (status_string, stderr);
- free (status_string);
+ 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;
}
+ }
- 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);