mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 01:14:53 +01:00
lib/open: check for split configuration when creating database.
The main functionality will be tested when notmuch-new is converted to support split configuration. Here only the somewhat odd case of split mail root which is actually symlinked to the database path is tested.
This commit is contained in:
parent
e823d05ae6
commit
5ec6fd4dcf
2 changed files with 53 additions and 15 deletions
53
lib/open.cc
53
lib/open.cc
|
@ -545,11 +545,12 @@ notmuch_database_create_with_config (const char *database_path,
|
|||
{
|
||||
notmuch_status_t status = NOTMUCH_STATUS_SUCCESS;
|
||||
notmuch_database_t *notmuch = NULL;
|
||||
char *notmuch_path = NULL;
|
||||
const char *notmuch_path = NULL;
|
||||
char *message = NULL;
|
||||
GKeyFile *key_file = NULL;
|
||||
void *local = talloc_new (NULL);
|
||||
int err;
|
||||
bool split = false;
|
||||
|
||||
_init_libs ();
|
||||
|
||||
|
@ -571,20 +572,38 @@ notmuch_database_create_with_config (const char *database_path,
|
|||
|
||||
_set_database_path (notmuch, database_path);
|
||||
|
||||
notmuch_path = talloc_asprintf (local, "%s/%s", database_path, ".notmuch");
|
||||
if (key_file && ! split) {
|
||||
char *mail_root = canonicalize_file_name (
|
||||
g_key_file_get_value (key_file, "database", "mail_root", NULL));
|
||||
char *db_path = canonicalize_file_name (database_path);
|
||||
|
||||
err = mkdir (notmuch_path, 0755);
|
||||
if (err) {
|
||||
if (errno == EEXIST) {
|
||||
status = NOTMUCH_STATUS_DATABASE_EXISTS;
|
||||
talloc_free (notmuch);
|
||||
notmuch = NULL;
|
||||
} else {
|
||||
IGNORE_RESULT (asprintf (&message, "Error: Cannot create directory %s: %s.\n",
|
||||
notmuch_path, strerror (errno)));
|
||||
status = NOTMUCH_STATUS_FILE_ERROR;
|
||||
split = (mail_root && (0 != strcmp (mail_root, db_path)));
|
||||
|
||||
free (mail_root);
|
||||
free (db_path);
|
||||
}
|
||||
|
||||
if (split) {
|
||||
notmuch_path = database_path;
|
||||
} else {
|
||||
if (! (notmuch_path = talloc_asprintf (local, "%s/%s", database_path, ".notmuch"))) {
|
||||
status = NOTMUCH_STATUS_OUT_OF_MEMORY;
|
||||
goto DONE;
|
||||
}
|
||||
|
||||
err = mkdir (notmuch_path, 0755);
|
||||
if (err) {
|
||||
if (errno == EEXIST) {
|
||||
status = NOTMUCH_STATUS_DATABASE_EXISTS;
|
||||
talloc_free (notmuch);
|
||||
notmuch = NULL;
|
||||
} else {
|
||||
IGNORE_RESULT (asprintf (&message, "Error: Cannot create directory %s: %s.\n",
|
||||
notmuch_path, strerror (errno)));
|
||||
status = NOTMUCH_STATUS_FILE_ERROR;
|
||||
}
|
||||
goto DONE;
|
||||
}
|
||||
goto DONE;
|
||||
}
|
||||
|
||||
if (! (notmuch->xapian_path = talloc_asprintf (notmuch, "%s/%s", notmuch_path, "xapian"))) {
|
||||
|
@ -592,6 +611,14 @@ notmuch_database_create_with_config (const char *database_path,
|
|||
goto DONE;
|
||||
}
|
||||
|
||||
status = _trial_open (notmuch->xapian_path, &message);
|
||||
if (status == NOTMUCH_STATUS_SUCCESS) {
|
||||
notmuch_database_destroy (notmuch);
|
||||
notmuch = NULL;
|
||||
status = NOTMUCH_STATUS_DATABASE_EXISTS;
|
||||
goto DONE;
|
||||
}
|
||||
|
||||
status = _finish_open (notmuch,
|
||||
profile,
|
||||
NOTMUCH_DATABASE_MODE_READ_WRITE,
|
||||
|
|
|
@ -27,9 +27,17 @@ split_config () {
|
|||
DATABASE_PATH=$dir
|
||||
}
|
||||
|
||||
symlink_config () {
|
||||
local dir
|
||||
backup_config
|
||||
dir="$TMP_DIRECTORY/link.$test_count"
|
||||
ln -s $MAIL_DIR $dir
|
||||
notmuch config set database.path $dir
|
||||
notmuch config set database.mail_root $MAIL_DIR
|
||||
unset DATABASE_PATH
|
||||
}
|
||||
|
||||
|
||||
for config in traditional split; do
|
||||
for config in traditional split symlink; do
|
||||
# start each set of tests with a known set of messages
|
||||
add_email_corpus
|
||||
|
||||
|
@ -41,6 +49,9 @@ for config in traditional split; do
|
|||
split_config
|
||||
mv mail/.notmuch/xapian $DATABASE_PATH
|
||||
;;
|
||||
symlink)
|
||||
symlink_config
|
||||
;;
|
||||
esac
|
||||
|
||||
test_begin_subtest "count ($config)"
|
||||
|
|
Loading…
Reference in a new issue