The available configuration items are described below.
**database.path**
+ Notmuch will store its database here, (in
+ sub-directory named ``.notmuch`` if **database.mail\_root**
+ is unset).
+
+ Default: ``$MAILDIR`` variable if set, otherwise ``$HOME/mail``.
+
+**database.mail_root**
The top-level directory where your mail currently exists and to
where mail will be delivered in the future. Files should be
- individual email messages. Notmuch will store its database within
- a sub-directory of the path configured here named ``.notmuch``.
+ individual email messages.
- Default: ``$MAILDIR`` variable if set, otherwise ``$HOME/mail``.
+ History: this configuration value was introduced in notmuch 0.32.
+
+ Default: For compatibility with older configurations, the value of
+ database.path is used if **database.mail\_root** is unset.
**database.hook_dir**
switch (key) {
case NOTMUCH_CONFIG_DATABASE_PATH:
return "database.path";
+ case NOTMUCH_CONFIG_MAIL_ROOT:
+ return "database.mail_root";
case NOTMUCH_CONFIG_HOOK_DIR:
return "database.hook_dir";
case NOTMUCH_CONFIG_EXCLUDE_TAGS:
}
static const char *
-_notmuch_config_default (void *ctx, notmuch_config_key_t key)
+_notmuch_config_default (notmuch_database_t *notmuch, notmuch_config_key_t key)
{
char *path;
case NOTMUCH_CONFIG_DATABASE_PATH:
path = getenv ("MAILDIR");
if (path)
- path = talloc_strdup (ctx, path);
+ path = talloc_strdup (notmuch, path);
else
- path = talloc_asprintf (ctx, "%s/mail",
+ path = talloc_asprintf (notmuch, "%s/mail",
getenv ("HOME"));
return path;
+ case NOTMUCH_CONFIG_MAIL_ROOT:
+ /* by default, mail root is the same as database path */
+ return notmuch_database_get_path (notmuch);
case NOTMUCH_CONFIG_EXCLUDE_TAGS:
return "";
case NOTMUCH_CONFIG_NEW_TAGS:
const char *db_path, *relative;
unsigned int db_path_len;
- db_path = notmuch_database_get_path (notmuch);
+ db_path = notmuch_config_get (notmuch, NOTMUCH_CONFIG_MAIL_ROOT);
db_path_len = strlen (db_path);
relative = path;
if (unlikely (message == NULL))
return NULL;
- const char *prefix = notmuch_database_get_path (notmuch);
+ const char *prefix = notmuch_config_get (notmuch, NOTMUCH_CONFIG_MAIL_ROOT);
if (prefix == NULL)
goto FAIL;
*colon = '\0';
- db_path = notmuch_database_get_path (message->notmuch);
+ db_path = notmuch_config_get (message->notmuch, NOTMUCH_CONFIG_MAIL_ROOT);
directory = _notmuch_database_get_directory_path (local,
message->notmuch,
typedef enum _notmuch_config_key {
NOTMUCH_CONFIG_FIRST,
NOTMUCH_CONFIG_DATABASE_PATH = NOTMUCH_CONFIG_FIRST,
+ NOTMUCH_CONFIG_MAIL_ROOT,
NOTMUCH_CONFIG_HOOK_DIR,
NOTMUCH_CONFIG_EXCLUDE_TAGS,
NOTMUCH_CONFIG_NEW_TAGS,
if (status)
goto DONE;
+ trial_path = talloc_asprintf (ctx, "%s/xapian", database_path);
+ status = _trial_open (trial_path, message_ptr);
+ if (status != NOTMUCH_STATUS_PATH_ERROR)
+ goto DONE;
+
notmuch_path = talloc_asprintf (ctx, "%s/.notmuch", database_path);
status = _db_dir_exists (notmuch_path, message_ptr);
if (status)
--- /dev/null
+#!/usr/bin/env bash
+test_description='Configuration of mail-root and database path'
+. $(dirname "$0")/test-lib.sh || exit 1
+
+backup_config () {
+ local test_name=$(basename $0 .sh)
+ cp ${NOTMUCH_CONFIG} notmuch-config-backup.${test_name}
+}
+
+restore_config () {
+ local test_name=$(basename $0 .sh)
+ export NOTMUCH_CONFIG="${TMP_DIRECTORY}/notmuch-config"
+ unset CONFIG_PATH
+ unset DATABASE_PATH
+ unset NOTMUCH_PROFILE
+ cp notmuch-config-backup.${test_name} ${NOTMUCH_CONFIG}
+}
+
+split_config () {
+ local dir
+ backup_config
+ dir="$TMP_DIRECTORY/database.$test_count"
+ rm -rf $dir
+ mkdir $dir
+ notmuch config set database.path $dir
+ notmuch config set database.mail_root $MAIL_DIR
+ DATABASE_PATH=$dir
+}
+
+
+
+for config in traditional split; do
+ # start each set of tests with a known set of messages
+ add_email_corpus
+
+ case $config in
+ traditional)
+ backup_config
+ ;;
+ split)
+ split_config
+ mv mail/.notmuch/xapian $DATABASE_PATH
+ ;;
+ esac
+
+ test_begin_subtest "count ($config)"
+ output=$(notmuch count '*')
+ test_expect_equal "$output" '52'
+
+ test_begin_subtest "count+tag ($config)"
+ tag="tag${RANDOM}"
+ notmuch tag +$tag '*'
+ output=$(notmuch count tag:$tag)
+ notmuch tag -$tag '*'
+ test_expect_equal "$output" '52'
+
+ test_begin_subtest "address ($config)"
+ notmuch address --deduplicate=no --sort=newest-first --output=sender --output=recipients path:foo >OUTPUT
+ cat <<EOF >EXPECTED
+Carl Worth <cworth@cworth.org>
+notmuch@notmuchmail.org
+EOF
+ test_expect_equal_file EXPECTED OUTPUT
+
+ test_begin_subtest "dump ($config)"
+ notmuch dump is:attachment and is:signed | sort > OUTPUT
+ cat <<EOF > EXPECTED
+#notmuch-dump batch-tag:3 config,properties,tags
++attachment +inbox +signed +unread -- id:20091118005829.GB25380@dottiness.seas.harvard.edu
++attachment +inbox +signed +unread -- id:20091118010116.GC25380@dottiness.seas.harvard.edu
+EOF
+ test_expect_equal_file EXPECTED OUTPUT
+
+ test_begin_subtest "dump + tag + restore ($config)"
+ notmuch dump '*' > EXPECTED
+ notmuch tag -inbox '*'
+ notmuch restore < EXPECTED
+ notmuch dump > OUTPUT
+ test_expect_equal_file EXPECTED OUTPUT
+
+ test_begin_subtest "reindex ($config)"
+ notmuch search --output=messages '*' > EXPECTED
+ notmuch reindex '*'
+ notmuch search --output=messages '*' > OUTPUT
+ test_expect_equal_file EXPECTED OUTPUT
+
+ restore_config
+done
+
+test_done
cat <<'EOF' >EXPECTED
== stdout ==
MAIL_DIR
+MAIL_DIR
MAIL_DIR/.notmuch/hooks
inbox;unread