From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id yLCXDd88MWAYYwAA0tVLHw (envelope-from ) for ; Sat, 20 Feb 2021 16:46:23 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1 with LMTPS id 6ItaCd88MWCqYQAAbx9fmQ (envelope-from ) for ; Sat, 20 Feb 2021 16:46:23 +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)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 6EF7A1EDA7 for ; Sat, 20 Feb 2021 17:46:22 +0100 (CET) Received: from nmbug.tethera.net (localhost [127.0.0.1]) by mail.notmuchmail.org (Postfix) with ESMTP id E92502705C; Sat, 20 Feb 2021 11:45:39 -0500 (EST) Received: from fethera.tethera.net (fethera.tethera.net [198.245.60.197]) by mail.notmuchmail.org (Postfix) with ESMTP id E9A9E26B9A for ; Sat, 20 Feb 2021 11:45:06 -0500 (EST) Received: by fethera.tethera.net (Postfix, from userid 1001) id DFE9C60666; Sat, 20 Feb 2021 11:45:06 -0500 (EST) Received: (nullmailer pid 3956198 invoked by uid 1000); Sat, 20 Feb 2021 16:44:54 -0000 From: David Bremner To: notmuch@notmuchmail.org Cc: David Bremner Subject: [PATCH 18/18] WIP: CLI/config: make storing configuration in database optional Date: Sat, 20 Feb 2021 12:44:48 -0400 Message-Id: <20210220164448.3956011-19-david@tethera.net> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210220164448.3956011-1-david@tethera.net> References: <20210220164448.3956011-1-david@tethera.net> MIME-Version: 1.0 Message-ID-Hash: QY6LDE4NJEUBBWITSBLAM2TVVT3GYFE2 X-Message-ID-Hash: QY6LDE4NJEUBBWITSBLAM2TVVT3GYFE2 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 X-Migadu-Spam-Score: 0.55 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: 6EF7A1EDA7 X-Spam-Score: 0.55 X-Migadu-Scanner: scn1.migadu.com X-TUID: geOFjcXHfBdo Originally I planned to drop this functionality, but it is useful e.g. for our test suite to be able to set config keys in the database without using notmuch-restore. New option needs documentation --- notmuch-config.c | 26 ++++++++++++++++++-------- test/T030-config.sh | 19 +++++++++++++++++++ test/T600-named-queries.sh | 17 +++++++---------- test/T750-user-header.sh | 8 -------- 4 files changed, 44 insertions(+), 26 deletions(-) diff --git a/notmuch-config.c b/notmuch-config.c index 0b2976f4..f786e462 100644 --- a/notmuch-config.c +++ b/notmuch-config.c @@ -543,16 +543,15 @@ validate_field_name (const char *str) typedef struct config_key { const char *name; - bool in_db; bool prefix; bool (*validate)(const char *); } config_key_info_t; static struct config_key config_key_table[] = { - { "index.decrypt", true, false, NULL }, - { "index.header.", true, true, validate_field_name }, - { "query.", true, true, NULL }, + { "index.decrypt", false, NULL }, + { "index.header.", true, validate_field_name }, + { "query.", true, NULL }, }; static config_key_info_t * @@ -614,7 +613,9 @@ _set_db_config (notmuch_database_t *notmuch, const char *key, int argc, char **a } static int -notmuch_config_command_set (notmuch_config_t *config, notmuch_database_t *notmuch, char *item, int argc, char *argv[]) +notmuch_config_command_set (notmuch_config_t *config, notmuch_database_t *notmuch, + char *item, bool update_db, + int argc, char *argv[]) { char *group, *key; config_key_info_t *key_info; @@ -628,7 +629,7 @@ notmuch_config_command_set (notmuch_config_t *config, notmuch_database_t *notmuc if (key_info && key_info->validate && (! key_info->validate (item))) return 1; - if (key_info && key_info->in_db) { + if (update_db) { return _set_db_config (notmuch, item, argc, argv); } @@ -695,11 +696,20 @@ notmuch_config_command (notmuch_config_t *config, notmuch_database_t *notmuch, i { int ret; int opt_index; + bool update_database; - opt_index = notmuch_minimal_options ("config", argc, argv); + notmuch_opt_desc_t options[] = { + { .opt_bool = &update_database, .name = "database" }, + { .opt_inherit = notmuch_shared_options }, + { } + }; + + opt_index = parse_arguments (argc, argv, options, 1); if (opt_index < 0) return EXIT_FAILURE; + notmuch_process_shared_options (argv[0]); + if (notmuch_requested_db_uuid) fprintf (stderr, "Warning: ignoring --uuid=%s\n", notmuch_requested_db_uuid); @@ -726,7 +736,7 @@ notmuch_config_command (notmuch_config_t *config, notmuch_database_t *notmuch, i "one argument.\n"); return EXIT_FAILURE; } - ret = notmuch_config_command_set (config, notmuch, argv[1], argc - 2, argv + 2); + ret = notmuch_config_command_set (config, notmuch, argv[1], update_database, argc - 2, argv + 2); } else if (strcmp (argv[0], "list") == 0) { ret = notmuch_config_command_list (notmuch); } else { diff --git a/test/T030-config.sh b/test/T030-config.sh index 9a43c1e4..31aa550c 100755 --- a/test/T030-config.sh +++ b/test/T030-config.sh @@ -121,5 +121,24 @@ notmuch config set database.path ${db_path} test_expect_equal "$(notmuch config get database.path)" \ "${db_path}" +test_begin_subtest "Add config to database" +notmuch new +key=g${RANDOM}.m${RANDOM} +value=${RANDOM} +notmuch config --database set ${key} ${value} +notmuch dump --include=config > OUTPUT +cat < EXPECTED +#notmuch-dump batch-tag:3 config +#@ ${key} ${value} +EOF +test_expect_equal_file EXPECTED OUTPUT + +test_begin_subtest "Roundtrip config to/from database" +notmuch new +key=g${RANDOM}.m${RANDOM} +value=${RANDOM} +notmuch config --database set ${key} ${value} +output=$(notmuch config get ${key}) +test_expect_equal "${output}" "${value}" test_done diff --git a/test/T600-named-queries.sh b/test/T600-named-queries.sh index 0ae8b83d..d70156eb 100755 --- a/test/T600-named-queries.sh +++ b/test/T600-named-queries.sh @@ -4,13 +4,13 @@ test_description='named queries' QUERYSTR="date:2009-11-18..2009-11-18 and tag:unread" -test_begin_subtest "error adding named query before initializing DB" -test_expect_code 1 "notmuch config set query.test \"$QUERYSTR\"" +test_begin_subtest "error adding named query to DB before initialization" +test_expect_code 1 "notmuch config --database set query.test \"$QUERYSTR\"" add_email_corpus -test_begin_subtest "adding named query" -test_expect_success "notmuch config set query.test \"$QUERYSTR\"" +test_begin_subtest "adding named query (database)" +test_expect_success "notmuch config --database set query.test \"$QUERYSTR\"" test_begin_subtest "adding nested named query" QUERYSTR2="query:test and subject:Maildir" @@ -32,7 +32,6 @@ test_begin_subtest "dump named queries" notmuch dump | grep '^#@' > OUTPUT cat< QUERIES.BEFORE #@ query.test date%3a2009-11-18..2009-11-18%20and%20tag%3aunread -#@ query.test2 query%3atest%20and%20subject%3aMaildir EOF test_expect_equal_file QUERIES.BEFORE OUTPUT @@ -40,23 +39,21 @@ test_begin_subtest 'dumping large queries' # This value is just large enough to trigger a limitation of gzprintf # to 8191 bytes in total (by default). repeat=1329 -notmuch config set query.big "$(seq -s' ' $repeat)" +notmuch config --database set query.big "$(seq -s' ' $repeat)" notmuch dump --include=config > OUTPUT -notmuch config set query.big '' +notmuch config --database set query.big printf "#notmuch-dump batch-tag:3 config\n#@ query.big " > EXPECTED seq -s'%20' $repeat >> EXPECTED cat <> EXPECTED #@ query.test date%3a2009-11-18..2009-11-18%20and%20tag%3aunread -#@ query.test2 query%3atest%20and%20subject%3aMaildir EOF test_expect_equal_file EXPECTED OUTPUT test_begin_subtest "delete named queries" notmuch dump > BEFORE -notmuch config set query.test +notmuch config --database set query.test notmuch dump | grep '^#@' > OUTPUT cat< EXPECTED -#@ query.test2 query%3atest%20and%20subject%3aMaildir EOF test_expect_equal_file EXPECTED OUTPUT diff --git a/test/T750-user-header.sh b/test/T750-user-header.sh index 586788b3..05f80885 100755 --- a/test/T750-user-header.sh +++ b/test/T750-user-header.sh @@ -2,14 +2,6 @@ test_description='indexing user specified headers' . $(dirname "$0")/test-lib.sh || exit 1 -test_begin_subtest "error adding user header before initializing DB" -notmuch config set index.header.List List-Id 2>&1 | notmuch_dir_sanitize > OUTPUT -cat < EXPECTED -notmuch config: Illegal argument for function -Cannot reopen closed or nonexistent database -EOF -test_expect_equal_file EXPECTED OUTPUT - add_email_corpus notmuch search '*' | notmuch_search_sanitize > initial-threads -- 2.30.0