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"
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);

View file

@ -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");

View file

@ -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;

View file

@ -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");

View file

@ -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;

View file

@ -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",

View file

@ -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);

View file

@ -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) {

View file

@ -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");

View file

@ -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;

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_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;

View file

@ -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)

View file

@ -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");

View file

@ -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,

View file

@ -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 */

View file

@ -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))
{
}