From c82554193d0a0c288ad49e3d4fb8c949b92f71fa Mon Sep 17 00:00:00 2001 From: David Bremner Date: Sun, 3 Jan 2021 20:04:46 -0400 Subject: [PATCH] lib/open: support XDG_DATA_HOME as a fallback database location. This changes some error reporting, either intentionally by reporting the highest level missing directory, or by side effect from looking in XDG locations when given null database location. --- lib/open.cc | 13 +++++++++++-- test/T055-path-config.sh | 35 +++++++++++++++++++++++++++++++++-- test/T560-lib-error.sh | 4 ++-- test/T590-libconfig.sh | 4 ++-- 4 files changed, 48 insertions(+), 8 deletions(-) diff --git a/lib/open.cc b/lib/open.cc index 0dfd295f..25691a8a 100644 --- a/lib/open.cc +++ b/lib/open.cc @@ -181,6 +181,7 @@ _choose_database_path (void *ctx, const char *profile, GKeyFile **key_file, const char **database_path, + bool *split, char **message) { notmuch_status_t status; @@ -203,6 +204,11 @@ _choose_database_path (void *ctx, } } + if (! *database_path) { + *database_path = _xdg_dir (ctx, "XDG_DATA_HOME", ".local/share", profile); + *split = true; + } + if (*database_path == NULL) { *message = strdup ("Error: Cannot open a database for a NULL path.\n"); return NOTMUCH_STATUS_NULL_POINTER; @@ -462,6 +468,7 @@ notmuch_database_open_with_config (const char *database_path, notmuch_database_t *notmuch = NULL; char *message = NULL; GKeyFile *key_file = NULL; + bool split = false; _init_libs (); @@ -471,7 +478,8 @@ notmuch_database_open_with_config (const char *database_path, goto DONE; } - if ((status = _choose_database_path (local, config_path, profile, &key_file, &database_path, + if ((status = _choose_database_path (local, config_path, profile, + &key_file, &database_path, &split, &message))) goto DONE; @@ -563,7 +571,8 @@ notmuch_database_create_with_config (const char *database_path, _init_libs (); if ((status = _choose_database_path (local, config_path, profile, - &key_file, &database_path, &message))) + &key_file, &database_path, &split, + &message))) goto DONE; status = _db_dir_exists (database_path, &message); diff --git a/test/T055-path-config.sh b/test/T055-path-config.sh index 6df17f80..f9a8e200 100755 --- a/test/T055-path-config.sh +++ b/test/T055-path-config.sh @@ -37,8 +37,31 @@ symlink_config () { unset DATABASE_PATH } -for config in traditional split symlink; do - # start each set of tests with a known set of messages +xdg_config () { + local dir + local profile=${1:-default} + + if [[ $profile != default ]]; then + export NOTMUCH_PROFILE=$profile + fi + + backup_config + DATABASE_PATH="${HOME}/.local/share/notmuch/${profile}" + rm -rf $DATABASE_PATH + mkdir -p $DATABASE_PATH + + config_dir="${HOME}/.config/notmuch/${profile}" + mkdir -p ${config_dir} + CONFIG_PATH=$config_dir/config + mv ${NOTMUCH_CONFIG} $CONFIG_PATH + unset NOTMUCH_CONFIG + + notmuch --config=${CONFIG_PATH} config set database.mail_root ${TMP_DIRECTORY}/mail + notmuch --config=${CONFIG_PATH} config set database.path +} + +for config in traditional split XDG XDG+profile symlink; do + #start each set of tests with an known set of messages add_email_corpus case $config in @@ -49,6 +72,14 @@ for config in traditional split symlink; do split_config mv mail/.notmuch/xapian $DATABASE_PATH ;; + XDG) + xdg_config + mv mail/.notmuch/xapian $DATABASE_PATH + ;; + XDG+profile) + xdg_config ${RANDOM} + mv mail/.notmuch/xapian $DATABASE_PATH + ;; symlink) symlink_config ;; diff --git a/test/T560-lib-error.sh b/test/T560-lib-error.sh index 03df69d9..89447e9a 100755 --- a/test/T560-lib-error.sh +++ b/test/T560-lib-error.sh @@ -22,7 +22,7 @@ EOF cat <<'EOF' >EXPECTED == stdout == == stderr == -Error: Cannot open a database for a NULL path. +Error: Cannot open database at CWD/home/.local/share/notmuch/default: No such file or directory. EOF test_expect_equal_file EXPECTED OUTPUT @@ -93,7 +93,7 @@ EOF cat <<'EOF' >EXPECTED == stdout == == stderr == -Error: Cannot open a database for a NULL path. +Error: Cannot open database at CWD/home/.local/share/notmuch/default: No such file or directory. EOF test_expect_equal_file EXPECTED OUTPUT diff --git a/test/T590-libconfig.sh b/test/T590-libconfig.sh index 5cf70987..c21c139b 100755 --- a/test/T590-libconfig.sh +++ b/test/T590-libconfig.sh @@ -519,8 +519,8 @@ cat <<'EOF' >EXPECTED == stdout == == stderr == error opening database -Erroneous NULL pointer -Error: Cannot open a database for a NULL path. +Something went wrong trying to read or write a file +Error: Cannot open database at CWD/home/.local/share/notmuch/default: No such file or directory. EOF test_expect_equal_file EXPECTED OUTPUT -- 2.43.0