Quoth Sebastian Spaeth on Sep 28 at 6:36 pm: > On Sat, 11 Jun 2011 16:04:26 -0400, Austin Clements <amdragon@MIT.EDU> wrote: > > Here's the reworked patch series that uses atomic sections more > > heavily rather than changing the removal API. This is atomic-new-v6 > > on http://awakening.csail.mit.edu/git/notmuch.git . > > I just caught up implementing find_message_by_filename and > begin|end_atomic > > One oddity, since databases are opened in read-only by default, I was > surprise to see find_message_by_filename on such a database have my > python instance crash... > > > lib: Add an API to find a message by filename. > > Culled from "lib: Add API's to find by filename and ..." in the old > > series. What I kept is identical. > > db.find_message_by_filename("moo") > Internal error: Failure to ensure database is writable > (lib/directory.cc:100). > > Outch? Oof. It appears that looking up a directory requires a writable database because notmuch will try to *create* a database document for the directory if one doesn't already exist. This is clearly wrong behavior for a "find" function. The exact code path is notmuch_database_find_message_by_filename _notmuch_database_filename_to_direntry _notmuch_database_find_directory_id _notmuch_directory_create _notmuch_message_add_filename currently depends on _notmuch_database_filename_to_direntry to create the directory document if it doesn't exist. Possibly _notmuch_database_filename_to_direntry, _notmuch_database_find_directory_id, and _notmuch_directory_create should acquire a flags argument with a "create" flag that controls this behavior.