diff options
| author | David Bremner <david@tethera.net> | 2021-02-19 08:41:36 -0400 |
|---|---|---|
| committer | David Bremner <david@tethera.net> | 2021-03-27 09:26:14 -0300 |
| commit | dd9112e7d8e89e8566b90379f5f3b1461a2d2845 (patch) | |
| tree | 0dc50fd5aeb6205ca3bbaa99035f5313be7f3b9d /notmuch-config.c | |
| parent | 7f6aae4f64add17d9750d2d8491930e15fad4fe1 (diff) | |
CLI/config: default to storing all config in external files
Previously the fact that some configuration options were only stored
in the database (and thus editing the config file had no effect) was a
source of user confusion. This was fixed with the series ending at
d9af0af1646.
On the other hand, the underlying partition of config options into
those stored by default in the database and those stored in the config
file remained. This is also confusing, since now some invocations of
"notmuch config set" modify the config file, and others silently
modify the database instead.
With this commit, it is up to the user to decide which configuration
to modify. A new "--database" option is provided for notmuch config to
enable modifying the configuration information in the database;
otherwise the default is to update an external config file.
Diffstat (limited to 'notmuch-config.c')
| -rw-r--r-- | notmuch-config.c | 43 |
1 files changed, 31 insertions, 12 deletions
diff --git a/notmuch-config.c b/notmuch-config.c index 24c16833..c4283576 100644 --- a/notmuch-config.c +++ b/notmuch-config.c @@ -511,16 +511,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 * @@ -583,11 +582,36 @@ _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, +notmuch_config_command_set (notmuch_config_t *config, notmuch_database_t *notmuch, int argc, char *argv[]) { char *group, *key; config_key_info_t *key_info; + bool update_database = false; + int opt_index; + char *item; + + notmuch_opt_desc_t options[] = { + { .opt_bool = &update_database, .name = "database" }, + { } + }; + + opt_index = parse_arguments (argc, argv, options, 1); + if (opt_index < 0) + return EXIT_FAILURE; + + argc -= opt_index; + argv += opt_index; + + if (argc < 1) { + fprintf (stderr, "Error: notmuch config set requires at least " + "one argument.\n"); + return EXIT_FAILURE; + } + + item = argv[0]; + argv++; + argc--; if (STRNCMP_LITERAL (item, BUILT_WITH_PREFIX) == 0) { fprintf (stderr, "Error: read only option: %s\n", item); @@ -598,7 +622,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_database) { return _set_db_config (notmuch, item, argc, argv); } @@ -692,12 +716,7 @@ notmuch_config_command (notmuch_config_t *config, notmuch_database_t *notmuch, } ret = notmuch_config_command_get (notmuch, argv[1]); } else if (strcmp (argv[0], "set") == 0) { - if (argc < 2) { - fprintf (stderr, "Error: notmuch config set requires at least " - "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, argc, argv); } else if (strcmp (argv[0], "list") == 0) { ret = notmuch_config_command_list (notmuch); } else { |
