};
static const char *_notmuch_config_key_to_string (notmuch_config_key_t key);
+static char *_expand_path (void *ctx, const char *key, const char *val);
static int
_notmuch_config_list_destroy (notmuch_config_list_t *list)
return status;
for (; notmuch_config_list_valid (list); notmuch_config_list_move_to_next (list)) {
- _notmuch_string_map_append (notmuch->config,
- notmuch_config_list_key (list),
- notmuch_config_list_value (list));
+ const char *key = notmuch_config_list_key (list);
+ char *normalized_val = NULL;
+
+ /* If we opened from a given path, do not overwrite it */
+ if (strcmp (key, "database.path") == 0 &&
+ (notmuch->params & NOTMUCH_PARAM_DATABASE) &&
+ notmuch->xapian_db)
+ continue;
+
+ normalized_val = _expand_path (list, key, notmuch_config_list_value (list));
+ _notmuch_string_map_append (notmuch->config, key, normalized_val);
+ talloc_free (normalized_val);
}
return status;
const char *
notmuch_config_values_get (notmuch_config_values_t *values)
{
- return talloc_strndup (values, values->iterator, values->tok_len);
+ return talloc_strndup (values->children, values->iterator, values->tok_len);
}
void
for (gchar **keys_p = keys; *keys_p; keys_p++) {
char *absolute_key = talloc_asprintf (notmuch, "%s.%s", *grp, *keys_p);
char *normalized_val;
- val = g_key_file_get_value (file, *grp, *keys_p, NULL);
+
+ /* If we opened from a given path, do not overwrite it */
+ if (strcmp (absolute_key, "database.path") == 0 &&
+ (notmuch->params & NOTMUCH_PARAM_DATABASE) &&
+ notmuch->xapian_db)
+ continue;
+
+ val = g_key_file_get_string (file, *grp, *keys_p, NULL);
if (! val) {
status = NOTMUCH_STATUS_FILE_ERROR;
goto DONE;
}
+
normalized_val = _expand_path (notmuch, absolute_key, val);
_notmuch_string_map_set (notmuch->config, absolute_key, normalized_val);
g_free (val);
static const char *
_get_email_from_passwd_file (void *ctx)
{
-
- char hostname[256];
- struct hostent *hostent;
- const char *domainname;
char *email;
char *username = _get_username_from_passwd_file (ctx);
- gethostname (hostname, 256);
- hostname[255] = '\0';
-
- hostent = gethostbyname (hostname);
- if (hostent && (domainname = strchr (hostent->h_name, '.')))
- domainname += 1;
- else
- domainname = "(none)";
-
- email = talloc_asprintf (ctx, "%s@%s.%s",
- username, hostname, domainname);
+ email = talloc_asprintf (ctx, "%s@localhost", username);
talloc_free (username);
return email;
return "user.other_email";
case NOTMUCH_CONFIG_USER_NAME:
return "user.name";
+ case NOTMUCH_CONFIG_AUTOCOMMIT:
+ return "database.autocommit";
+ case NOTMUCH_CONFIG_EXTRA_HEADERS:
+ return "show.extra_headers";
+ case NOTMUCH_CONFIG_INDEX_AS_TEXT:
+ return "index.as_text";
default:
return NULL;
}
else
email = _get_email_from_passwd_file (notmuch);
return email;
+ case NOTMUCH_CONFIG_INDEX_AS_TEXT:
case NOTMUCH_CONFIG_NEW_IGNORE:
return "";
+ case NOTMUCH_CONFIG_AUTOCOMMIT:
+ return "8000";
+ case NOTMUCH_CONFIG_EXTRA_HEADERS:
case NOTMUCH_CONFIG_HOOK_DIR:
case NOTMUCH_CONFIG_BACKUP_DIR:
case NOTMUCH_CONFIG_OTHER_EMAIL:
_notmuch_config_load_defaults (notmuch_database_t *notmuch)
{
notmuch_config_key_t key;
+ notmuch_status_t status = NOTMUCH_STATUS_SUCCESS;
+
+ if (notmuch->config == NULL)
+ notmuch->config = _notmuch_string_map_create (notmuch);
for (key = NOTMUCH_CONFIG_FIRST;
key < NOTMUCH_CONFIG_LAST;
val = _notmuch_string_map_get (notmuch->config, key_string);
if (! val) {
+ if (key == NOTMUCH_CONFIG_MAIL_ROOT && (notmuch->params & NOTMUCH_PARAM_SPLIT))
+ status = NOTMUCH_STATUS_NO_MAIL_ROOT;
+
_notmuch_string_map_set (notmuch->config, key_string, _notmuch_config_default (notmuch,
key));
}
}
- return NOTMUCH_STATUS_SUCCESS;
+ return status;
}
const char *