]> git.cworth.org Git - notmuch/blobdiff - lib/open.cc
Merge branch 'release'
[notmuch] / lib / open.cc
index 6fa00a843b9201d5bdf56dd15b3139e7e5adb8ec..54510eace89b04a565a1b868af2d7f88d44f1e66 100644 (file)
@@ -19,9 +19,8 @@ notmuch_database_open (const char *path,
     char *status_string = NULL;
     notmuch_status_t status;
 
-    status = notmuch_database_open_verbose (path, mode, database,
-                                           &status_string);
-
+    status = notmuch_database_open_with_config (path, mode, "", NULL,
+                                               database, &status_string);
     if (status_string) {
        fputs (status_string, stderr);
        free (status_string);
@@ -199,7 +198,7 @@ _choose_database_path (void *ctx,
     }
 
     if (! *database_path && key_file) {
-       char *path = g_key_file_get_value (key_file, "database", "path", NULL);
+       char *path = g_key_file_get_string (key_file, "database", "path", NULL);
        if (path) {
            if (path[0] == '/')
                *database_path = talloc_strdup (ctx, path);
@@ -247,7 +246,7 @@ _choose_database_path (void *ctx,
 }
 
 static notmuch_database_t *
-_alloc_notmuch ()
+_alloc_notmuch (const char *database_path, const char *config_path, const char *profile)
 {
     notmuch_database_t *notmuch;
 
@@ -263,6 +262,15 @@ _alloc_notmuch ()
     notmuch->transaction_count = 0;
     notmuch->transaction_threshold = 0;
     notmuch->view = 1;
+
+    notmuch->params = NOTMUCH_PARAM_NONE;
+    if (database_path)
+       notmuch->params |= NOTMUCH_PARAM_DATABASE;
+    if (config_path)
+       notmuch->params |= NOTMUCH_PARAM_CONFIG;
+    if (profile)
+       notmuch->params |= NOTMUCH_PARAM_PROFILE;
+
     return notmuch;
 }
 
@@ -510,7 +518,7 @@ notmuch_database_open_with_config (const char *database_path,
 
     _notmuch_init ();
 
-    notmuch = _alloc_notmuch ();
+    notmuch = _alloc_notmuch (database_path, config_path, profile);
     if (! notmuch) {
        status = NOTMUCH_STATUS_OUT_OF_MEMORY;
        goto DONE;
@@ -610,7 +618,7 @@ notmuch_database_create_with_config (const char *database_path,
 
     _notmuch_init ();
 
-    notmuch = _alloc_notmuch ();
+    notmuch = _alloc_notmuch (database_path, config_path, profile);
     if (! notmuch) {
        status = NOTMUCH_STATUS_OUT_OF_MEMORY;
        goto DONE;
@@ -634,7 +642,7 @@ notmuch_database_create_with_config (const char *database_path,
 
     if (key_file && ! split) {
        char *mail_root = notmuch_canonicalize_file_name (
-           g_key_file_get_value (key_file, "database", "mail_root", NULL));
+           g_key_file_get_string (key_file, "database", "mail_root", NULL));
        char *db_path = notmuch_canonicalize_file_name (database_path);
 
        split = (mail_root && (0 != strcmp (mail_root, db_path)));
@@ -653,16 +661,12 @@ notmuch_database_create_with_config (const char *database_path,
 
        err = mkdir (notmuch_path, 0755);
        if (err) {
-           if (errno == EEXIST) {
-               status = NOTMUCH_STATUS_DATABASE_EXISTS;
-               talloc_free (notmuch);
-               notmuch = NULL;
-           } else {
+           if (errno != EEXIST) {
                IGNORE_RESULT (asprintf (&message, "Error: Cannot create directory %s: %s.\n",
                                         notmuch_path, strerror (errno)));
                status = NOTMUCH_STATUS_FILE_ERROR;
+               goto DONE;
            }
-           goto DONE;
        }
     }
 
@@ -812,7 +816,7 @@ notmuch_database_load_config (const char *database_path,
 
     _notmuch_init ();
 
-    notmuch = _alloc_notmuch ();
+    notmuch = _alloc_notmuch (database_path, config_path, profile);
     if (! notmuch) {
        status = NOTMUCH_STATUS_OUT_OF_MEMORY;
        goto DONE;
@@ -871,6 +875,13 @@ notmuch_database_load_config (const char *database_path,
     if (status_string)
        *status_string = message;
 
+    if (status &&
+       status != NOTMUCH_STATUS_NO_DATABASE
+       && status != NOTMUCH_STATUS_NO_CONFIG) {
+       notmuch_database_destroy (notmuch);
+       notmuch = NULL;
+    }
+
     if (database)
        *database = notmuch;