From: David Bremner <david@tethera.net>
To: notmuch@notmuchmail.org
Cc: David Bremner <david@tethera.net>
Subject: [PATCH 18/18] WIP: CLI/config: make storing configuration in database optional
Date: Sat, 20 Feb 2021 12:44:48 -0400 [thread overview]
Message-ID: <20210220164448.3956011-19-david@tethera.net> (raw)
In-Reply-To: <20210220164448.3956011-1-david@tethera.net>
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 +++++++----------
| 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 <<EOF > 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<<EOF > 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 <<EOF >> 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<<EOF > EXPECTED
-#@ query.test2 query%3atest%20and%20subject%3aMaildir
EOF
test_expect_equal_file EXPECTED OUTPUT
--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 <<EOF > 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
prev parent reply other threads:[~2021-02-20 16:46 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-20 16:44 RFC convert remaining CLI to new configuration David Bremner
2021-02-20 16:44 ` [PATCH 01/18] lib: add missing status strings David Bremner
2021-02-20 16:44 ` [PATCH 02/18] test: convert random-corpus to use n_d_open_with_config David Bremner
2021-02-20 16:44 ` [PATCH 03/18] lib/open: pull _load_key_file out of _choose_database_path David Bremner
2021-02-20 16:44 ` [PATCH 04/18] WIP: add notmuch_database_load_config David Bremner
2021-02-20 16:44 ` [PATCH 05/18] WIP: add n_d_get_config_values David Bremner
2021-02-20 16:44 ` [PATCH 06/18] lib/config: add config_pairs iterators David Bremner
2021-02-20 16:44 ` [PATCH 07/18] lib/config: set defaults for user full name David Bremner
2021-02-20 16:44 ` [PATCH 08/18] lib/config: set default for primary user email David Bremner
2021-02-20 16:44 ` [PATCH 09/18] CLI/notmuch: replace use of notmuch_config_get_* David Bremner
2021-02-20 16:44 ` [PATCH 10/18] CLI/config: WIP: load merged config David Bremner
2021-02-20 16:44 ` [PATCH 11/18] WIP: CLI/config: use merged config for "config get" David Bremner
2021-02-20 16:44 ` [PATCH 12/18] WIP: switch notmuch-setup to new configuration framework David Bremner
2021-02-20 16:44 ` [PATCH 13/18] WIP: CLI/config: switch list to new config David Bremner
2021-02-20 16:44 ` [PATCH 14/18] CLI/config: migrate notmuch_config_open " David Bremner
2021-02-20 16:44 ` [PATCH 15/18] WIP: cli/config: convert to new config API David Bremner
2021-02-20 16:44 ` [PATCH 16/18] cli/config: drop obsolete notmuch_config_get_* David Bremner
2021-02-20 16:44 ` [PATCH 17/18] CLI/config: drop cached data from notmuch_config_t David Bremner
2021-02-20 16:44 ` David Bremner [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://notmuchmail.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210220164448.3956011-19-david@tethera.net \
--to=david@tethera.net \
--cc=notmuch@notmuchmail.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://yhetil.org/notmuch.git/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).