X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=notmuch-config.c;h=34482b4e1e4e82a77ed437d61a34cec23b8b616e;hb=1c747a501c0ed7df5eaa2b994b9ad11d8981c62c;hp=24c168331887a0004fd4432e18891a5ce4b68b04;hpb=7f6aae4f64add17d9750d2d8491930e15fad4fe1;p=notmuch diff --git a/notmuch-config.c b/notmuch-config.c index 24c16833..34482b4e 100644 --- a/notmuch-config.c +++ b/notmuch-config.c @@ -248,7 +248,7 @@ get_config_from_file (notmuch_config_t *config, bool create_new) notmuch_config_t * notmuch_config_open (notmuch_database_t *notmuch, const char *filename, - notmuch_command_mode_t config_mode) + bool create) { char *notmuch_config_env = NULL; @@ -272,13 +272,9 @@ notmuch_config_open (notmuch_database_t *notmuch, config->key_file = g_key_file_new (); - if (config_mode & NOTMUCH_COMMAND_CONFIG_OPEN) { - bool create_new = (config_mode & NOTMUCH_COMMAND_CONFIG_CREATE) != 0; - - if (! get_config_from_file (config, create_new)) { - talloc_free (config); - return NULL; - } + if (! get_config_from_file (config, create)) { + talloc_free (config); + return NULL; } if (config->is_new) @@ -511,16 +507,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 +578,37 @@ _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_database_t *notmuch, int argc, char *argv[]) { char *group, *key; config_key_info_t *key_info; + notmuch_config_t *config; + bool update_database = false; + int opt_index, ret; + 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,13 +619,18 @@ 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); } if (_item_split (item, &group, &key)) return 1; + config = notmuch_config_open (notmuch, + notmuch_config_path (notmuch), false); + if (! config) + return 1; + /* With only the name of an item, we clear it from the * configuration file. * @@ -625,7 +651,11 @@ notmuch_config_command_set (notmuch_config_t *config, notmuch_database_t *notmuc break; } - return notmuch_config_save (config); + ret = notmuch_config_save (config); + + notmuch_config_close (config); + + return ret; } static @@ -661,8 +691,7 @@ notmuch_config_command_list (notmuch_database_t *notmuch) } int -notmuch_config_command (notmuch_config_t *config, notmuch_database_t *notmuch, - int argc, char *argv[]) +notmuch_config_command (notmuch_database_t *notmuch, int argc, char *argv[]) { int ret; int opt_index; @@ -692,12 +721,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 (notmuch, argc, argv); } else if (strcmp (argv[0], "list") == 0) { ret = notmuch_config_command_list (notmuch); } else {