X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=TODO;h=fa85eb7fdc8685da42e63d3dbaa203980b26cd30;hp=8f9a1a98c5ae13e925c30bcc90777d64525abec0;hb=88bf876bae79cbaee50c62664bc1baac5cb79742;hpb=e8d8906d9c912d02adbf9ab5ed66f5d6d579fa99 diff --git a/TODO b/TODO index 8f9a1a98..fa85eb7f 100644 --- a/TODO +++ b/TODO @@ -1,12 +1,52 @@ +Write a "notmuch tag" command to add/remove tags from messages +matching a search query. + +Rename notmuch_thread_results_t and notmuch_message_results_t to +notmuch_threads_t and notmuch_messages_t respectively. + +Add a talloc context as the first argument to each command in +notmuch.c. + Write a "notmuch show" that displays a single thread. Fix to use the *last* Message-ID header if multiple such headers are encountered, (I noticed this is one thing that kept me from seeing the same message-ID values as sup). -Fix "notmuch restore" to delete the old tags from a message/thread -before adding new ones. This will require someway to temporarily -'disconnect' a notmuch_message_t from the database, (that it, disable -automatic sync for add_tag, etc.), and then reconnect it. That is, the -removal and subsequent addition of tags to the message/thread needs to -be transactional. +Audit everything for dealing with out-of-memory (and drop xutil.c). + +Write a test suite. + +Achieve 100% test coverage with the test suite. + +Think about this race condition: + + A client executes "notmuch search" + Then executes "notmuch show" on a thread + While user is reading, new mail is added to database for the thread + Client asks for the thread to be archived. + + The bug here is that email that was never read will be + archived. That's bad. The fix for the above is for the client to + archive the individual messages already retrieved and shown, not + the thread. (And in fact, we don't even have functions for removing + tags on threads.) + + But this one is harder to fix: + + A client executes "notmuch search" + While user is reading, new mail is added to database for the thread + Client asks for a thread to be archived. + + To support this operation, (archiving a thread without even seeing + the individual messages), we might need to provide a command to + archive a thread as a whole. The problem is actually easy to fix + for a persistent client. It can onto the originally retrieved + thread objects which can hold onto the originally retrieved + messages. So archiving those thread objects, (and not newly created + thread objects), will be safe. + + It's harder to fix the non-persistent "notmuch" client. One + approach is to simply tell the user to not run "notmuch new" + between reading the results of "notmuch search" and executing + "notmuch archive-thread" (or whatever we name it).