X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=lib%2Fnotmuch.h;h=0c306bb5ee2fd11e1ef576db367c6d97e2583c11;hp=4295cbd09e0d626409869ed548b80c17fe2e000d;hb=957f1ba3fc1d737887029ff1787fc6bea94de00b;hpb=5a98880add247cca406cc99bf826398915ee6039;ds=sidebyside diff --git a/lib/notmuch.h b/lib/notmuch.h index 4295cbd0..0c306bb5 100644 --- a/lib/notmuch.h +++ b/lib/notmuch.h @@ -103,7 +103,7 @@ typedef enum _notmuch_status { /* Get a string representation of a notmuch_status_t value. * - * The result is readonly. + * The result is read-only. */ const char * notmuch_status_to_string (notmuch_status_t status); @@ -214,6 +214,36 @@ notmuch_database_upgrade (notmuch_database_t *database, double progress), void *closure); +/* Begin an atomic database operation. + * + * Any modifications performed between a successful begin and a + * notmuch_database_end_atomic will be applied to the database + * atomically. Note that, unlike a typical database transaction, this + * only ensures atomicity, not durability; neither begin nor end + * necessarily flush modifications to disk. + * + * Return value: + * + * NOTMUCH_STATUS_SUCCESS: Successfully entered atomic section. + * + * NOTMUCH_STATUS_XAPIAN_EXCEPTION: A Xapian exception occurred; + * atomic section not entered. + */ +notmuch_status_t +notmuch_database_begin_atomic (notmuch_database_t *notmuch); + +/* Indicate the end of an atomic database operation. + * + * Return value: + * + * NOTMUCH_STATUS_SUCCESS: Successfully completed atomic section. + * + * NOTMUCH_STATUS_XAPIAN_EXCEPTION: A Xapian exception occurred; + * atomic section not ended. + */ +notmuch_status_t +notmuch_database_end_atomic (notmuch_database_t *notmuch); + /* Retrieve a directory object from the database for 'path'. * * Here, 'path' should be a path relative to the path of 'database' @@ -510,7 +540,7 @@ notmuch_threads_move_to_next (notmuch_threads_t *threads); * * It's not strictly necessary to call this function. All memory from * the notmuch_threads_t object will be reclaimed when the - * containg query object is destroyed. + * containing query object is destroyed. */ void notmuch_threads_destroy (notmuch_threads_t *threads); @@ -926,11 +956,8 @@ notmuch_message_remove_all_tags (notmuch_message_t *message); * For each flag that is not present, the opposite action (add/remove) * is performed for the corresponding tags. * - * The only filenames examined for flags are filenames which appear to - * be within a maildir directory, (the file must be in a directory - * named "new" or "cur" and there must be a neighboring directory - * named respectively "cur" or "new"). The flags are identified as - * trailing components of the filename after a sequence of ":2,". + * Flags are identified as trailing components of the filename after a + * sequence of ":2,". * * If there are multiple filenames associated with this message, the * flag is considered present if it appears in one or more @@ -950,10 +977,11 @@ notmuch_message_maildir_flags_to_tags (notmuch_message_t *message); * * Specifically, for each filename corresponding to this message: * - * If the filename is not in a maildir directory, do nothing. - * (A maildir directory is determined as a directory named "new" or - * "cur" with a neighboring directory named respectively "cur" or - * "new".) + * If the filename is not in a maildir directory, do nothing. (A + * maildir directory is determined as a directory named "new" or + * "cur".) Similarly, if the filename has invalid maildir info, + * (repeated or outof-ASCII-order flag characters after ":2,"), then + * do nothing. * * If the filename is in a maildir directory, rename the file so that * its filename ends with the sequence ":2," followed by zero or more @@ -965,8 +993,8 @@ notmuch_message_maildir_flags_to_tags (notmuch_message_t *message); * 'R' iff the message has the "replied" tag * 'S' iff the message does not have the "unread" tag * - * Any existing flags unmentioned in the list above are left - * unaffected by the rename. + * Any existing flags unmentioned in the list above will be preserved + * in the renaming. * * Also, if this filename is in a directory named "new", rename it to * be within the neighboring directory named "cur".