notmuch.git  about / heads / tags
Unnamed repository; edit this file 'description' to name the repository.
   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, &notmuch->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[])
 					       &notmuch,
 					       &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