mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-22 02:48:08 +01:00
lib/open: factor out the second half of n_d_open_with_config
The idea is to allow reuse in n_d_create_with_config. This is primarily code movement, with some changes in error messages to reduce the number of input parameters.
This commit is contained in:
parent
cba540d6f5
commit
1be79fff50
1 changed files with 67 additions and 48 deletions
115
lib/open.cc
115
lib/open.cc
|
@ -261,55 +261,18 @@ _init_libs ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
notmuch_status_t
|
static notmuch_status_t
|
||||||
notmuch_database_open_with_config (const char *database_path,
|
_finish_open (notmuch_database_t *notmuch,
|
||||||
notmuch_database_mode_t mode,
|
const char *profile,
|
||||||
const char *config_path,
|
notmuch_database_mode_t mode,
|
||||||
const char *profile,
|
GKeyFile *key_file,
|
||||||
notmuch_database_t **database,
|
char **message_ptr)
|
||||||
char **status_string)
|
|
||||||
{
|
{
|
||||||
notmuch_status_t status = NOTMUCH_STATUS_SUCCESS;
|
notmuch_status_t status = NOTMUCH_STATUS_SUCCESS;
|
||||||
void *local = talloc_new (NULL);
|
char *incompat_features;
|
||||||
notmuch_database_t *notmuch = NULL;
|
|
||||||
char *notmuch_path, *incompat_features;
|
|
||||||
char *message = NULL;
|
char *message = NULL;
|
||||||
unsigned int version;
|
unsigned int version;
|
||||||
GKeyFile *key_file = NULL;
|
const char *database_path = notmuch_database_get_path (notmuch);
|
||||||
|
|
||||||
_init_libs ();
|
|
||||||
|
|
||||||
notmuch = _alloc_notmuch ();
|
|
||||||
if (! notmuch) {
|
|
||||||
status = NOTMUCH_STATUS_OUT_OF_MEMORY;
|
|
||||||
goto DONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((status = _choose_database_path (local, config_path, profile,
|
|
||||||
&key_file, &database_path, &message)))
|
|
||||||
goto DONE;
|
|
||||||
|
|
||||||
_set_database_path (notmuch, database_path);
|
|
||||||
|
|
||||||
status = _db_dir_exists (database_path, &message);
|
|
||||||
if (status)
|
|
||||||
goto DONE;
|
|
||||||
|
|
||||||
if (! (notmuch_path = talloc_asprintf (local, "%s/%s", database_path, ".notmuch"))) {
|
|
||||||
message = strdup ("Out of memory\n");
|
|
||||||
status = NOTMUCH_STATUS_OUT_OF_MEMORY;
|
|
||||||
goto DONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
status = _db_dir_exists (notmuch_path, &message);
|
|
||||||
if (status)
|
|
||||||
goto DONE;
|
|
||||||
|
|
||||||
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 {
|
try {
|
||||||
std::string last_thread_id;
|
std::string last_thread_id;
|
||||||
|
@ -332,7 +295,7 @@ notmuch_database_open_with_config (const char *database_path,
|
||||||
"Error: Notmuch database at %s\n"
|
"Error: Notmuch database at %s\n"
|
||||||
" has a newer database format version (%u) than supported by this\n"
|
" has a newer database format version (%u) than supported by this\n"
|
||||||
" version of notmuch (%u).\n",
|
" version of notmuch (%u).\n",
|
||||||
notmuch_path, version, NOTMUCH_DATABASE_VERSION));
|
database_path, version, NOTMUCH_DATABASE_VERSION));
|
||||||
notmuch_database_destroy (notmuch);
|
notmuch_database_destroy (notmuch);
|
||||||
notmuch = NULL;
|
notmuch = NULL;
|
||||||
status = NOTMUCH_STATUS_FILE_ERROR;
|
status = NOTMUCH_STATUS_FILE_ERROR;
|
||||||
|
@ -342,7 +305,7 @@ notmuch_database_open_with_config (const char *database_path,
|
||||||
/* Check features. */
|
/* Check features. */
|
||||||
incompat_features = NULL;
|
incompat_features = NULL;
|
||||||
notmuch->features = _notmuch_database_parse_features (
|
notmuch->features = _notmuch_database_parse_features (
|
||||||
local, notmuch->xapian_db->get_metadata ("features").c_str (),
|
notmuch, notmuch->xapian_db->get_metadata ("features").c_str (),
|
||||||
version, mode == NOTMUCH_DATABASE_MODE_READ_WRITE ? 'w' : 'r',
|
version, mode == NOTMUCH_DATABASE_MODE_READ_WRITE ? 'w' : 'r',
|
||||||
&incompat_features);
|
&incompat_features);
|
||||||
if (incompat_features) {
|
if (incompat_features) {
|
||||||
|
@ -350,7 +313,7 @@ notmuch_database_open_with_config (const char *database_path,
|
||||||
"Error: Notmuch database at %s\n"
|
"Error: Notmuch database at %s\n"
|
||||||
" requires features (%s)\n"
|
" requires features (%s)\n"
|
||||||
" not supported by this version of notmuch.\n",
|
" not supported by this version of notmuch.\n",
|
||||||
notmuch_path, incompat_features));
|
database_path, incompat_features));
|
||||||
notmuch_database_destroy (notmuch);
|
notmuch_database_destroy (notmuch);
|
||||||
notmuch = NULL;
|
notmuch = NULL;
|
||||||
status = NOTMUCH_STATUS_FILE_ERROR;
|
status = NOTMUCH_STATUS_FILE_ERROR;
|
||||||
|
@ -430,6 +393,62 @@ notmuch_database_open_with_config (const char *database_path,
|
||||||
notmuch = NULL;
|
notmuch = NULL;
|
||||||
status = NOTMUCH_STATUS_XAPIAN_EXCEPTION;
|
status = NOTMUCH_STATUS_XAPIAN_EXCEPTION;
|
||||||
}
|
}
|
||||||
|
DONE:
|
||||||
|
if (message_ptr)
|
||||||
|
*message_ptr = message;
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
notmuch_status_t
|
||||||
|
notmuch_database_open_with_config (const char *database_path,
|
||||||
|
notmuch_database_mode_t mode,
|
||||||
|
const char *config_path,
|
||||||
|
const char *profile,
|
||||||
|
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;
|
||||||
|
char *message = NULL;
|
||||||
|
GKeyFile *key_file = NULL;
|
||||||
|
|
||||||
|
_init_libs ();
|
||||||
|
|
||||||
|
notmuch = _alloc_notmuch ();
|
||||||
|
if (! notmuch) {
|
||||||
|
status = NOTMUCH_STATUS_OUT_OF_MEMORY;
|
||||||
|
goto DONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((status = _choose_database_path (local, config_path, profile, &key_file, &database_path,
|
||||||
|
&message)))
|
||||||
|
goto DONE;
|
||||||
|
|
||||||
|
_set_database_path (notmuch, database_path);
|
||||||
|
|
||||||
|
status = _db_dir_exists (database_path, &message);
|
||||||
|
if (status)
|
||||||
|
goto DONE;
|
||||||
|
|
||||||
|
if (! (notmuch_path = talloc_asprintf (local, "%s/%s", database_path, ".notmuch"))) {
|
||||||
|
message = strdup ("Out of memory\n");
|
||||||
|
status = NOTMUCH_STATUS_OUT_OF_MEMORY;
|
||||||
|
goto DONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = _db_dir_exists (notmuch_path, &message);
|
||||||
|
if (status)
|
||||||
|
goto DONE;
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = _finish_open (notmuch, profile, mode, key_file, &message);
|
||||||
|
|
||||||
DONE:
|
DONE:
|
||||||
talloc_free (local);
|
talloc_free (local);
|
||||||
|
|
Loading…
Reference in a new issue