We have an indexopts structure for manipulating indexing in different ways, but we also have three command-line invocations that can trigger indexing: new, insert, and reindex. This changeset prepares a common parser that these subcommands can share. At the moment, it's just --try-decrypt, but others will likely follow. --- notmuch-client.h | 12 ++++++++++++ notmuch.c | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/notmuch-client.h b/notmuch-client.h index d17cdf01..27852360 100644 --- a/notmuch-client.h +++ b/notmuch-client.h @@ -495,4 +495,16 @@ void notmuch_exit_if_unmatched_db_uuid (notmuch_database_t *notmuch); void notmuch_process_shared_options (const char* subcommand_name); int notmuch_minimal_options (const char* subcommand_name, int argc, char **argv); + + +struct _notmuch_client_index_options { + bool try_decrypt; + bool try_decrypt_set; + notmuch_indexopts_t * opts; +}; +extern struct _notmuch_client_index_options index_options; +extern const notmuch_opt_desc_t notmuch_index_options []; +notmuch_status_t +notmuch_process_index_options (notmuch_database_t *notmuch, notmuch_config_t *config); + #endif diff --git a/notmuch.c b/notmuch.c index 02148f2e..f83b5a6f 100644 --- a/notmuch.c +++ b/notmuch.c @@ -96,6 +96,45 @@ int notmuch_minimal_options (const char *subcommand_name, return opt_index; } + +struct _notmuch_client_index_options index_options = { }; +const notmuch_opt_desc_t notmuch_index_options [] = { + { .opt_bool = &index_options.try_decrypt, + .present = &index_options.try_decrypt_set, + .name = "try-decrypt" }, + { } +}; + + +notmuch_status_t +notmuch_process_index_options (notmuch_database_t *notmuch, g_mime_3_unused(notmuch_config_t *config)) +{ + if (index_options.opts == NULL) + index_options.opts = notmuch_database_get_default_indexopts (notmuch); + if (index_options.try_decrypt_set) { + notmuch_status_t status; + if (index_options.opts == NULL) + return NOTMUCH_STATUS_OUT_OF_MEMORY; + status = notmuch_indexopts_set_try_decrypt (index_options.opts, index_options.try_decrypt); + if (status != NOTMUCH_STATUS_SUCCESS) { + fprintf (stderr, "Error: Failed to set try_decrypt to %s. (%s)\n", + index_options.try_decrypt ? "True" : "False", notmuch_status_to_string (status)); + notmuch_indexopts_destroy (index_options.opts); + return status; + } + } +#if (GMIME_MAJOR_VERSION < 3) + if (index_options.opts && notmuch_indexopts_get_try_decrypt (index_options.opts)) { + const char* gpg_path = notmuch_config_get_crypto_gpg_path (config); + if (gpg_path && strcmp(gpg_path, "gpg")) + fprintf (stderr, "Warning: deprecated crypto.gpg_path is set to '%s'\n" + "\tbut ignoring (use $PATH instead)\n", gpg_path); + } +#endif + return NOTMUCH_STATUS_SUCCESS; +} + + static command_t commands[] = { { NULL, notmuch_command, NOTMUCH_CONFIG_OPEN | NOTMUCH_CONFIG_CREATE, "Notmuch main command." }, -- 2.14.2 _______________________________________________ notmuch mailing list notmuch@notmuchmail.org https://notmuchmail.org/mailman/listinfo/notmuch