commit d215a222dc463620d1a612f7f119e68e40372dff (patch)
parent deb1e0fb WIP: lib/open: use NOTMUCH_STATUS_NO_DATABASE
tree 1d53938e45e0f236589d6a95619bc2583ccba3c2
author David Bremner <david@tethera.net> 2021-02-13 16:43:43 -0400
committer David Bremner <david@tethera.net> 2021-02-25 07:15:58 -0400
WIP: move test for database out of notmuch_command
---
lib/open.cc | 17 ++++++++++++----
notmuch.c | 52 +++++++++++++++++++-----------------------------
test/T040-setup.sh | 9 +++------
test/T055-path-config.sh | 16 +++++++++++++++
4 files changed, 52 insertions(+), 42 deletions(-)
diff --git a/lib/open.cc b/lib/open.cc
index 4021b490..9edf0df3 100644
--- a/lib/open.cc
+++ b/lib/open.cc
@@ -724,12 +724,12 @@ _maybe_load_config_from_database (notmuch_database_t *notmuch,
char *message; /* ignored */
if (_db_dir_exists (database_path, &message))
- return NOTMUCH_STATUS_SUCCESS;
+ return NOTMUCH_STATUS_NO_DATABASE;
_set_database_path (notmuch, database_path);
if (_notmuch_choose_xapian_path (notmuch, database_path, ¬much->xapian_path, &message))
- return NOTMUCH_STATUS_SUCCESS;
+ return NOTMUCH_STATUS_NO_DATABASE;
(void) _finish_open (notmuch, profile, NOTMUCH_DATABASE_MODE_READ_ONLY, key_file, &message);
@@ -774,16 +774,25 @@ notmuch_database_load_config (const char *database_path,
switch (status) {
case NOTMUCH_STATUS_NO_DATABASE:
case NOTMUCH_STATUS_SUCCESS:
- status2 = status;
+ if (! status2)
+ status2 = status;
break;
default:
goto DONE;
}
+
if (database_path) {
status = _maybe_load_config_from_database (notmuch, key_file, database_path, profile);
- if (status)
+ switch (status) {
+ case NOTMUCH_STATUS_NO_DATABASE:
+ case NOTMUCH_STATUS_SUCCESS:
+ if (! status2)
+ status2 = status;
+ break;
+ default:
goto DONE;
+ }
}
if (key_file) {
diff --git a/notmuch.c b/notmuch.c
index 093af0a5..fa6b7eaa 100644
--- a/notmuch.c
+++ b/notmuch.c
@@ -369,34 +369,12 @@ notmuch_command (notmuch_config_t *config,
notmuch_database_t *notmuch,
unused(int argc), unused(char **argv))
{
- char *db_path;
- struct stat st;
-
/* If the user has never configured notmuch, then run
* notmuch_setup_command which will give a nice welcome message,
* and interactively guide the user through the configuration. */
if (notmuch_config_is_new (config))
return notmuch_setup_command (config, notmuch, 0, NULL);
- /* Notmuch is already configured, but is there a database? */
- db_path = talloc_asprintf (config, "%s/%s",
- notmuch_config_get (notmuch, NOTMUCH_CONFIG_DATABASE_PATH),
- ".notmuch");
- if (stat (db_path, &st)) {
- if (errno != ENOENT) {
- fprintf (stderr, "Error looking for notmuch database at %s: %s\n",
- db_path, strerror (errno));
- return EXIT_FAILURE;
- }
- printf ("Notmuch is configured, but there's not yet a database at\n\n\t%s\n\n",
- db_path);
- printf ("You probably want to run \"notmuch new\" now to create that database.\n\n"
- "Note that the first run of \"notmuch new\" can take a very long time\n"
- "and that the resulting database will use roughly the same amount of\n"
- "storage space as the email being indexed.\n\n");
- return EXIT_SUCCESS;
- }
-
printf ("Notmuch is configured and appears to have a database. Excellent!\n\n"
"At this point you can start exploring the functionality of notmuch by\n"
"using commands such as:\n\n"
@@ -561,19 +539,29 @@ main (int argc, char *argv[])
¬much,
&status_string);
- if (status == NOTMUCH_STATUS_NO_CONFIG && !(command->mode & NOTMUCH_COMMAND_CONFIG_CREATE)) {
- fputs ("Try running 'notmuch setup' to create a configuration.", stderr);
- goto DONE;
- }
-
- if (status && (status != NOTMUCH_STATUS_NO_CONFIG)) {
- if (status_string) {
- fputs (status_string, stderr);
- free (status_string);
+ switch (status) {
+ case NOTMUCH_STATUS_NO_CONFIG:
+ if (!(command->mode & NOTMUCH_COMMAND_CONFIG_CREATE)) {
+ fputs ("Try running 'notmuch setup' to create a configuration.", stderr);
+ goto DONE;
}
+ break;
+ case NOTMUCH_STATUS_NO_DATABASE:
+ if (! command_name) {
+ printf ("Notmuch is configured, but no database was found.\n");
+ printf ("You probably want to run \"notmuch new\" now to create a database.\n\n"
+ "Note that the first run of \"notmuch new\" can take a very long time\n"
+ "and that the resulting database will use roughly the same amount of\n"
+ "storage space as the email being indexed.\n\n");
+ status = NOTMUCH_STATUS_SUCCESS;
+ goto DONE;
+ }
+ break;
+ case NOTMUCH_STATUS_SUCCESS:
+ break;
+ default:
goto DONE;
}
-
}
if (command->mode & NOTMUCH_COMMAND_CONFIG_OPEN) {
diff --git a/test/T040-setup.sh b/test/T040-setup.sh
index 46a9f87b..0c529a61 100755
--- a/test/T040-setup.sh
+++ b/test/T040-setup.sh
@@ -10,7 +10,7 @@ Error: cannot load config file.
Try running 'notmuch setup' to create a configuration."
test_begin_subtest "Create a new config interactively"
-notmuch --config=new-notmuch-config > /dev/null <<EOF
+notmuch --config=new-notmuch-config > log.${test_count} <<EOF
Test Suite
test.suite@example.com
another.suite@example.com
@@ -44,11 +44,8 @@ test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "notmuch with a config but without a database suggests notmuch new"
notmuch 2>&1 | notmuch_dir_sanitize > OUTPUT
cat <<EOF > EXPECTED
-Notmuch is configured, but there's not yet a database at
-
- MAIL_DIR/.notmuch
-
-You probably want to run "notmuch new" now to create that database.
+Notmuch is configured, but no database was found.
+You probably want to run "notmuch new" now to create a database.
Note that the first run of "notmuch new" can take a very long time
and that the resulting database will use roughly the same amount of
diff --git a/test/T055-path-config.sh b/test/T055-path-config.sh
index d8828342..0a34e67f 100755
--- a/test/T055-path-config.sh
+++ b/test/T055-path-config.sh
@@ -199,6 +199,22 @@ EOF
"$output" \
"Welcome to a new version of notmuch! Your database will now be upgraded."
+ test_begin_subtest "notmuch +config -database suggests notmuch new ($config)"
+ mv "$XAPIAN_PATH" "${XAPIAN_PATH}.bak"
+ notmuch > OUTPUT
+cat <<EOF > EXPECTED
+Notmuch is configured, but no database was found.
+You probably want to run "notmuch new" now to create a database.
+
+Note that the first run of "notmuch new" can take a very long time
+and that the resulting database will use roughly the same amount of
+storage space as the email being indexed.
+
+EOF
+ mv "${XAPIAN_PATH}.bak" "$XAPIAN_PATH"
+
+ test_expect_equal_file EXPECTED OUTPUT
+
restore_config
done
glossary
--------
Commit objects reference one tree, and zero or more parents.
Single parent commits can typically generate a patch in
unified diff format via `git format-patch'.
Multiple parents means the commit is a merge.
Root commits have no ancestor. Note that it is
possible to have multiple root commits when merging independent histories.
Every commit references one top-level tree object.
git clone https://yhetil.org/notmuch.git