X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=notmuch.c;h=c5fef0e800961782a1941d2999a4be6f4c6146c0;hp=4ca8c1cc04f95a732cd3ff71ca481d6edc308a86;hb=be9e3ee3132457ea5936bd1225294bdfe3949a4c;hpb=144b2cbc5532e000c37b4d5ba7bb5d9ea113859f diff --git a/notmuch.c b/notmuch.c index 4ca8c1cc..c5fef0e8 100644 --- a/notmuch.c +++ b/notmuch.c @@ -43,6 +43,20 @@ #include /* g_strdup_printf */ +/* There's no point in continuing when we've detected that we've done + * something wrong internally (as opposed to the user passing in a + * bogus value). + * + * Note that __location__ comes from talloc.h. + */ +#define INTERNAL_ERROR(format, ...) \ + do { \ + fprintf(stderr, \ + "Internal error: " format " (%s)\n", \ + ##__VA_ARGS__, __location__); \ + exit (1); \ + } while (0) + #define ARRAY_SIZE(arr) (sizeof (arr) / sizeof (arr[0])) typedef int (*command_function_t) (int argc, char *argv[]); @@ -55,6 +69,7 @@ typedef struct command { typedef struct { int ignore_read_only_directories; + int saw_read_only_directory; int total_files; int processed_files; @@ -169,6 +184,7 @@ add_files_recursive (notmuch_database_t *notmuch, if (state->ignore_read_only_directories && (st->st_mode & S_IWUSR) == 0) { + state->saw_read_only_directory = TRUE; goto DONE; } @@ -253,8 +269,7 @@ add_files_recursive (notmuch_database_t *notmuch, ret = status; goto DONE; default: - fprintf (stderr, "Internal error: add_message returned unexpected value: %d\n", status); - ret = status; + INTERNAL_ERROR ("add_message returned unexpected value: %d", status); goto DONE; } if (state->processed_files % 1000 == 0) @@ -463,6 +478,7 @@ setup_command (int argc, char *argv[]) printf ("Next, we'll inspect the messages and create a database of threads:\n"); add_files_state.ignore_read_only_directories = FALSE; + add_files_state.saw_read_only_directory = FALSE; add_files_state.total_files = count; add_files_state.processed_files = 0; add_files_state.added_messages = 0; @@ -493,10 +509,6 @@ setup_command (int argc, char *argv[]) printf ("When new mail is delivered to %s in the future,\n" "run \"notmuch new\" to add it to the database.\n\n", mail_directory); - printf ("And if you have any sub-directories that are archives (that is,\n" - "they will never receive new mail), marking these directores as\n" - "read-only (chmod u-w /path/to/dir) will make \"notmuch new\"\n" - "much more efficient (it won't even look in those directories).\n\n"); if (ret) { printf ("Note: At least one error was encountered: %s\n", @@ -531,6 +543,7 @@ new_command (int argc, char *argv[]) mail_directory = notmuch_database_get_path (notmuch); add_files_state.ignore_read_only_directories = TRUE; + add_files_state.saw_read_only_directory = FALSE; add_files_state.total_files = 0; add_files_state.processed_files = 0; add_files_state.added_messages = 0; @@ -562,8 +575,15 @@ new_command (int argc, char *argv[]) printf ("No new mail---and that's not much.\n"); } + if (elapsed > 1 && ! add_files_state.saw_read_only_directory) { + printf ("\nTip: If you have any sub-directories that are archives (that is,\n" + "they will never receive new mail), marking these directores as\n" + "read-only (chmod u-w /path/to/dir) will make \"notmuch new\"\n" + "much more efficient (it won't even look in those directories).\n"); + } + if (ret) { - printf ("Note: At least one error was encountered: %s\n", + printf ("\nNote: At least one error was encountered: %s\n", notmuch_status_to_string (ret)); } @@ -811,7 +831,8 @@ restore_command (int argc, char *argv[]) notmuch_status_to_string (status)); } } else { - fprintf (stderr, "%s ", tag); + fprintf (stderr, "%s%s", + tag == tags ? "" : " ", tag); } }