/* 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);
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'
*
* 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);
* flags, and adds or removes tags on 'message' as follows when these
* flags are present:
*
- * Flag Action
- * ---- ------
+ * Flag Action if present
+ * ---- -----------------
* 'D' Adds the "draft" tag to the message
* 'F' Adds the "flagged" tag to the message
* 'P' Adds the "passed" tag to the message
* 'R' Adds the "replied" tag to the message
* 'S' Removes the "unread" tag from the message
*
- * 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,".
+ * For each flag that is not present, the opposite action (add/remove)
+ * is performed for the corresponding tags.
+ *
+ * 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
*
* 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
* of the following single-character flags (in ASCII order):
*
- * 'D' if the message has the "draft" tag
- * 'F' if the message has the "flagged" tag
- * 'P' if the message has the "passed" tag
- * 'R' if the message has the "replied" tag
- * 'S' if the message does not have the "unread" tag
+ * 'D' iff the message has the "draft" tag
+ * 'F' iff the message has the "flagged" tag
+ * 'P' iff the message has the "passed" tag
+ * '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".