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.
This commit is contained in:
David Bremner 2021-01-03 20:04:46 -04:00
parent 2c879667b3
commit c82554193d
4 changed files with 48 additions and 8 deletions

View file

@ -181,6 +181,7 @@ _choose_database_path (void *ctx,
const char *profile, const char *profile,
GKeyFile **key_file, GKeyFile **key_file,
const char **database_path, const char **database_path,
bool *split,
char **message) char **message)
{ {
notmuch_status_t status; 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) { if (*database_path == NULL) {
*message = strdup ("Error: Cannot open a database for a NULL path.\n"); *message = strdup ("Error: Cannot open a database for a NULL path.\n");
return NOTMUCH_STATUS_NULL_POINTER; return NOTMUCH_STATUS_NULL_POINTER;
@ -462,6 +468,7 @@ notmuch_database_open_with_config (const char *database_path,
notmuch_database_t *notmuch = NULL; notmuch_database_t *notmuch = NULL;
char *message = NULL; char *message = NULL;
GKeyFile *key_file = NULL; GKeyFile *key_file = NULL;
bool split = false;
_init_libs (); _init_libs ();
@ -471,7 +478,8 @@ notmuch_database_open_with_config (const char *database_path,
goto DONE; 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))) &message)))
goto DONE; goto DONE;
@ -563,7 +571,8 @@ notmuch_database_create_with_config (const char *database_path,
_init_libs (); _init_libs ();
if ((status = _choose_database_path (local, config_path, profile, if ((status = _choose_database_path (local, config_path, profile,
&key_file, &database_path, &message))) &key_file, &database_path, &split,
&message)))
goto DONE; goto DONE;
status = _db_dir_exists (database_path, &message); status = _db_dir_exists (database_path, &message);

View file

@ -37,8 +37,31 @@ symlink_config () {
unset DATABASE_PATH unset DATABASE_PATH
} }
for config in traditional split symlink; do xdg_config () {
# start each set of tests with a known set of messages 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 add_email_corpus
case $config in case $config in
@ -49,6 +72,14 @@ for config in traditional split symlink; do
split_config split_config
mv mail/.notmuch/xapian $DATABASE_PATH 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)
symlink_config symlink_config
;; ;;

View file

@ -22,7 +22,7 @@ EOF
cat <<'EOF' >EXPECTED cat <<'EOF' >EXPECTED
== stdout == == stdout ==
== stderr == == 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 EOF
test_expect_equal_file EXPECTED OUTPUT test_expect_equal_file EXPECTED OUTPUT
@ -93,7 +93,7 @@ EOF
cat <<'EOF' >EXPECTED cat <<'EOF' >EXPECTED
== stdout == == stdout ==
== stderr == == 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 EOF
test_expect_equal_file EXPECTED OUTPUT test_expect_equal_file EXPECTED OUTPUT

View file

@ -519,8 +519,8 @@ cat <<'EOF' >EXPECTED
== stdout == == stdout ==
== stderr == == stderr ==
error opening database error opening database
Erroneous NULL pointer Something went wrong trying to read or write a file
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 EOF
test_expect_equal_file EXPECTED OUTPUT test_expect_equal_file EXPECTED OUTPUT