From f0717aa380cfa84c1973f7b03948d93b261a73fe Mon Sep 17 00:00:00 2001 From: David Bremner Date: Sun, 14 Mar 2021 11:01:58 -0300 Subject: [PATCH] lib: save path of xapian database in notmuch struct. This will allow re-opening in a different mode (read/write vs. read-only) with current Xapian API. It will also prove useful when updating the compact functions to support more flexible database location. --- lib/database-private.h | 4 ++++ lib/open.cc | 19 ++++++++++--------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/lib/database-private.h b/lib/database-private.h index d83cf0d0..d936b216 100644 --- a/lib/database-private.h +++ b/lib/database-private.h @@ -189,8 +189,12 @@ operator& (notmuch_field_flag_t a, notmuch_field_flag_t b) struct _notmuch_database { bool exception_reported; + /* Path to database parent directory and or/mail root */ char *path; + /* Path to actual database */ + const char *xapian_path; + int atomic_nesting; /* true if changes have been made in this atomic section */ bool atomic_dirty; diff --git a/lib/open.cc b/lib/open.cc index 0c965d0d..12d3613f 100644 --- a/lib/open.cc +++ b/lib/open.cc @@ -199,7 +199,7 @@ notmuch_database_open_with_config (const char *database_path, notmuch_status_t status = NOTMUCH_STATUS_SUCCESS; void *local = talloc_new (NULL); notmuch_database_t *notmuch = NULL; - char *notmuch_path, *xapian_path, *incompat_features; + char *notmuch_path, *incompat_features; char *message = NULL; struct stat st; int err; @@ -225,12 +225,6 @@ notmuch_database_open_with_config (const char *database_path, goto DONE; } - if (! (xapian_path = talloc_asprintf (local, "%s/%s", notmuch_path, "xapian"))) { - message = strdup ("Out of memory\n"); - status = NOTMUCH_STATUS_OUT_OF_MEMORY; - goto DONE; - } - /* Initialize the GLib type system and threads */ #if ! GLIB_CHECK_VERSION (2, 35, 1) g_type_init (); @@ -252,16 +246,23 @@ notmuch_database_open_with_config (const char *database_path, notmuch->writable_xapian_db = NULL; notmuch->atomic_nesting = 0; notmuch->view = 1; + + if (! (notmuch->xapian_path = talloc_asprintf (notmuch, "%s/%s", notmuch_path, "xapian"))) { + message = strdup ("Out of memory\n"); + status = NOTMUCH_STATUS_OUT_OF_MEMORY; + goto DONE; + } + try { std::string last_thread_id; std::string last_mod; if (mode == NOTMUCH_DATABASE_MODE_READ_WRITE) { - notmuch->writable_xapian_db = new Xapian::WritableDatabase (xapian_path, + notmuch->writable_xapian_db = new Xapian::WritableDatabase (notmuch->xapian_path, DB_ACTION); notmuch->xapian_db = notmuch->writable_xapian_db; } else { - notmuch->xapian_db = new Xapian::Database (xapian_path); + notmuch->xapian_db = new Xapian::Database (notmuch->xapian_path); } /* Check version. As of database version 3, we represent