mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-22 02:48:08 +01:00
lib/open: load default values for known configuration keys.
This emulates the behaviour of notmuch_config_open defined in the CLI, in that it fills in default values if they are not otherwise defined.
This commit is contained in:
parent
d6bd87a712
commit
06a64cf0aa
4 changed files with 83 additions and 1 deletions
|
@ -31,6 +31,8 @@ struct _notmuch_config_list {
|
||||||
char *current_val;
|
char *current_val;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char * _notmuch_config_key_to_string (notmuch_config_key_t key);
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_notmuch_config_list_destroy (notmuch_config_list_t *list)
|
_notmuch_config_list_destroy (notmuch_config_list_t *list)
|
||||||
{
|
{
|
||||||
|
@ -280,7 +282,7 @@ _notmuch_config_load_from_file (notmuch_database_t *notmuch,
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
static const char *
|
||||||
_notmuch_config_key_to_string (notmuch_config_key_t key) {
|
_notmuch_config_key_to_string (notmuch_config_key_t key) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case NOTMUCH_CONFIG_DATABASE_PATH:
|
case NOTMUCH_CONFIG_DATABASE_PATH:
|
||||||
|
@ -302,6 +304,52 @@ _notmuch_config_key_to_string (notmuch_config_key_t key) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
_notmuch_config_default (void *ctx, notmuch_config_key_t key) {
|
||||||
|
char *path;
|
||||||
|
|
||||||
|
switch (key) {
|
||||||
|
case NOTMUCH_CONFIG_DATABASE_PATH:
|
||||||
|
path = getenv ("MAILDIR");
|
||||||
|
if (path)
|
||||||
|
path = talloc_strdup (ctx, path);
|
||||||
|
else
|
||||||
|
path = talloc_asprintf (ctx, "%s/mail",
|
||||||
|
getenv ("HOME"));
|
||||||
|
return path;
|
||||||
|
case NOTMUCH_CONFIG_EXCLUDE_TAGS:
|
||||||
|
return "";
|
||||||
|
case NOTMUCH_CONFIG_NEW_TAGS:
|
||||||
|
return "inbox;unread";
|
||||||
|
case NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS:
|
||||||
|
return "true";
|
||||||
|
case NOTMUCH_CONFIG_USER_NAME:
|
||||||
|
case NOTMUCH_CONFIG_PRIMARY_EMAIL:
|
||||||
|
case NOTMUCH_CONFIG_OTHER_EMAIL:
|
||||||
|
return NULL;
|
||||||
|
default:
|
||||||
|
case NOTMUCH_CONFIG_LAST:
|
||||||
|
INTERNAL_ERROR ("illegal key enum %d", key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
notmuch_status_t
|
||||||
|
_notmuch_config_load_defaults (notmuch_database_t *notmuch) {
|
||||||
|
notmuch_config_key_t key;
|
||||||
|
for (key = NOTMUCH_CONFIG_FIRST;
|
||||||
|
key < NOTMUCH_CONFIG_LAST;
|
||||||
|
key = notmuch_config_key_t(key + 1)) {
|
||||||
|
const char *val = notmuch_config_get (notmuch, key);
|
||||||
|
const char *key_string = _notmuch_config_key_to_string (key);
|
||||||
|
|
||||||
|
val = _notmuch_string_map_get (notmuch->config, key_string);
|
||||||
|
if (! val) {
|
||||||
|
_notmuch_string_map_set (notmuch->config, key_string, _notmuch_config_default (notmuch, key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NOTMUCH_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
notmuch_config_get (notmuch_database_t *notmuch, notmuch_config_key_t key) {
|
notmuch_config_get (notmuch_database_t *notmuch, notmuch_config_key_t key) {
|
||||||
|
|
||||||
|
|
|
@ -710,6 +710,9 @@ _notmuch_config_load_from_database (notmuch_database_t * db);
|
||||||
|
|
||||||
notmuch_status_t
|
notmuch_status_t
|
||||||
_notmuch_config_load_from_file (notmuch_database_t * db, GKeyFile *file);
|
_notmuch_config_load_from_file (notmuch_database_t * db, GKeyFile *file);
|
||||||
|
|
||||||
|
notmuch_status_t
|
||||||
|
_notmuch_config_load_defaults (notmuch_database_t * db);
|
||||||
NOTMUCH_END_DECLS
|
NOTMUCH_END_DECLS
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -289,6 +289,10 @@ notmuch_database_open_with_config (const char *database_path,
|
||||||
if (status)
|
if (status)
|
||||||
goto DONE;
|
goto DONE;
|
||||||
|
|
||||||
|
status = _notmuch_config_load_defaults (notmuch);
|
||||||
|
if (status)
|
||||||
|
goto DONE;
|
||||||
|
|
||||||
status = _notmuch_database_setup_standard_query_fields (notmuch);
|
status = _notmuch_database_setup_standard_query_fields (notmuch);
|
||||||
if (status)
|
if (status)
|
||||||
goto DONE;
|
goto DONE;
|
||||||
|
|
|
@ -239,6 +239,33 @@ EOF
|
||||||
test_expect_equal_file EXPECTED OUTPUT
|
test_expect_equal_file EXPECTED OUTPUT
|
||||||
restore_database
|
restore_database
|
||||||
|
|
||||||
|
test_begin_subtest "load default values"
|
||||||
|
export MAILDIR=${MAIL_DIR}
|
||||||
|
cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} '' %NULL%
|
||||||
|
{
|
||||||
|
notmuch_config_key_t key;
|
||||||
|
for (key = NOTMUCH_CONFIG_FIRST;
|
||||||
|
key < NOTMUCH_CONFIG_LAST;
|
||||||
|
key = (notmuch_config_key_t)(key + 1)) {
|
||||||
|
const char *val = notmuch_config_get (db, key);
|
||||||
|
printf("%s\n", val ? val : "NULL" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
cat <<'EOF' >EXPECTED
|
||||||
|
== stdout ==
|
||||||
|
MAIL_DIR
|
||||||
|
|
||||||
|
inbox;unread
|
||||||
|
true
|
||||||
|
NULL
|
||||||
|
NULL
|
||||||
|
NULL
|
||||||
|
== stderr ==
|
||||||
|
EOF
|
||||||
|
unset MAILDIR
|
||||||
|
test_expect_equal_file EXPECTED OUTPUT
|
||||||
|
|
||||||
backup_database
|
backup_database
|
||||||
test_begin_subtest "override config from \${NOTMUCH_CONFIG}"
|
test_begin_subtest "override config from \${NOTMUCH_CONFIG}"
|
||||||
notmuch config set test.key1 overridden
|
notmuch config set test.key1 overridden
|
||||||
|
|
Loading…
Reference in a new issue