]> git.cworth.org Git - notmuch/commitdiff
CLI/config: support set/get with split configuration
authorDavid Bremner <david@tethera.net>
Thu, 25 Feb 2021 12:00:26 +0000 (08:00 -0400)
committerDavid Bremner <david@tethera.net>
Sat, 27 Mar 2021 12:26:14 +0000 (09:26 -0300)
There are two small code changes. The main one is to retrieve the
possibly updated config file name found during the database opening
call. The second change is to allow empty config file names, as
a (currently broken) way of specifying that configuration should only
be taken from the database.

notmuch.c
test/T055-path-config.sh

index bcb4b768d3b161b8b3f825190a2d531277116efe..616639083e92c2d6e7644c38f238bf4022bf7512 100644 (file)
--- a/notmuch.c
+++ b/notmuch.c
@@ -454,7 +454,7 @@ main (int argc, char *argv[])
     int ret = EXIT_SUCCESS;
 
     notmuch_opt_desc_t options[] = {
-       { .opt_string = &config_file_name, .name = "config" },
+       { .opt_string = &config_file_name, .name = "config", .allow_empty = TRUE },
        { .opt_inherit = notmuch_shared_options },
        { }
     };
@@ -581,6 +581,9 @@ main (int argc, char *argv[])
     }
 
     if (command->mode & NOTMUCH_COMMAND_CONFIG_OPEN) {
+       if (! config_file_name)
+           config_file_name = notmuch_config_path (notmuch);
+
        config = notmuch_config_open (notmuch, config_file_name, command->mode);
        if (! config) {
            ret = EXIT_FAILURE;
index 0a34e67fa9409d7ecc512861ae5d2ebc80750723..535c41e9b9f0535148f7a4367bdc3b6358eecb28 100755 (executable)
@@ -215,7 +215,65 @@ EOF
 
    test_expect_equal_file EXPECTED OUTPUT
 
-    restore_config
+   test_begin_subtest "Set config value ($config)"
+   name=${RANDOM}
+   value=${RANDOM}
+   notmuch config set test${test_count}.${name} ${value}
+   output=$(notmuch config get test${test_count}.${name})
+   notmuch config set test${test_count}.${name}
+   output2=$(notmuch config get test${test_count}.${name})
+   test_expect_equal "${output}+${output2}" "${value}+"
+
+   test_begin_subtest "Set config value in database ($config)"
+   name=${RANDOM}
+   value=${RANDOM}
+   notmuch config set --database test${test_count}.${name} ${value}
+   output=$(notmuch config get test${test_count}.${name})
+   notmuch config set --database test${test_count}.${name}
+   output2=$(notmuch config get test${test_count}.${name})
+   test_expect_equal "${output}+${output2}" "${value}+"
+
+   test_begin_subtest "Config list ($config)"
+   notmuch config list | notmuch_dir_sanitize | sed -e "s/^database.backup_dir=.*$/database.backup_dir/"  \
+                                                   -e "s/^database.hook_dir=.*$/database.hook_dir/" \
+                                                   -e "s/^database.path=.*$/database.path/" > OUTPUT
+   cat <<EOF > EXPECTED
+built_with.compact=true
+built_with.field_processor=true
+built_with.retry_lock=true
+database.backup_dir
+database.hook_dir
+database.mail_root=MAIL_DIR
+database.path
+maildir.synchronize_flags=true
+new.ignore=
+new.tags=unread;inbox
+search.exclude_tags=
+user.name=Notmuch Test Suite
+user.other_email=test_suite_other@notmuchmail.org;test_suite@otherdomain.org
+user.primary_email=test_suite@notmuchmail.org
+EOF
+   test_expect_equal_file EXPECTED OUTPUT
+
+   case $config in
+       XDG*)
+          test_begin_subtest "Set shadowed config value in database ($config)"
+          test_subtest_known_broken
+          name=${RANDOM}
+          value=${RANDOM}
+          key=test${test_count}.${name}
+          notmuch config set --database ${key}  ${value}
+          notmuch config set ${key} shadow${value}
+          output=$(notmuch --config='' config get ${key})
+          notmuch config set --database ${key}
+          output2=$(notmuch --config='' config get ${key})
+          notmuch config set ${key}
+          test_expect_equal "${output}+${output2}" "${value}+"
+          ;;
+   esac
+   restore_config
+   rm -rf home/.local
+   rm -rf home/.config
 done
 
 test_done