From 8ba3057d01b11fb806581f8dc451a8891a4d4e0e Mon Sep 17 00:00:00 2001 From: David Bremner Date: Fri, 29 Jul 2022 08:23:11 -0300 Subject: [PATCH] lib/open: return non-SUCCESS on missing database path This simplifies the logic of creating the directory path when it doesn't exist. --- lib/open.cc | 19 +++++++++++-------- test/T560-lib-error.sh | 4 ++-- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/lib/open.cc b/lib/open.cc index 85e46dc7..bc450555 100644 --- a/lib/open.cc +++ b/lib/open.cc @@ -192,6 +192,8 @@ _choose_database_path (notmuch_database_t *notmuch, const char **database_path, char **message) { + notmuch_status_t status; + if (! *database_path) { *database_path = getenv ("NOTMUCH_DATABASE"); } @@ -207,8 +209,6 @@ _choose_database_path (notmuch_database_t *notmuch, } } if (! *database_path) { - notmuch_status_t status; - *database_path = _xdg_dir (notmuch, "XDG_DATA_HOME", ".local/share", profile); status = _db_dir_exists (*database_path, message); if (status) { @@ -223,8 +223,6 @@ _choose_database_path (notmuch_database_t *notmuch, } if (! *database_path) { - notmuch_status_t status; - *database_path = talloc_asprintf (notmuch, "%s/mail", getenv ("HOME")); status = _db_dir_exists (*database_path, message); if (status) { @@ -241,6 +239,15 @@ _choose_database_path (notmuch_database_t *notmuch, *message = strdup ("Error: Database path must be absolute.\n"); return NOTMUCH_STATUS_PATH_ERROR; } + + status = _db_dir_exists (*database_path, message); + if (status) { + IGNORE_RESULT (asprintf (message, + "Error: database path '%s' does not exist or is not a directory.\n", + *database_path)); + return NOTMUCH_STATUS_NO_DATABASE; + } + return NOTMUCH_STATUS_SUCCESS; } @@ -638,10 +645,6 @@ notmuch_database_create_with_config (const char *database_path, &database_path, &message))) goto DONE; - status = _db_dir_exists (database_path, &message); - if (status) - goto DONE; - _set_database_path (notmuch, database_path); if (key_file && ! (notmuch->params & NOTMUCH_PARAM_SPLIT)) { diff --git a/test/T560-lib-error.sh b/test/T560-lib-error.sh index a2901ff6..30cce943 100755 --- a/test/T560-lib-error.sh +++ b/test/T560-lib-error.sh @@ -91,7 +91,7 @@ EOF cat <<'EOF' >EXPECTED == stdout == == stderr == -Error: Cannot open database at CWD/nonexistent/foo: No such file or directory. +Error: database path 'CWD/nonexistent/foo' does not exist or is not a directory. EOF test_expect_equal_file EXPECTED OUTPUT @@ -132,7 +132,7 @@ EOF cat <<'EOF' >EXPECTED == stdout == == stderr == -Error: Cannot open database at CWD/nonexistent/foo: No such file or directory. +Error: database path 'CWD/nonexistent/foo' does not exist or is not a directory. EOF test_expect_equal_file EXPECTED OUTPUT