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 <<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
 
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 <<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
_______________________________________________
notmuch mailing list -- notmuch@notmuchmail.org
To unsubscribe send an email to notmuch-le...@notmuchmail.org

Reply via email to