mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-22 02:48:08 +01:00
lib: Make notmuch_database_get_directory return NULL if the directory is not found
Using the new support from _notmuch_directory_create, this makes notmuch_database_get_directory a read-only operation that simply returns the directory object if it exists or NULL otherwise. This also means that notmuch_database_get_directory can work on read-only databases. This change breaks the directory mtime workaround in notmuch-new.c by fixing the exact issue it was working around. This permits mtime update races to prevent scans of changed directories, which non-deterministically breaks a few tests. The next patch fixes this.
This commit is contained in:
parent
67ae2377a9
commit
fe1ca14104
3 changed files with 7 additions and 13 deletions
|
@ -1328,12 +1328,9 @@ notmuch_database_get_directory (notmuch_database_t *notmuch,
|
||||||
return NOTMUCH_STATUS_NULL_POINTER;
|
return NOTMUCH_STATUS_NULL_POINTER;
|
||||||
*directory = NULL;
|
*directory = NULL;
|
||||||
|
|
||||||
/* XXX Handle read-only databases properly */
|
|
||||||
if (notmuch->mode == NOTMUCH_DATABASE_MODE_READ_ONLY)
|
|
||||||
return NOTMUCH_STATUS_READ_ONLY_DATABASE;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
*directory = _notmuch_directory_create (notmuch, path, NOTMUCH_FIND_CREATE, &status);
|
*directory = _notmuch_directory_create (notmuch, path,
|
||||||
|
NOTMUCH_FIND_LOOKUP, &status);
|
||||||
} catch (const Xapian::Error &error) {
|
} catch (const Xapian::Error &error) {
|
||||||
fprintf (stderr, "A Xapian exception occurred getting directory: %s.\n",
|
fprintf (stderr, "A Xapian exception occurred getting directory: %s.\n",
|
||||||
error.get_msg().c_str());
|
error.get_msg().c_str());
|
||||||
|
|
|
@ -148,6 +148,9 @@ typedef enum _notmuch_private_status {
|
||||||
|
|
||||||
/* Flags shared by various lookup functions. */
|
/* Flags shared by various lookup functions. */
|
||||||
typedef enum _notmuch_find_flags {
|
typedef enum _notmuch_find_flags {
|
||||||
|
/* Lookup without creating any documents. This is the default
|
||||||
|
* behavior. */
|
||||||
|
NOTMUCH_FIND_LOOKUP = 0,
|
||||||
/* If set, create the necessary document (or documents) if they
|
/* If set, create the necessary document (or documents) if they
|
||||||
* are missing. Requires a read/write database. */
|
* are missing. Requires a read/write database. */
|
||||||
NOTMUCH_FIND_CREATE = 1<<0,
|
NOTMUCH_FIND_CREATE = 1<<0,
|
||||||
|
|
|
@ -300,10 +300,8 @@ notmuch_database_end_atomic (notmuch_database_t *notmuch);
|
||||||
* (see notmuch_database_get_path), or else should be an absolute path
|
* (see notmuch_database_get_path), or else should be an absolute path
|
||||||
* with initial components that match the path of 'database'.
|
* with initial components that match the path of 'database'.
|
||||||
*
|
*
|
||||||
* Note: Currently this will create the directory object if it doesn't
|
* If this directory object does not exist in the database, this
|
||||||
* exist. In the future, when a directory object does not exist this
|
* returns NOTMUCH_STATUS_SUCCESS and sets *directory to NULL.
|
||||||
* will return NOTMUCH_STATUS_SUCCESS and set *directory to NULL.
|
|
||||||
* Callers should be prepared for this.
|
|
||||||
*
|
*
|
||||||
* Return value:
|
* Return value:
|
||||||
*
|
*
|
||||||
|
@ -313,10 +311,6 @@ notmuch_database_end_atomic (notmuch_database_t *notmuch);
|
||||||
*
|
*
|
||||||
* NOTMUCH_STATUS_XAPIAN_EXCEPTION: A Xapian exception occurred;
|
* NOTMUCH_STATUS_XAPIAN_EXCEPTION: A Xapian exception occurred;
|
||||||
* directory not retrieved.
|
* directory not retrieved.
|
||||||
*
|
|
||||||
* NOTMUCH_STATUS_READ_ONLY_DATABASE: Database was opened in read-only
|
|
||||||
* mode so the directory cannot be created (this case will be
|
|
||||||
* removed in the future).
|
|
||||||
*/
|
*/
|
||||||
notmuch_status_t
|
notmuch_status_t
|
||||||
notmuch_database_get_directory (notmuch_database_t *database,
|
notmuch_database_get_directory (notmuch_database_t *database,
|
||||||
|
|
Loading…
Reference in a new issue