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;
|
||||
};
|
||||
|
||||
static const char * _notmuch_config_key_to_string (notmuch_config_key_t key);
|
||||
|
||||
static int
|
||||
_notmuch_config_list_destroy (notmuch_config_list_t *list)
|
||||
{
|
||||
|
@ -280,7 +282,7 @@ _notmuch_config_load_from_file (notmuch_database_t *notmuch,
|
|||
return status;
|
||||
}
|
||||
|
||||
const char *
|
||||
static const char *
|
||||
_notmuch_config_key_to_string (notmuch_config_key_t key) {
|
||||
switch (key) {
|
||||
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 *
|
||||
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_config_load_from_file (notmuch_database_t * db, GKeyFile *file);
|
||||
|
||||
notmuch_status_t
|
||||
_notmuch_config_load_defaults (notmuch_database_t * db);
|
||||
NOTMUCH_END_DECLS
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -289,6 +289,10 @@ notmuch_database_open_with_config (const char *database_path,
|
|||
if (status)
|
||||
goto DONE;
|
||||
|
||||
status = _notmuch_config_load_defaults (notmuch);
|
||||
if (status)
|
||||
goto DONE;
|
||||
|
||||
status = _notmuch_database_setup_standard_query_fields (notmuch);
|
||||
if (status)
|
||||
goto DONE;
|
||||
|
|
|
@ -239,6 +239,33 @@ EOF
|
|||
test_expect_equal_file EXPECTED OUTPUT
|
||||
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
|
||||
test_begin_subtest "override config from \${NOTMUCH_CONFIG}"
|
||||
notmuch config set test.key1 overridden
|
||||
|
|
Loading…
Reference in a new issue