From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0 ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id kLINFLIOJWHl4QAAgWs5BA (envelope-from ) for ; Tue, 24 Aug 2021 17:22:26 +0200 Received: from aspmx1.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0 with LMTPS id cDnED7IOJWFrHQAA1q6Kng (envelope-from ) for ; Tue, 24 Aug 2021 15:22:26 +0000 Received: from mail.notmuchmail.org (nmbug.tethera.net [IPv6:2607:5300:201:3100::1657]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id DCFCF88FF for ; Tue, 24 Aug 2021 17:22:25 +0200 (CEST) Received: from nmbug.tethera.net (localhost [127.0.0.1]) by mail.notmuchmail.org (Postfix) with ESMTP id 613DF2060D; Tue, 24 Aug 2021 11:21:10 -0400 (EDT) Received: from fethera.tethera.net (fethera.tethera.net [198.245.60.197]) by mail.notmuchmail.org (Postfix) with ESMTP id A017F20583 for ; Tue, 24 Aug 2021 11:21:04 -0400 (EDT) Received: by fethera.tethera.net (Postfix, from userid 1001) id 99D385FD5C; Tue, 24 Aug 2021 11:21:04 -0400 (EDT) Received: (nullmailer pid 2942828 invoked by uid 1000); Tue, 24 Aug 2021 15:17:51 -0000 From: David Bremner To: notmuch@notmuchmail.org Cc: David Bremner Subject: [PATCH 01/36] CLI: make variable n_requested_db_uuid file scope. Date: Tue, 24 Aug 2021 08:17:10 -0700 Message-Id: <20210824151745.2941868-2-david@tethera.net> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210824151745.2941868-1-david@tethera.net> References: <20210824151745.2941868-1-david@tethera.net> MIME-Version: 1.0 Message-ID-Hash: SKULSZZY2CIPPCREO7TDFVGTMBUD2RUO X-Message-ID-Hash: SKULSZZY2CIPPCREO7TDFVGTMBUD2RUO X-MailFrom: bremner@tethera.net X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-notmuch.notmuchmail.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.1 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Migadu-Flow: FLOW_IN ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1629818546; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=HoeNl9204lK1V7oH+G+bi2RWuPKugeQvDYYKON08qqc=; b=Qv6EatQWZY2ft0XegjCyv2OOWFU3cpIqRAl9NsYqOYnWsqB3NgWgQTAlaKeIq1/yTLWtuo RPpu2uA1uC0Ct1aQ0i/sOuWDEAq4Us3jYThGXuGA56o7hIhQB2okHLtZbxUzZegd+MSvx6 +Dtok6+i8iDpwFLkMM27SM/45lNSKeOjw3Cy444ZOqE1tYjmFGk36cdrrTmJgnC6lQR1n4 djUvs6qJLe5WiW1DB/yX4o91FKNRvWizqk2HW5LVLMUhZJTUR3lDIPXK3ER+N0MSanyUPM yOdEBOAPEO/KoT8Xr8BPJS6uXSecxm8D5r1HNaXWMiZ9bQsqlFqWEVxcOdaVeQ== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1629818546; a=rsa-sha256; cv=none; b=CQsqbb0aNj1rmJmUWMY0cDSKe25LB7AubUxuIPC/BRAY8TkV2aWlJwD2M2BD0Z8yoAa107 x+jvPulxwEkj4da981xenZclPS2n6/rnTgVdB/ADnc2NQfrX3XeG2ZeXbObwuSubQGqOrs LAiz8XaH82HEszClL3oO33Gzei1Ov6JYT1A0u/om8Kyklno5qfguED9fjI4Wz5Di5aCfR5 ujQqzRXtImqVDNkVysu3BkcpH5Tg7q3i6onhyTS13JDE1AyT1/Adw2PZsXWt6rZgc4mUI9 pqLh4/7+SplpJVDxiIyxyM6bE1GD6e5HCc3+teYf10/H4zmpLTM6w38mAghqOg== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 2607:5300:201:3100::1657 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Spam-Score: -0.93 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 2607:5300:201:3100::1657 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Queue-Id: DCFCF88FF X-Spam-Score: -0.93 X-Migadu-Scanner: scn0.migadu.com X-TUID: wa+/7SZPD7ae 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 08140799..5d5f95a3 100644 --- a/notmuch-reply.c +++ b/notmuch-reply.c @@ -743,7 +743,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 (); @@ -758,8 +758,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)) { } -- 2.32.0