[PATCH 6/6] lib: factor out notmuch_database_open* related code to own file
Reduce the size of database.cc, and prepare for extending the database opening API --- lib/Makefile.local | 3 +- lib/database.cc| 219 - lib/open.cc| 218 3 files changed, 220 insertions(+), 220 deletions(-) create mode 100644 lib/open.cc diff --git a/lib/Makefile.local b/lib/Makefile.local index 3aa9e80f..ddd169dc 100644 --- a/lib/Makefile.local +++ b/lib/Makefile.local @@ -61,7 +61,8 @@ libnotmuch_cxx_srcs = \ $(dir)/thread.cc \ $(dir)/thread-fp.cc \ $(dir)/features.cc \ - $(dir)/prefix.cc + $(dir)/prefix.cc\ + $(dir)/open.cc libnotmuch_modules := $(libnotmuch_c_srcs:.c=.o) $(libnotmuch_cxx_srcs:.cc=.o) diff --git a/lib/database.cc b/lib/database.cc index defa3062..0f4e2ff9 100644 --- a/lib/database.cc +++ b/lib/database.cc @@ -19,10 +19,6 @@ */ #include "database-private.h" -#include "parse-time-vrp.h" -#include "query-fp.h" -#include "thread-fp.h" -#include "regexp-fields.h" #include "string-util.h" #include @@ -50,12 +46,6 @@ typedef struct { #define STRINGIFY(s) _SUB_STRINGIFY (s) #define _SUB_STRINGIFY(s) #s -#if HAVE_XAPIAN_DB_RETRY_LOCK -#define DB_ACTION (Xapian::DB_CREATE_OR_OPEN | Xapian::DB_RETRY_LOCK) -#else -#define DB_ACTION Xapian::DB_CREATE_OR_OPEN -#endif - #define LOG_XAPIAN_EXCEPTION(message, error) _log_xapian_exception (__location__, message, error) static void @@ -594,215 +584,6 @@ _notmuch_database_new_revision (notmuch_database_t *notmuch) return new_revision; } -notmuch_status_t -notmuch_database_open (const char *path, - notmuch_database_mode_t mode, - notmuch_database_t **database) -{ -char *status_string = NULL; -notmuch_status_t status; - -status = notmuch_database_open_verbose (path, mode, database, - &status_string); - -if (status_string) { - fputs (status_string, stderr); - free (status_string); -} - -return status; -} - -notmuch_status_t -notmuch_database_open_verbose (const char *path, - notmuch_database_mode_t mode, - notmuch_database_t **database, - char **status_string) -{ -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 *message = NULL; -struct stat st; -int err; -unsigned int i, version; -static int initialized = 0; - -if (path == NULL) { - message = strdup ("Error: Cannot open a database for a NULL path.\n"); - status = NOTMUCH_STATUS_NULL_POINTER; - goto DONE; -} - -if (path[0] != '/') { - message = strdup ("Error: Database path must be absolute.\n"); - status = NOTMUCH_STATUS_PATH_ERROR; - goto DONE; -} - -if (! (notmuch_path = talloc_asprintf (local, "%s/%s", path, ".notmuch"))) { - message = strdup ("Out of memory\n"); - status = NOTMUCH_STATUS_OUT_OF_MEMORY; - goto DONE; -} - -err = stat (notmuch_path, &st); -if (err) { - IGNORE_RESULT (asprintf (&message, "Error opening database at %s: %s\n", -notmuch_path, strerror (errno))); - status = NOTMUCH_STATUS_FILE_ERROR; - 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 (); -#endif - -/* Initialize gmime */ -if (! initialized) { - g_mime_init (); - initialized = 1; -} - -notmuch = talloc_zero (NULL, notmuch_database_t); -notmuch->exception_reported = false; -notmuch->status_string = NULL; -notmuch->path = talloc_strdup (notmuch, path); - -strip_trailing (notmuch->path, '/'); - -notmuch->writable_xapian_db = NULL; -notmuch->atomic_nesting = 0; -notmuch->view = 1; -try { - string last_thread_id; - string last_mod; - - if (mode == NOTMUCH_DATABASE_MODE_READ_WRITE) { - notmuch->writable_xapian_db = new Xapian::WritableDatabase (xapian_path, - DB_ACTION); - notmuch->xapian_db = notmuch->writable_xapian_db; - } else { - notmuch->xapian_db = new Xapian::Database (xapian_path); - } - - /* Check version. As of database version 3, we represent -* changes in terms of features, so assume a version bump -* means a dramatically incompatible change. */ - version = notmuch_database_get_version (notmuch); - if (version
[PATCH 6/6] lib: factor out notmuch_database_open* related code to own file
Reduce the size of database.cc, and prepare for extending the database opening API --- lib/Makefile.local | 3 +- lib/database.cc| 219 - lib/open.cc| 218 3 files changed, 220 insertions(+), 220 deletions(-) create mode 100644 lib/open.cc diff --git a/lib/Makefile.local b/lib/Makefile.local index 3aa9e80f..ddd169dc 100644 --- a/lib/Makefile.local +++ b/lib/Makefile.local @@ -61,7 +61,8 @@ libnotmuch_cxx_srcs = \ $(dir)/thread.cc \ $(dir)/thread-fp.cc \ $(dir)/features.cc \ - $(dir)/prefix.cc + $(dir)/prefix.cc\ + $(dir)/open.cc libnotmuch_modules := $(libnotmuch_c_srcs:.c=.o) $(libnotmuch_cxx_srcs:.cc=.o) diff --git a/lib/database.cc b/lib/database.cc index defa3062..0f4e2ff9 100644 --- a/lib/database.cc +++ b/lib/database.cc @@ -19,10 +19,6 @@ */ #include "database-private.h" -#include "parse-time-vrp.h" -#include "query-fp.h" -#include "thread-fp.h" -#include "regexp-fields.h" #include "string-util.h" #include @@ -50,12 +46,6 @@ typedef struct { #define STRINGIFY(s) _SUB_STRINGIFY (s) #define _SUB_STRINGIFY(s) #s -#if HAVE_XAPIAN_DB_RETRY_LOCK -#define DB_ACTION (Xapian::DB_CREATE_OR_OPEN | Xapian::DB_RETRY_LOCK) -#else -#define DB_ACTION Xapian::DB_CREATE_OR_OPEN -#endif - #define LOG_XAPIAN_EXCEPTION(message, error) _log_xapian_exception (__location__, message, error) static void @@ -594,215 +584,6 @@ _notmuch_database_new_revision (notmuch_database_t *notmuch) return new_revision; } -notmuch_status_t -notmuch_database_open (const char *path, - notmuch_database_mode_t mode, - notmuch_database_t **database) -{ -char *status_string = NULL; -notmuch_status_t status; - -status = notmuch_database_open_verbose (path, mode, database, - &status_string); - -if (status_string) { - fputs (status_string, stderr); - free (status_string); -} - -return status; -} - -notmuch_status_t -notmuch_database_open_verbose (const char *path, - notmuch_database_mode_t mode, - notmuch_database_t **database, - char **status_string) -{ -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 *message = NULL; -struct stat st; -int err; -unsigned int i, version; -static int initialized = 0; - -if (path == NULL) { - message = strdup ("Error: Cannot open a database for a NULL path.\n"); - status = NOTMUCH_STATUS_NULL_POINTER; - goto DONE; -} - -if (path[0] != '/') { - message = strdup ("Error: Database path must be absolute.\n"); - status = NOTMUCH_STATUS_PATH_ERROR; - goto DONE; -} - -if (! (notmuch_path = talloc_asprintf (local, "%s/%s", path, ".notmuch"))) { - message = strdup ("Out of memory\n"); - status = NOTMUCH_STATUS_OUT_OF_MEMORY; - goto DONE; -} - -err = stat (notmuch_path, &st); -if (err) { - IGNORE_RESULT (asprintf (&message, "Error opening database at %s: %s\n", -notmuch_path, strerror (errno))); - status = NOTMUCH_STATUS_FILE_ERROR; - 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 (); -#endif - -/* Initialize gmime */ -if (! initialized) { - g_mime_init (); - initialized = 1; -} - -notmuch = talloc_zero (NULL, notmuch_database_t); -notmuch->exception_reported = false; -notmuch->status_string = NULL; -notmuch->path = talloc_strdup (notmuch, path); - -strip_trailing (notmuch->path, '/'); - -notmuch->writable_xapian_db = NULL; -notmuch->atomic_nesting = 0; -notmuch->view = 1; -try { - string last_thread_id; - string last_mod; - - if (mode == NOTMUCH_DATABASE_MODE_READ_WRITE) { - notmuch->writable_xapian_db = new Xapian::WritableDatabase (xapian_path, - DB_ACTION); - notmuch->xapian_db = notmuch->writable_xapian_db; - } else { - notmuch->xapian_db = new Xapian::Database (xapian_path); - } - - /* Check version. As of database version 3, we represent -* changes in terms of features, so assume a version bump -* means a dramatically incompatible change. */ - version = notmuch_database_get_version (notmuch); - if (version