mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 04:18:08 +01:00
lib/config: add notmuch_config_key_{get,set}
By using an enum we can have better error detection than copy pasting key strings around. The question of what layer this belongs in is a bit tricky. Historically most of the keys are defined by the CLI. On the other hand features like excludes are supported in the library/bindings, and it makes sense to configure them from the library as well. The somewhat long prefix for notmuch_config_t is to avoid collisions with the existing usage in notmuch-client.h.
This commit is contained in:
parent
867d7352a7
commit
d6bd87a712
3 changed files with 128 additions and 0 deletions
|
@ -279,3 +279,37 @@ _notmuch_config_load_from_file (notmuch_database_t *notmuch,
|
||||||
DONE:
|
DONE:
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
_notmuch_config_key_to_string (notmuch_config_key_t key) {
|
||||||
|
switch (key) {
|
||||||
|
case NOTMUCH_CONFIG_DATABASE_PATH:
|
||||||
|
return "database.path";
|
||||||
|
case NOTMUCH_CONFIG_EXCLUDE_TAGS:
|
||||||
|
return "search.exclude_tags";
|
||||||
|
case NOTMUCH_CONFIG_NEW_TAGS:
|
||||||
|
return "new.tags";
|
||||||
|
case NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS:
|
||||||
|
return "maildir.synchronize_flags";
|
||||||
|
case NOTMUCH_CONFIG_PRIMARY_EMAIL:
|
||||||
|
return "user.primary_email";
|
||||||
|
case NOTMUCH_CONFIG_OTHER_EMAIL:
|
||||||
|
return "user.other_email";
|
||||||
|
case NOTMUCH_CONFIG_USER_NAME:
|
||||||
|
return "user.name";
|
||||||
|
default:
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
notmuch_config_get (notmuch_database_t *notmuch, notmuch_config_key_t key) {
|
||||||
|
|
||||||
|
return _notmuch_string_map_get (notmuch->config, _notmuch_config_key_to_string (key));
|
||||||
|
}
|
||||||
|
|
||||||
|
notmuch_status_t
|
||||||
|
notmuch_config_set (notmuch_database_t *notmuch, notmuch_config_key_t key, const char *val) {
|
||||||
|
|
||||||
|
return notmuch_database_set_config (notmuch, _notmuch_config_key_to_string (key), val);
|
||||||
|
}
|
||||||
|
|
|
@ -2325,6 +2325,11 @@ notmuch_filenames_destroy (notmuch_filenames_t *filenames);
|
||||||
* set config 'key' to 'value'
|
* set config 'key' to 'value'
|
||||||
*
|
*
|
||||||
* @since libnotmuch 4.4 (notmuch 0.23)
|
* @since libnotmuch 4.4 (notmuch 0.23)
|
||||||
|
* @retval #NOTMUCH_STATUS_READ_ONLY_DATABASE: Database was opened in
|
||||||
|
* read-only mode so message cannot be modified.
|
||||||
|
* @retval #NOTMUCH_STATUS_XAPIAN_EXCEPTION: an exception was thrown
|
||||||
|
* accessing the database.
|
||||||
|
* @retval #NOTMUCH_STATUS_SUCCESS
|
||||||
*/
|
*/
|
||||||
notmuch_status_t
|
notmuch_status_t
|
||||||
notmuch_database_set_config (notmuch_database_t *db, const char *key, const char *value);
|
notmuch_database_set_config (notmuch_database_t *db, const char *key, const char *value);
|
||||||
|
@ -2339,6 +2344,7 @@ notmuch_database_set_config (notmuch_database_t *db, const char *key, const char
|
||||||
* caller.
|
* caller.
|
||||||
*
|
*
|
||||||
* @since libnotmuch 4.4 (notmuch 0.23)
|
* @since libnotmuch 4.4 (notmuch 0.23)
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
notmuch_status_t
|
notmuch_status_t
|
||||||
notmuch_database_get_config (notmuch_database_t *db, const char *key, char **value);
|
notmuch_database_get_config (notmuch_database_t *db, const char *key, char **value);
|
||||||
|
@ -2400,6 +2406,56 @@ void
|
||||||
notmuch_config_list_destroy (notmuch_config_list_t *config_list);
|
notmuch_config_list_destroy (notmuch_config_list_t *config_list);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration keys known to libnotmuch
|
||||||
|
*/
|
||||||
|
typedef enum _notmuch_config_key {
|
||||||
|
NOTMUCH_CONFIG_FIRST,
|
||||||
|
NOTMUCH_CONFIG_DATABASE_PATH = NOTMUCH_CONFIG_FIRST,
|
||||||
|
NOTMUCH_CONFIG_EXCLUDE_TAGS,
|
||||||
|
NOTMUCH_CONFIG_NEW_TAGS,
|
||||||
|
NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS,
|
||||||
|
NOTMUCH_CONFIG_PRIMARY_EMAIL,
|
||||||
|
NOTMUCH_CONFIG_OTHER_EMAIL,
|
||||||
|
NOTMUCH_CONFIG_USER_NAME,
|
||||||
|
NOTMUCH_CONFIG_LAST
|
||||||
|
} notmuch_config_key_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get a configuration value from an open database.
|
||||||
|
*
|
||||||
|
* This value reflects all configuration information given at the time
|
||||||
|
* the database was opened.
|
||||||
|
*
|
||||||
|
* @param[in] notmuch database
|
||||||
|
* @param[in] key configuration key
|
||||||
|
*
|
||||||
|
* @since libnotmuch 5.4 (notmuch 0.32)
|
||||||
|
*
|
||||||
|
* @retval NULL if 'key' unknown or if no value is known for
|
||||||
|
* 'key'. Otherwise returns a string owned by notmuch which should
|
||||||
|
* not be modified nor freed by the caller.
|
||||||
|
*/
|
||||||
|
const char *
|
||||||
|
notmuch_config_get (notmuch_database_t *notmuch, notmuch_config_key_t key);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set a configuration value from in an open database.
|
||||||
|
*
|
||||||
|
* This value reflects all configuration information given at the time
|
||||||
|
* the database was opened.
|
||||||
|
*
|
||||||
|
* @param[in,out] notmuch database open read/write
|
||||||
|
* @param[in] key configuration key
|
||||||
|
* @param[in] val configuration value
|
||||||
|
*
|
||||||
|
* @since libnotmuch 5.4 (notmuch 0.32)
|
||||||
|
*
|
||||||
|
* @retval returns any return value for notmuch_database_set_config.
|
||||||
|
*/
|
||||||
|
notmuch_status_t
|
||||||
|
notmuch_config_set (notmuch_database_t *notmuch, notmuch_config_key_t key, const char *val);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get the current default indexing options for a given database.
|
* get the current default indexing options for a given database.
|
||||||
*
|
*
|
||||||
|
|
|
@ -201,6 +201,44 @@ EOF
|
||||||
test_expect_equal_file EXPECTED OUTPUT
|
test_expect_equal_file EXPECTED OUTPUT
|
||||||
restore_database
|
restore_database
|
||||||
|
|
||||||
|
backup_database
|
||||||
|
test_begin_subtest "get config by key"
|
||||||
|
notmuch config set test.key1 overridden
|
||||||
|
cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
|
||||||
|
{
|
||||||
|
printf("before = %s\n", notmuch_config_get (db, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS));
|
||||||
|
EXPECT0(notmuch_database_set_config (db, "maildir.synchronize_flags", "false"));
|
||||||
|
printf("after = %s\n", notmuch_config_get (db, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS));
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
cat <<'EOF' >EXPECTED
|
||||||
|
== stdout ==
|
||||||
|
before = true
|
||||||
|
after = false
|
||||||
|
== stderr ==
|
||||||
|
EOF
|
||||||
|
test_expect_equal_file EXPECTED OUTPUT
|
||||||
|
restore_database
|
||||||
|
|
||||||
|
backup_database
|
||||||
|
test_begin_subtest "set config by key"
|
||||||
|
notmuch config set test.key1 overridden
|
||||||
|
cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
|
||||||
|
{
|
||||||
|
printf("before = %s\n", notmuch_config_get (db, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS));
|
||||||
|
EXPECT0(notmuch_config_set (db, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS, "false"));
|
||||||
|
printf("after = %s\n", notmuch_config_get (db, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS));
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
cat <<'EOF' >EXPECTED
|
||||||
|
== stdout ==
|
||||||
|
before = true
|
||||||
|
after = false
|
||||||
|
== stderr ==
|
||||||
|
EOF
|
||||||
|
test_expect_equal_file EXPECTED OUTPUT
|
||||||
|
restore_database
|
||||||
|
|
||||||
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