From d447b694b498c3e18a22f1eb15139a798c6aab26 Mon Sep 17 00:00:00 2001 From: David Bremner Date: Tue, 24 Aug 2021 08:17:10 -0700 Subject: [PATCH] CLI: make variable n_requested_db_uuid file scope. It turns out that now that we pass an open database into the subcommands, it is easy to check any requested uuid against the database at the same time as we process the other shared arguments. This results in overall less boilerplate code, as well as making a CLI scope function and variable file scope in notmuch.c. --- notmuch-client.h | 4 +--- notmuch-compact.c | 7 +------ notmuch-config.c | 4 ---- notmuch-count.c | 4 +--- notmuch-dump.c | 4 +--- notmuch-insert.c | 4 +--- notmuch-new.c | 4 +--- notmuch-reindex.c | 4 +--- notmuch-reply.c | 4 +--- notmuch-restore.c | 3 +-- notmuch-search.c | 6 ++---- notmuch-setup.c | 4 ---- notmuch-show.c | 4 +--- notmuch-tag.c | 4 +--- notmuch.c | 24 ++++++++++++++++++------ test/random-corpus.c | 3 ++- 16 files changed, 33 insertions(+), 54 deletions(-) diff --git a/notmuch-client.h b/notmuch-client.h index 8643a63f..f820791f 100644 --- a/notmuch-client.h +++ b/notmuch-client.h @@ -485,11 +485,9 @@ print_status_gzbytes (const char *loc, #include "command-line-arguments.h" -extern const char *notmuch_requested_db_uuid; extern const notmuch_opt_desc_t notmuch_shared_options []; -void notmuch_exit_if_unmatched_db_uuid (notmuch_database_t *notmuch); -void notmuch_process_shared_options (const char *subcommand_name); +void notmuch_process_shared_options (notmuch_database_t *notmuch, const char *subcommand_name); int notmuch_minimal_options (const char *subcommand_name, int argc, char **argv); diff --git a/notmuch-compact.c b/notmuch-compact.c index 2648434e..40ffb428 100644 --- a/notmuch-compact.c +++ b/notmuch-compact.c @@ -45,12 +45,7 @@ notmuch_compact_command (notmuch_database_t *notmuch, int argc, char *argv[]) if (opt_index < 0) return EXIT_FAILURE; - if (notmuch_requested_db_uuid) { - fprintf (stderr, "Error: --uuid not implemented for compact\n"); - return EXIT_FAILURE; - } - - notmuch_process_shared_options (argv[0]); + notmuch_process_shared_options (NULL, argv[0]); if (! quiet) printf ("Compacting database...\n"); diff --git a/notmuch-config.c b/notmuch-config.c index 4de55e5f..80a207f6 100644 --- a/notmuch-config.c +++ b/notmuch-config.c @@ -708,10 +708,6 @@ notmuch_config_command (notmuch_database_t *notmuch, int argc, char *argv[]) if (opt_index < 0) return EXIT_FAILURE; - if (notmuch_requested_db_uuid) - fprintf (stderr, "Warning: ignoring --uuid=%s\n", - notmuch_requested_db_uuid); - /* skip at least subcommand argument */ argc -= opt_index; argv += opt_index; diff --git a/notmuch-count.c b/notmuch-count.c index 5ac4292b..e8c545e3 100644 --- a/notmuch-count.c +++ b/notmuch-count.c @@ -182,7 +182,7 @@ notmuch_count_command (notmuch_database_t *notmuch, int argc, char *argv[]) if (opt_index < 0) return EXIT_FAILURE; - notmuch_process_shared_options (argv[0]); + notmuch_process_shared_options (notmuch, argv[0]); if (input_file_name) { batch = true; @@ -201,8 +201,6 @@ notmuch_count_command (notmuch_database_t *notmuch, int argc, char *argv[]) return EXIT_FAILURE; } - notmuch_exit_if_unmatched_db_uuid (notmuch); - query_str = query_string_from_args (notmuch, argc - opt_index, argv + opt_index); if (query_str == NULL) { fprintf (stderr, "Out of memory.\n"); diff --git a/notmuch-dump.c b/notmuch-dump.c index ae89e4da..5c8213be 100644 --- a/notmuch-dump.c +++ b/notmuch-dump.c @@ -366,8 +366,6 @@ notmuch_dump_command (notmuch_database_t *notmuch, int argc, char *argv[]) const char *query_str = NULL; int ret; - notmuch_exit_if_unmatched_db_uuid (notmuch); - const char *output_file_name = NULL; int opt_index; @@ -394,7 +392,7 @@ notmuch_dump_command (notmuch_database_t *notmuch, int argc, char *argv[]) if (opt_index < 0) return EXIT_FAILURE; - notmuch_process_shared_options (argv[0]); + notmuch_process_shared_options (notmuch, argv[0]); if (include == 0) include = DUMP_INCLUDE_CONFIG | DUMP_INCLUDE_TAGS | DUMP_INCLUDE_PROPERTIES; diff --git a/notmuch-insert.c b/notmuch-insert.c index e3d87e4a..72e2e35f 100644 --- a/notmuch-insert.c +++ b/notmuch-insert.c @@ -478,7 +478,7 @@ notmuch_insert_command (notmuch_database_t *notmuch, int argc, char *argv[]) if (opt_index < 0) return EXIT_FAILURE; - notmuch_process_shared_options (argv[0]); + notmuch_process_shared_options (notmuch, argv[0]); mail_root = notmuch_config_get (notmuch, NOTMUCH_CONFIG_MAIL_ROOT); @@ -550,8 +550,6 @@ notmuch_insert_command (notmuch_database_t *notmuch, int argc, char *argv[]) return EXIT_FAILURE; } - notmuch_exit_if_unmatched_db_uuid (notmuch); - status = notmuch_process_shared_indexing_options (notmuch); if (status != NOTMUCH_STATUS_SUCCESS) { fprintf (stderr, "Error: Failed to process index options. (%s)\n", diff --git a/notmuch-new.c b/notmuch-new.c index 1ee498fa..b7a5f2ea 100644 --- a/notmuch-new.c +++ b/notmuch-new.c @@ -1142,7 +1142,7 @@ notmuch_new_command (notmuch_database_t *notmuch, int argc, char *argv[]) if (opt_index < 0) return EXIT_FAILURE; - notmuch_process_shared_options (argv[0]); + notmuch_process_shared_options (notmuch, argv[0]); /* quiet trumps verbose */ if (quiet) @@ -1197,8 +1197,6 @@ notmuch_new_command (notmuch_database_t *notmuch, int argc, char *argv[]) return EXIT_FAILURE; } - notmuch_exit_if_unmatched_db_uuid (notmuch); - if (notmuch_database_get_revision (notmuch, NULL) == 0) { int count = 0; count_files (mail_root, &count, &add_files_state); diff --git a/notmuch-reindex.c b/notmuch-reindex.c index a7380a4b..b40edbb6 100644 --- a/notmuch-reindex.c +++ b/notmuch-reindex.c @@ -108,9 +108,7 @@ notmuch_reindex_command (notmuch_database_t *notmuch, int argc, char *argv[]) if (opt_index < 0) return EXIT_FAILURE; - notmuch_process_shared_options (argv[0]); - - notmuch_exit_if_unmatched_db_uuid (notmuch); + notmuch_process_shared_options (notmuch, argv[0]); status = notmuch_process_shared_indexing_options (notmuch); if (status != NOTMUCH_STATUS_SUCCESS) { diff --git a/notmuch-reply.c b/notmuch-reply.c index ebb621e0..13e38c20 100644 --- a/notmuch-reply.c +++ b/notmuch-reply.c @@ -746,7 +746,7 @@ notmuch_reply_command (notmuch_database_t *notmuch, int argc, char *argv[]) if (opt_index < 0) return EXIT_FAILURE; - notmuch_process_shared_options (argv[0]); + notmuch_process_shared_options (notmuch, argv[0]); notmuch_exit_if_unsupported_format (); @@ -761,8 +761,6 @@ notmuch_reply_command (notmuch_database_t *notmuch, int argc, char *argv[]) return EXIT_FAILURE; } - notmuch_exit_if_unmatched_db_uuid (notmuch); - query = notmuch_query_create (notmuch, query_string); if (query == NULL) { fprintf (stderr, "Out of memory\n"); diff --git a/notmuch-restore.c b/notmuch-restore.c index 1a81212f..1cce004a 100644 --- a/notmuch-restore.c +++ b/notmuch-restore.c @@ -272,8 +272,7 @@ notmuch_restore_command (notmuch_database_t *notmuch, int argc, char *argv[]) goto DONE; } - notmuch_process_shared_options (argv[0]); - notmuch_exit_if_unmatched_db_uuid (notmuch); + notmuch_process_shared_options (notmuch, argv[0]); if (include == 0) { include = DUMP_INCLUDE_CONFIG | DUMP_INCLUDE_PROPERTIES | DUMP_INCLUDE_TAGS; diff --git a/notmuch-search.c b/notmuch-search.c index 244817a9..375a247d 100644 --- a/notmuch-search.c +++ b/notmuch-search.c @@ -709,8 +709,6 @@ _notmuch_search_prepare (search_context_t *ctx, int argc, char *argv[]) notmuch_exit_if_unsupported_format (); - notmuch_exit_if_unmatched_db_uuid (ctx->notmuch); - query_str = query_string_from_args (ctx->notmuch, argc, argv); if (query_str == NULL) { fprintf (stderr, "Out of memory.\n"); @@ -827,7 +825,7 @@ notmuch_search_command (notmuch_database_t *notmuch, int argc, char *argv[]) if (opt_index < 0) return EXIT_FAILURE; - notmuch_process_shared_options (argv[0]); + notmuch_process_shared_options (notmuch, argv[0]); if (ctx->output != OUTPUT_FILES && ctx->output != OUTPUT_MESSAGES && ctx->dupe != -1) { @@ -893,7 +891,7 @@ notmuch_address_command (notmuch_database_t *notmuch, int argc, char *argv[]) if (opt_index < 0) return EXIT_FAILURE; - notmuch_process_shared_options (argv[0]); + notmuch_process_shared_options (notmuch, argv[0]); if (! (ctx->output & (OUTPUT_SENDER | OUTPUT_RECIPIENTS))) ctx->output |= OUTPUT_SENDER; diff --git a/notmuch-setup.c b/notmuch-setup.c index 28f4b7de..9382e279 100644 --- a/notmuch-setup.c +++ b/notmuch-setup.c @@ -147,10 +147,6 @@ notmuch_setup_command (notmuch_database_t *notmuch, if (notmuch_minimal_options ("setup", argc, argv) < 0) return EXIT_FAILURE; - if (notmuch_requested_db_uuid) - fprintf (stderr, "Warning: ignoring --uuid=%s\n", - notmuch_requested_db_uuid); - config = notmuch_conffile_open (notmuch, notmuch_config_path (notmuch), true); if (! config) diff --git a/notmuch-show.c b/notmuch-show.c index c8f1a40f..667fbee8 100644 --- a/notmuch-show.c +++ b/notmuch-show.c @@ -1287,7 +1287,7 @@ notmuch_show_command (notmuch_database_t *notmuch, int argc, char *argv[]) if (opt_index < 0) return EXIT_FAILURE; - notmuch_process_shared_options (argv[0]); + notmuch_process_shared_options (notmuch, argv[0]); /* explicit decryption implies verification */ if (params.crypto.decrypt == NOTMUCH_DECRYPT_NOSTASH || @@ -1353,8 +1353,6 @@ notmuch_show_command (notmuch_database_t *notmuch, int argc, char *argv[]) } } - notmuch_exit_if_unmatched_db_uuid (notmuch); - query_string = query_string_from_args (notmuch, argc - opt_index, argv + opt_index); if (query_string == NULL) { fprintf (stderr, "Out of memory\n"); diff --git a/notmuch-tag.c b/notmuch-tag.c index de428c8e..aa886032 100644 --- a/notmuch-tag.c +++ b/notmuch-tag.c @@ -220,7 +220,7 @@ notmuch_tag_command (notmuch_database_t *notmuch, int argc, char *argv[]) if (opt_index < 0) return EXIT_FAILURE; - notmuch_process_shared_options (argv[0]); + notmuch_process_shared_options (notmuch, argv[0]); if (input_file_name) { batch = true; @@ -261,8 +261,6 @@ notmuch_tag_command (notmuch_database_t *notmuch, int argc, char *argv[]) } } - notmuch_exit_if_unmatched_db_uuid (notmuch); - if (print_status_database ( "notmuch restore", notmuch, diff --git a/notmuch.c b/notmuch.c index 1404b70c..3824bf19 100644 --- a/notmuch.c +++ b/notmuch.c @@ -49,8 +49,11 @@ notmuch_command (notmuch_database_t *notmuch, int argc, char *argv[]); static int _help_for (const char *topic); +static void +notmuch_exit_if_unmatched_db_uuid (notmuch_database_t *notmuch); + static bool print_version = false, print_help = false; -const char *notmuch_requested_db_uuid = NULL; +static const char *notmuch_requested_db_uuid = NULL; const notmuch_opt_desc_t notmuch_shared_options [] = { { .opt_bool = &print_version, .name = "version" }, @@ -61,10 +64,11 @@ const notmuch_opt_desc_t notmuch_shared_options [] = { /* any subcommand wanting to support these options should call * inherit notmuch_shared_options and call - * notmuch_process_shared_options (subcommand_name); + * notmuch_process_shared_options (notmuch, subcommand_name); + * with notmuch = an open database, or NULL. */ void -notmuch_process_shared_options (const char *subcommand_name) +notmuch_process_shared_options (notmuch_database_t *notmuch, const char *subcommand_name) { if (print_version) { printf ("notmuch " STRINGIFY (NOTMUCH_VERSION) "\n"); @@ -75,6 +79,14 @@ notmuch_process_shared_options (const char *subcommand_name) int ret = _help_for (subcommand_name); exit (ret); } + + if (notmuch) { + notmuch_exit_if_unmatched_db_uuid (notmuch); + } else { + if (notmuch_requested_db_uuid) + fprintf (stderr, "Warning: ignoring --uuid=%s\n", + notmuch_requested_db_uuid); + } } /* This is suitable for subcommands that do not actually open the @@ -97,7 +109,7 @@ notmuch_minimal_options (const char *subcommand_name, return -1; /* We can't use argv here as it is sometimes NULL */ - notmuch_process_shared_options (subcommand_name); + notmuch_process_shared_options (NULL, subcommand_name); return opt_index; } @@ -280,7 +292,7 @@ be supported in the future.\n", notmuch_format_version); } } -void +static void notmuch_exit_if_unmatched_db_uuid (notmuch_database_t *notmuch) { const char *uuid = NULL; @@ -480,7 +492,7 @@ main (int argc, char *argv[]) if (opt_index < argc) command_name = argv[opt_index]; - notmuch_process_shared_options (command_name); + notmuch_process_shared_options (NULL, command_name); command = find_command (command_name); /* if command->function is NULL, try external command */ diff --git a/test/random-corpus.c b/test/random-corpus.c index 7cde22c5..8ae08971 100644 --- a/test/random-corpus.c +++ b/test/random-corpus.c @@ -122,7 +122,8 @@ const notmuch_opt_desc_t notmuch_shared_options[] = { const char *notmuch_requested_db_uuid = NULL; void -notmuch_process_shared_options (unused (const char *dummy)) +notmuch_process_shared_options (unused (notmuch_database_t *notmuch), + unused (const char *dummy)) { }