libify: Move library sources down into lib directory. A "make" invocation still works from the top-level, but not from down inside the lib directory yet.
Remove notmuch_message_get_header_size and notmuch_message_get_all_headers The notmuch.c main program now uses GMime directly rather than using these functions, and I'd rather not export any functions unless we have good evidence that the functions are necessary.
notmuch search: Add (relative) date to search output The new function for formatting relative dates is nice enough that we need to start using it more places. Here's one of them.
notmuch show: Add body of message as well. This is just the raw message body for now, (so any MIME parsing will be up to the consumer). And this will likely change in the future.
notmuch show: Initial implementation (headers only) We're using a delimiter syntax that Keith is optimistic about being able to easily parse in emacs. Note: We're not escaping any occurrence of the delimiters in the message yet, so we'll need to fix that.
Fix add_message and get_filename to strip/re-add the database path. We now store only a relative path inside the database so the database is not nicely relocatable.
Add full-text indexing using the GMime library for parsing. This is based on the old notmuch-index-message.cc from early in the history of notmuch, but considerably cleaned up now that we have some experience with Xapian and know just what we want to index, (rather than just blindly trying to index exactly what sup does). This does slow down notmuch_database_add_message a *lot*, but I've got some ideas for getting some time back.
Fix incorrect name of _notmuch_thread_get_subject. Somehow this naming with an underscore crept in, (but only in the private header, so notmuch.c was compiling with no prototype). Fix to be the notmuch_thread_get_subject originally intended.
Add public notmuch_thread_get_subject And use this in "notmuch search" to display subject line as well as thread ID.
Remove all calls to g_strdup_printf Replacing them with calls to talloc_asprintf if possible, otherwise to asprintf (with it's painful error-handling leaving the pointer undefined).
Add notmuch_thread_get_tags And augment "notmuch search" to print tag values as well as thread ID values. This tool is almost usable now.
tags: Replace sort() and reset() with prepare_iterator(). The previous functions were always called together, so we might as well just have one function for this. Also, the reset() name was poor, and prepare_iterator() is much more descriptive.
tags: Re-implement tags iterator to avoid having C++ in the interface We want to be able to iterate over tags stored in various ways, so the previous TermIterator-based tags object just wasn't general enough. The new interface is nice and simple, and involves only C datatypes.
Add an initial implementation of a notmuch_thread_t object. We've now got a new notmuch_query_search_threads and a notmuch_threads_result_t iterator. The thread object itself doesn't do much yet, (just allows one to get the thread_id), but that's at least enough to see that "notmuch search" is actually doing something now, (since it has been converted to print thread IDs instead of message IDs). And maybe that's all we need. Getting the messages belonging to a thread is as simple as a notmuch_query_search_messages with a string of "thread:<thread-id>". Though it would be convenient to add notmuch_thread_get_messages which could use the existing notmuch_message_results_t iterator. Now we just need an implementation of "notmuch show" and we'll have something somewhat usable.
Re-enable the warning for unused parameters. It's easy enough to squelch the warning with an __attribute__ ((unused)) and it might just catch something for us in the future.
Change database to store only a single thread ID per message. Instead of supporting multiple thread IDs, we now merge together thread IDs if one message is ever found to belong to more than one thread. This allows for constructing complete threads when, for example, a child message doesn't include a complete list of References headers back to the beginning of the thread. It also simplifies dealing with mapping a message ID to a thread ID which is now a simple get_thread_id just like get_message_id, (and no longer an iterator-based thing like get_tags).
Add an INTERNAL_ERROR macro and use it for all internal errors. We were previously just doing fprintf;exit at each point, but I wanted to add file and line-number details to all messages, so it makes sense to use a single macro for that.
add_message: Propagate error status from notmuch_message_create_for_message_id What a great feeling to remove an XXX comment.
Drop the storage of thread ID(s) in a value. Now that we are iterating over the thread terms instead, we can drop this redundant storage (which should shrink our database a tiny bit).
Implement notmuch_tags_t on top of new notmuch_terms_t The generic notmuch_terms_t iterator should provide support for notmuch_thread_ids_t when we switch as well, (And it would be interesting to see if we could reasonably make this support a PostingIterator too. Time will tell.)