mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
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:
parent
2c879667b3
commit
c82554193d
4 changed files with 48 additions and 8 deletions
13
lib/open.cc
13
lib/open.cc
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
;;
|
;;
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue