diff options
author | Daniel Kahn Gillmor <dkg@fifthhorseman.net> | 2017-10-20 22:25:44 -0400 |
---|---|---|
committer | David Bremner <david@tethera.net> | 2017-10-21 19:58:11 -0300 |
commit | 5bdb8549f619bbcd9fcd6161749dabbb1710dab9 (patch) | |
tree | 8ebb672c31e4e4184570ec323c466856f496fd3c | |
parent | d0da7a0a1c24b937eb754e8f73e5cf7e3857f24a (diff) |
cli: set up shared command-line arguments for indexing
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.
Note: if the deprecated crypto.gpg_path configuration option is set to
anything other than "gpg", we ignore it (and print a warning on
stderr, if built against gmime < 3.0).
At the moment, it's just --try-decrypt, but others will likely follow.
-rw-r--r-- | notmuch-client.h | 14 | ||||
-rw-r--r-- | notmuch.c | 40 |
2 files changed, 54 insertions, 0 deletions
diff --git a/notmuch-client.h b/notmuch-client.h index d17cdf01..f7524e59 100644 --- a/notmuch-client.h +++ b/notmuch-client.h @@ -495,4 +495,18 @@ 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); + + +/* the state chosen by the user invoking one of the notmuch + * subcommands that does indexing */ +struct _notmuch_client_indexing_cli_choices { + bool try_decrypt; + bool try_decrypt_set; + notmuch_indexopts_t * opts; +}; +extern struct _notmuch_client_indexing_cli_choices indexing_cli_choices; +extern const notmuch_opt_desc_t notmuch_shared_indexing_options []; +notmuch_status_t +notmuch_process_shared_indexing_options (notmuch_database_t *notmuch, notmuch_config_t *config); + #endif @@ -96,6 +96,46 @@ int notmuch_minimal_options (const char *subcommand_name, return opt_index; } + +struct _notmuch_client_indexing_cli_choices indexing_cli_choices = { }; +const notmuch_opt_desc_t notmuch_shared_indexing_options [] = { + { .opt_bool = &indexing_cli_choices.try_decrypt, + .present = &indexing_cli_choices.try_decrypt_set, + .name = "try-decrypt" }, + { } +}; + + +notmuch_status_t +notmuch_process_shared_indexing_options (notmuch_database_t *notmuch, g_mime_3_unused(notmuch_config_t *config)) +{ + if (indexing_cli_choices.opts == NULL) + indexing_cli_choices.opts = notmuch_database_get_default_indexopts (notmuch); + if (indexing_cli_choices.try_decrypt_set) { + notmuch_status_t status; + if (indexing_cli_choices.opts == NULL) + return NOTMUCH_STATUS_OUT_OF_MEMORY; + status = notmuch_indexopts_set_try_decrypt (indexing_cli_choices.opts, indexing_cli_choices.try_decrypt); + if (status != NOTMUCH_STATUS_SUCCESS) { + fprintf (stderr, "Error: Failed to set try_decrypt to %s. (%s)\n", + indexing_cli_choices.try_decrypt ? "True" : "False", notmuch_status_to_string (status)); + notmuch_indexopts_destroy (indexing_cli_choices.opts); + indexing_cli_choices.opts = NULL; + return status; + } + } +#if (GMIME_MAJOR_VERSION < 3) + if (indexing_cli_choices.opts && notmuch_indexopts_get_try_decrypt (indexing_cli_choices.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." }, |