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;
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)
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 *
}
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);
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.
*
break;
}
- return notmuch_config_save (config);
+ ret = notmuch_config_save (config);
+
+ notmuch_config_close (config);
+
+ return ret;
}
static
}
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;
}
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 {