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.
This commit is contained in:
David Bremner 2021-08-24 08:17:10 -07:00
parent 005c620118
commit d447b694b4
16 changed files with 33 additions and 54 deletions

View file

@ -485,11 +485,9 @@ print_status_gzbytes (const char *loc,
#include "command-line-arguments.h" #include "command-line-arguments.h"
extern const char *notmuch_requested_db_uuid;
extern const notmuch_opt_desc_t notmuch_shared_options []; 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 notmuch_minimal_options (const char *subcommand_name,
int argc, char **argv); int argc, char **argv);

View file

@ -45,12 +45,7 @@ notmuch_compact_command (notmuch_database_t *notmuch, int argc, char *argv[])
if (opt_index < 0) if (opt_index < 0)
return EXIT_FAILURE; return EXIT_FAILURE;
if (notmuch_requested_db_uuid) { notmuch_process_shared_options (NULL, argv[0]);
fprintf (stderr, "Error: --uuid not implemented for compact\n");
return EXIT_FAILURE;
}
notmuch_process_shared_options (argv[0]);
if (! quiet) if (! quiet)
printf ("Compacting database...\n"); printf ("Compacting database...\n");

View file

@ -708,10 +708,6 @@ notmuch_config_command (notmuch_database_t *notmuch, int argc, char *argv[])
if (opt_index < 0) if (opt_index < 0)
return EXIT_FAILURE; return EXIT_FAILURE;
if (notmuch_requested_db_uuid)
fprintf (stderr, "Warning: ignoring --uuid=%s\n",
notmuch_requested_db_uuid);
/* skip at least subcommand argument */ /* skip at least subcommand argument */
argc -= opt_index; argc -= opt_index;
argv += opt_index; argv += opt_index;

View file

@ -182,7 +182,7 @@ notmuch_count_command (notmuch_database_t *notmuch, int argc, char *argv[])
if (opt_index < 0) if (opt_index < 0)
return EXIT_FAILURE; return EXIT_FAILURE;
notmuch_process_shared_options (argv[0]); notmuch_process_shared_options (notmuch, argv[0]);
if (input_file_name) { if (input_file_name) {
batch = true; batch = true;
@ -201,8 +201,6 @@ notmuch_count_command (notmuch_database_t *notmuch, int argc, char *argv[])
return EXIT_FAILURE; return EXIT_FAILURE;
} }
notmuch_exit_if_unmatched_db_uuid (notmuch);
query_str = query_string_from_args (notmuch, argc - opt_index, argv + opt_index); query_str = query_string_from_args (notmuch, argc - opt_index, argv + opt_index);
if (query_str == NULL) { if (query_str == NULL) {
fprintf (stderr, "Out of memory.\n"); fprintf (stderr, "Out of memory.\n");

View file

@ -366,8 +366,6 @@ notmuch_dump_command (notmuch_database_t *notmuch, int argc, char *argv[])
const char *query_str = NULL; const char *query_str = NULL;
int ret; int ret;
notmuch_exit_if_unmatched_db_uuid (notmuch);
const char *output_file_name = NULL; const char *output_file_name = NULL;
int opt_index; int opt_index;
@ -394,7 +392,7 @@ notmuch_dump_command (notmuch_database_t *notmuch, int argc, char *argv[])
if (opt_index < 0) if (opt_index < 0)
return EXIT_FAILURE; return EXIT_FAILURE;
notmuch_process_shared_options (argv[0]); notmuch_process_shared_options (notmuch, argv[0]);
if (include == 0) if (include == 0)
include = DUMP_INCLUDE_CONFIG | DUMP_INCLUDE_TAGS | DUMP_INCLUDE_PROPERTIES; include = DUMP_INCLUDE_CONFIG | DUMP_INCLUDE_TAGS | DUMP_INCLUDE_PROPERTIES;

View file

@ -478,7 +478,7 @@ notmuch_insert_command (notmuch_database_t *notmuch, int argc, char *argv[])
if (opt_index < 0) if (opt_index < 0)
return EXIT_FAILURE; 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); 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; return EXIT_FAILURE;
} }
notmuch_exit_if_unmatched_db_uuid (notmuch);
status = notmuch_process_shared_indexing_options (notmuch); status = notmuch_process_shared_indexing_options (notmuch);
if (status != NOTMUCH_STATUS_SUCCESS) { if (status != NOTMUCH_STATUS_SUCCESS) {
fprintf (stderr, "Error: Failed to process index options. (%s)\n", fprintf (stderr, "Error: Failed to process index options. (%s)\n",

View file

@ -1142,7 +1142,7 @@ notmuch_new_command (notmuch_database_t *notmuch, int argc, char *argv[])
if (opt_index < 0) if (opt_index < 0)
return EXIT_FAILURE; return EXIT_FAILURE;
notmuch_process_shared_options (argv[0]); notmuch_process_shared_options (notmuch, argv[0]);
/* quiet trumps verbose */ /* quiet trumps verbose */
if (quiet) if (quiet)
@ -1197,8 +1197,6 @@ notmuch_new_command (notmuch_database_t *notmuch, int argc, char *argv[])
return EXIT_FAILURE; return EXIT_FAILURE;
} }
notmuch_exit_if_unmatched_db_uuid (notmuch);
if (notmuch_database_get_revision (notmuch, NULL) == 0) { if (notmuch_database_get_revision (notmuch, NULL) == 0) {
int count = 0; int count = 0;
count_files (mail_root, &count, &add_files_state); count_files (mail_root, &count, &add_files_state);

View file

@ -108,9 +108,7 @@ notmuch_reindex_command (notmuch_database_t *notmuch, int argc, char *argv[])
if (opt_index < 0) if (opt_index < 0)
return EXIT_FAILURE; return EXIT_FAILURE;
notmuch_process_shared_options (argv[0]); notmuch_process_shared_options (notmuch, argv[0]);
notmuch_exit_if_unmatched_db_uuid (notmuch);
status = notmuch_process_shared_indexing_options (notmuch); status = notmuch_process_shared_indexing_options (notmuch);
if (status != NOTMUCH_STATUS_SUCCESS) { if (status != NOTMUCH_STATUS_SUCCESS) {

View file

@ -746,7 +746,7 @@ notmuch_reply_command (notmuch_database_t *notmuch, int argc, char *argv[])
if (opt_index < 0) if (opt_index < 0)
return EXIT_FAILURE; return EXIT_FAILURE;
notmuch_process_shared_options (argv[0]); notmuch_process_shared_options (notmuch, argv[0]);
notmuch_exit_if_unsupported_format (); notmuch_exit_if_unsupported_format ();
@ -761,8 +761,6 @@ notmuch_reply_command (notmuch_database_t *notmuch, int argc, char *argv[])
return EXIT_FAILURE; return EXIT_FAILURE;
} }
notmuch_exit_if_unmatched_db_uuid (notmuch);
query = notmuch_query_create (notmuch, query_string); query = notmuch_query_create (notmuch, query_string);
if (query == NULL) { if (query == NULL) {
fprintf (stderr, "Out of memory\n"); fprintf (stderr, "Out of memory\n");

View file

@ -272,8 +272,7 @@ notmuch_restore_command (notmuch_database_t *notmuch, int argc, char *argv[])
goto DONE; goto DONE;
} }
notmuch_process_shared_options (argv[0]); notmuch_process_shared_options (notmuch, argv[0]);
notmuch_exit_if_unmatched_db_uuid (notmuch);
if (include == 0) { if (include == 0) {
include = DUMP_INCLUDE_CONFIG | DUMP_INCLUDE_PROPERTIES | DUMP_INCLUDE_TAGS; include = DUMP_INCLUDE_CONFIG | DUMP_INCLUDE_PROPERTIES | DUMP_INCLUDE_TAGS;

View file

@ -709,8 +709,6 @@ _notmuch_search_prepare (search_context_t *ctx, int argc, char *argv[])
notmuch_exit_if_unsupported_format (); notmuch_exit_if_unsupported_format ();
notmuch_exit_if_unmatched_db_uuid (ctx->notmuch);
query_str = query_string_from_args (ctx->notmuch, argc, argv); query_str = query_string_from_args (ctx->notmuch, argc, argv);
if (query_str == NULL) { if (query_str == NULL) {
fprintf (stderr, "Out of memory.\n"); 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) if (opt_index < 0)
return EXIT_FAILURE; 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 && if (ctx->output != OUTPUT_FILES && ctx->output != OUTPUT_MESSAGES &&
ctx->dupe != -1) { ctx->dupe != -1) {
@ -893,7 +891,7 @@ notmuch_address_command (notmuch_database_t *notmuch, int argc, char *argv[])
if (opt_index < 0) if (opt_index < 0)
return EXIT_FAILURE; return EXIT_FAILURE;
notmuch_process_shared_options (argv[0]); notmuch_process_shared_options (notmuch, argv[0]);
if (! (ctx->output & (OUTPUT_SENDER | OUTPUT_RECIPIENTS))) if (! (ctx->output & (OUTPUT_SENDER | OUTPUT_RECIPIENTS)))
ctx->output |= OUTPUT_SENDER; ctx->output |= OUTPUT_SENDER;

View file

@ -147,10 +147,6 @@ notmuch_setup_command (notmuch_database_t *notmuch,
if (notmuch_minimal_options ("setup", argc, argv) < 0) if (notmuch_minimal_options ("setup", argc, argv) < 0)
return EXIT_FAILURE; return EXIT_FAILURE;
if (notmuch_requested_db_uuid)
fprintf (stderr, "Warning: ignoring --uuid=%s\n",
notmuch_requested_db_uuid);
config = notmuch_conffile_open (notmuch, config = notmuch_conffile_open (notmuch,
notmuch_config_path (notmuch), true); notmuch_config_path (notmuch), true);
if (! config) if (! config)

View file

@ -1287,7 +1287,7 @@ notmuch_show_command (notmuch_database_t *notmuch, int argc, char *argv[])
if (opt_index < 0) if (opt_index < 0)
return EXIT_FAILURE; return EXIT_FAILURE;
notmuch_process_shared_options (argv[0]); notmuch_process_shared_options (notmuch, argv[0]);
/* explicit decryption implies verification */ /* explicit decryption implies verification */
if (params.crypto.decrypt == NOTMUCH_DECRYPT_NOSTASH || 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); query_string = query_string_from_args (notmuch, argc - opt_index, argv + opt_index);
if (query_string == NULL) { if (query_string == NULL) {
fprintf (stderr, "Out of memory\n"); fprintf (stderr, "Out of memory\n");

View file

@ -220,7 +220,7 @@ notmuch_tag_command (notmuch_database_t *notmuch, int argc, char *argv[])
if (opt_index < 0) if (opt_index < 0)
return EXIT_FAILURE; return EXIT_FAILURE;
notmuch_process_shared_options (argv[0]); notmuch_process_shared_options (notmuch, argv[0]);
if (input_file_name) { if (input_file_name) {
batch = true; 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 ( if (print_status_database (
"notmuch restore", "notmuch restore",
notmuch, notmuch,

View file

@ -49,8 +49,11 @@ notmuch_command (notmuch_database_t *notmuch, int argc, char *argv[]);
static int static int
_help_for (const char *topic); _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; 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 [] = { const notmuch_opt_desc_t notmuch_shared_options [] = {
{ .opt_bool = &print_version, .name = "version" }, { .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 /* any subcommand wanting to support these options should call
* inherit notmuch_shared_options and 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 void
notmuch_process_shared_options (const char *subcommand_name) notmuch_process_shared_options (notmuch_database_t *notmuch, const char *subcommand_name)
{ {
if (print_version) { if (print_version) {
printf ("notmuch " STRINGIFY (NOTMUCH_VERSION) "\n"); printf ("notmuch " STRINGIFY (NOTMUCH_VERSION) "\n");
@ -75,6 +79,14 @@ notmuch_process_shared_options (const char *subcommand_name)
int ret = _help_for (subcommand_name); int ret = _help_for (subcommand_name);
exit (ret); 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 /* This is suitable for subcommands that do not actually open the
@ -97,7 +109,7 @@ notmuch_minimal_options (const char *subcommand_name,
return -1; return -1;
/* We can't use argv here as it is sometimes NULL */ /* 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; 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) notmuch_exit_if_unmatched_db_uuid (notmuch_database_t *notmuch)
{ {
const char *uuid = NULL; const char *uuid = NULL;
@ -480,7 +492,7 @@ main (int argc, char *argv[])
if (opt_index < argc) if (opt_index < argc)
command_name = argv[opt_index]; command_name = argv[opt_index];
notmuch_process_shared_options (command_name); notmuch_process_shared_options (NULL, command_name);
command = find_command (command_name); command = find_command (command_name);
/* if command->function is NULL, try external command */ /* if command->function is NULL, try external command */

View file

@ -122,7 +122,8 @@ const notmuch_opt_desc_t notmuch_shared_options[] = {
const char *notmuch_requested_db_uuid = NULL; const char *notmuch_requested_db_uuid = NULL;
void void
notmuch_process_shared_options (unused (const char *dummy)) notmuch_process_shared_options (unused (notmuch_database_t *notmuch),
unused (const char *dummy))
{ {
} }