From d215a222dc463620d1a612f7f119e68e40372dff Mon Sep 17 00:00:00 2001 From: David Bremner Date: Sat, 13 Feb 2021 16:43:43 -0400 Subject: [PATCH] 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 < log.${test_count} <&1 | notmuch_dir_sanitize > OUTPUT cat < 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 < 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 -- git format-patch -1 --stdout -C d215a222dc463620d1a612f7f119e68e40372dff