X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=notmuch.c;h=46c3c63b525f626e18802772a8f0d27dd30f98f9;hb=3b8e3ab666a54407f9596a53c66ba8ce623ac91d;hp=5e59470b7efd51e4e765759cede208d8b2da23b2;hpb=1f193675c436879b5116ecbe113021f1b25734a3;p=notmuch diff --git a/notmuch.c b/notmuch.c index 5e59470b..46c3c63b 100644 --- a/notmuch.c +++ b/notmuch.c @@ -55,6 +55,7 @@ typedef struct command { typedef struct { int ignore_read_only_directories; + int saw_read_only_directory; int total_files; int processed_files; @@ -169,6 +170,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; } @@ -270,7 +272,9 @@ add_files_recursive (notmuch_database_t *notmuch, next = NULL; } - notmuch_database_set_timestamp (notmuch, path, path_mtime); + status = notmuch_database_set_timestamp (notmuch, path, path_mtime); + if (status && ret == NOTMUCH_STATUS_SUCCESS) + ret = status; DONE: if (next) @@ -461,6 +465,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; @@ -491,10 +496,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", @@ -529,6 +530,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; @@ -560,8 +562,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)); } @@ -575,8 +584,73 @@ new_command (int argc, char *argv[]) int search_command (int argc, char *argv[]) { - fprintf (stderr, "Error: search is not implemented yet.\n"); - return 1; + void *local = talloc_new (NULL); + notmuch_database_t *notmuch = NULL; + notmuch_query_t *query; + notmuch_results_t *results; + notmuch_message_t *message; + notmuch_tags_t *tags; + char *query_str; + int i; + notmuch_status_t ret = NOTMUCH_STATUS_SUCCESS; + + notmuch = notmuch_database_open (NULL); + if (notmuch == NULL) { + ret = 1; + goto DONE; + } + + /* XXX: Should add xtalloc wrappers here and use them. */ + query_str = talloc_strdup (local, ""); + + for (i = 0; i < argc; i++) { + if (i != 0) + query_str = talloc_asprintf_append (query_str, " "); + + query_str = talloc_asprintf_append (query_str, "%s", argv[i]); + } + + query = notmuch_query_create (notmuch, query_str); + if (query == NULL) { + fprintf (stderr, "Out of memory\n"); + ret = 1; + goto DONE; + } + + for (results = notmuch_query_search (query); + notmuch_results_has_more (results); + notmuch_results_advance (results)) + { + int first = 1; + message = notmuch_results_get (results); + + printf ("%s (", notmuch_message_get_message_id (message)); + + for (tags = notmuch_message_get_tags (message); + notmuch_tags_has_more (tags); + notmuch_tags_advance (tags)) + { + if (! first) + printf (" "); + + printf ("%s", notmuch_tags_get (tags)); + + first = 0; + } + + printf (")\n"); + + notmuch_message_destroy (message); + } + + notmuch_query_destroy (query); + + DONE: + if (notmuch) + notmuch_database_close (notmuch); + talloc_free (local); + + return ret; } int @@ -590,7 +664,7 @@ int dump_command (int argc, char *argv[]) { FILE *output; - notmuch_database_t *notmuch; + notmuch_database_t *notmuch = NULL; notmuch_query_t *query; notmuch_results_t *results; notmuch_message_t *message; @@ -666,7 +740,7 @@ int restore_command (int argc, char *argv[]) { FILE *input; - notmuch_database_t *notmuch; + notmuch_database_t *notmuch = NULL; char *line = NULL; size_t line_size, line_len; regex_t regex; @@ -744,7 +818,8 @@ restore_command (int argc, char *argv[]) notmuch_status_to_string (status)); } } else { - fprintf (stderr, "%s ", tag); + fprintf (stderr, "%s%s", + tag == tags ? "" : " ", tag); } }