lib/open: pull _load_key_file out of _choose_database_path

Although this increases code duplication, it also increases
flexibility in handling various combinations of missing config file
and missing database.
This commit is contained in:
David Bremner 2021-02-10 20:02:37 -04:00
parent 79a4b2e9e7
commit a3444e873f

View file

@ -183,27 +183,18 @@ _db_dir_exists (const char *database_path, char **message)
static notmuch_status_t
_choose_database_path (void *ctx,
const char *config_path,
const char *profile,
GKeyFile **key_file,
GKeyFile *key_file,
const char **database_path,
bool *split,
char **message)
{
notmuch_status_t status;
status = _load_key_file (config_path, profile, key_file);
if (status) {
*message = strdup ("Error: cannot load config file.\n");
return status;
}
if (! *database_path) {
*database_path = getenv ("NOTMUCH_DATABASE");
}
if (! *database_path && *key_file) {
char *path = g_key_file_get_value (*key_file, "database", "path", NULL);
if (! *database_path && key_file) {
char *path = g_key_file_get_value (key_file, "database", "path", NULL);
if (path) {
*database_path = talloc_strdup (ctx, path);
g_free (path);
@ -500,8 +491,14 @@ notmuch_database_open_with_config (const char *database_path,
goto DONE;
}
if ((status = _choose_database_path (local, config_path, profile,
&key_file, &database_path, &split,
status = _load_key_file (config_path, profile, &key_file);
if (status) {
message = strdup ("Error: cannot load config file.\n");
goto DONE;
}
if ((status = _choose_database_path (local, profile, key_file,
&database_path, &split,
&message)))
goto DONE;
@ -591,11 +588,14 @@ notmuch_database_create_with_config (const char *database_path,
goto DONE;
}
_init_libs ();
status = _load_key_file (config_path, profile, &key_file);
if (status) {
message = strdup ("Error: cannot load config file.\n");
goto DONE;
}
if ((status = _choose_database_path (local, config_path, profile,
&key_file, &database_path, &split,
&message)))
if ((status = _choose_database_path (local, profile, key_file,
&database_path, &split, &message)))
goto DONE;
status = _db_dir_exists (database_path, &message);