profile_name);
}
+static notmuch_status_t
+_choose_hook_dir (notmuch_database_t *notmuch,
+ const char *profile,
+ char **message)
+{
+ const char *config;
+ const char *hook_dir;
+ struct stat st;
+ int err;
+
+ hook_dir = notmuch_config_get (notmuch, NOTMUCH_CONFIG_HOOK_DIR);
+
+ if (hook_dir)
+ return NOTMUCH_STATUS_SUCCESS;
+
+ config = _xdg_dir (notmuch, "XDG_CONFIG_HOME", ".config", profile);
+ if (! config)
+ return NOTMUCH_STATUS_PATH_ERROR;
+
+ hook_dir = talloc_asprintf (notmuch, "%s/hooks", config);
+
+ err = stat (hook_dir, &st);
+ if (err) {
+ if (errno == ENOENT) {
+ const char *database_path = notmuch_database_get_path (notmuch);
+ hook_dir = talloc_asprintf (notmuch, "%s/.notmuch/hooks", database_path);
+ } else {
+ IGNORE_RESULT (asprintf (message, "Error: Cannot stat %s: %s.\n",
+ hook_dir, strerror (errno)));
+ return NOTMUCH_STATUS_FILE_ERROR;
+ }
+ }
+
+ _notmuch_config_cache (notmuch, NOTMUCH_CONFIG_HOOK_DIR, hook_dir);
+
+ return NOTMUCH_STATUS_SUCCESS;
+}
+
static notmuch_status_t
_load_key_file (const char *path,
const char *profile,
if (status)
goto DONE;
+ status = _choose_hook_dir (notmuch, profile, &message);
+ if (status)
+ goto DONE;
+
status = _notmuch_config_load_defaults (notmuch);
if (status)
goto DONE;
test_expect_equal_file EXPECTED OUTPUT
restore_database
+test_begin_subtest "NOTMUCH_CONFIG_HOOK_DIR: traditional"
+cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
+{
+ const char *val = notmuch_config_get (db, NOTMUCH_CONFIG_HOOK_DIR);
+ printf("database.hook_dir = %s\n", val);
+}
+EOF
+cat <<'EOF' >EXPECTED
+== stdout ==
+database.hook_dir = MAIL_DIR/.notmuch/hooks
+== stderr ==
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "NOTMUCH_CONFIG_HOOK_DIR: xdg"
+dir="${HOME}/.config/notmuch/default/hooks"
+mkdir -p $dir
+cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
+{
+ const char *val = notmuch_config_get (db, NOTMUCH_CONFIG_HOOK_DIR);
+ printf("database.hook_dir = %s\n", val);
+}
+EOF
+cat <<'EOF' >EXPECTED
+== stdout ==
+database.hook_dir = CWD/home/.config/notmuch/default/hooks
+== stderr ==
+EOF
+rmdir $dir
+test_expect_equal_file EXPECTED OUTPUT
+
test_begin_subtest "notmuch_config_get_values"
cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
{
cat <<'EOF' >EXPECTED
== stdout ==
MAIL_DIR
-NULL
+MAIL_DIR/.notmuch/hooks
inbox;unread
NULL