* Restore relative path handling for database.path
@ 2021-05-07 11:30 David Bremner
2021-05-07 11:30 ` [PATCH 1/9] test: add known broken test for relative database path in new David Bremner
` (9 more replies)
0 siblings, 10 replies; 17+ messages in thread
From: David Bremner @ 2021-05-07 11:30 UTC (permalink / raw)
To: notmuch
Release 0.32 broke (at least) `notmuch new` if database.path has a
relative value.
Although support for relative paths was undocumented, it was
introduced as an easier (to implement) alternative to ~
expansion. Restore the pre-0.32 functionality, and treat path config
items introduced in 0.32 consistently.
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 1/9] test: add known broken test for relative database path in new
2021-05-07 11:30 Restore relative path handling for database.path David Bremner
@ 2021-05-07 11:30 ` David Bremner
2021-05-07 12:19 ` Tomi Ollila
2021-05-07 11:30 ` [PATCH 2/9] lib/config: canonicalize paths relative to $HOME David Bremner
` (8 subsequent siblings)
9 siblings, 1 reply; 17+ messages in thread
From: David Bremner @ 2021-05-07 11:30 UTC (permalink / raw)
To: notmuch; +Cc: David Bremner
This test highlights a bug introduced in 0.32. The new split between
path and mail_root does not properly canonicalize relative paths in
the latter.
---
test/T050-new.sh | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/test/T050-new.sh b/test/T050-new.sh
index 2985e24c..5faf6839 100755
--- a/test/T050-new.sh
+++ b/test/T050-new.sh
@@ -394,6 +394,19 @@ exit status: 75
EOF
test_expect_equal_file EXPECTED OUTPUT
+test_begin_subtest "Relative database path expanded in new"
+test_subtest_known_broken
+ln -s `pwd`/mail home/Maildir
+notmuch config set database.path Maildir
+generate_message
+NOTMUCH_NEW > OUTPUT
+cat <<EOF >EXPECTED
+Added 1 new message to the database.
+EOF
+notmuch config set database.path ${MAIL_DIR}
+rm home/Maildir
+test_expect_equal_file EXPECTED OUTPUT
+
add_email_corpus broken
test_begin_subtest "reference loop does not crash"
test_expect_code 0 "notmuch show --format=json id:mid-loop-12@example.org id:mid-loop-21@example.org > OUTPUT"
--
2.30.2
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 2/9] lib/config: canonicalize paths relative to $HOME.
2021-05-07 11:30 Restore relative path handling for database.path David Bremner
2021-05-07 11:30 ` [PATCH 1/9] test: add known broken test for relative database path in new David Bremner
@ 2021-05-07 11:30 ` David Bremner
2021-05-07 12:28 ` Tomi Ollila
2021-05-07 11:30 ` [PATCH 3/9] test: add known broken test for relative setting of mail_root David Bremner
` (7 subsequent siblings)
9 siblings, 1 reply; 17+ messages in thread
From: David Bremner @ 2021-05-07 11:30 UTC (permalink / raw)
To: notmuch; +Cc: David Bremner
Prior to 0.32, notmuch had the (undocumented) behaviour that it
expanded a relative value of database.path with respect to $HOME. In
0.32 this was special cased for database.path but broken for
database.mail_root, which causes problems for at least notmuch-new
when database.path is set to a relative path.
The change in T030-config.sh reflects a user visible, but hopefully
harmless behaviour change; the expanded form of the paths will now be
printed by notmuch config.
---
lib/config.cc | 22 +++++++++++++++++++++-
test/T030-config.sh | 6 +++---
test/T050-new.sh | 1 -
3 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/lib/config.cc b/lib/config.cc
index 50bcf6a2..e08c6bf7 100644
--- a/lib/config.cc
+++ b/lib/config.cc
@@ -387,6 +387,23 @@ notmuch_config_pairs_destroy (notmuch_config_pairs_t *pairs)
talloc_free (pairs);
}
+static char *
+_expand_path (void *ctx, const char *key, const char *val)
+{
+ char *expanded_val;
+
+ if ((strcmp (key, "database.path") == 0 ||
+ strcmp (key, "database.mail_root") == 0 ||
+ strcmp (key, "database.hook_dir") == 0 ||
+ strcmp (key, "database.backup_path") == 0 ) &&
+ val[0] != '/')
+ expanded_val = talloc_asprintf (ctx, "%s/%s", getenv("HOME"), val);
+ else
+ expanded_val = talloc_strdup (ctx, val);
+
+ return expanded_val;
+}
+
notmuch_status_t
_notmuch_config_load_from_file (notmuch_database_t *notmuch,
GKeyFile *file)
@@ -407,14 +424,17 @@ _notmuch_config_load_from_file (notmuch_database_t *notmuch,
keys = g_key_file_get_keys (file, *grp, NULL, NULL);
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 (! val) {
status = NOTMUCH_STATUS_FILE_ERROR;
goto DONE;
}
- _notmuch_string_map_set (notmuch->config, absolute_key, val);
+ normalized_val = _expand_path (notmuch, absolute_key, val);
+ _notmuch_string_map_set (notmuch->config, absolute_key, normalized_val);
g_free (val);
talloc_free (absolute_key);
+ talloc_free (normalized_val);
if (status)
goto DONE;
}
diff --git a/test/T030-config.sh b/test/T030-config.sh
index b22d8f29..7a1660e9 100755
--- a/test/T030-config.sh
+++ b/test/T030-config.sh
@@ -117,12 +117,12 @@ test_expect_equal "$(notmuch config get database.path)" \
ln -s `pwd`/mail home/Maildir
add_email_corpus
-test_begin_subtest "Relative database path expanded in open"
+test_begin_subtest "Relative database path expanded"
notmuch config set database.path Maildir
-path=$(notmuch config get database.path)
+path=$(notmuch config get database.path | notmuch_dir_sanitize)
count=$(notmuch count '*')
test_expect_equal "${path} ${count}" \
- "Maildir 52"
+ "CWD/home/Maildir 52"
test_begin_subtest "Add config to database"
notmuch new
diff --git a/test/T050-new.sh b/test/T050-new.sh
index 5faf6839..33ad7f5a 100755
--- a/test/T050-new.sh
+++ b/test/T050-new.sh
@@ -395,7 +395,6 @@ EOF
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "Relative database path expanded in new"
-test_subtest_known_broken
ln -s `pwd`/mail home/Maildir
notmuch config set database.path Maildir
generate_message
--
2.30.2
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 3/9] test: add known broken test for relative setting of mail_root
2021-05-07 11:30 Restore relative path handling for database.path David Bremner
2021-05-07 11:30 ` [PATCH 1/9] test: add known broken test for relative database path in new David Bremner
2021-05-07 11:30 ` [PATCH 2/9] lib/config: canonicalize paths relative to $HOME David Bremner
@ 2021-05-07 11:30 ` David Bremner
2021-05-07 11:30 ` [PATCH 4/9] lib/config: expand relative paths when reading from database David Bremner
` (6 subsequent siblings)
9 siblings, 0 replies; 17+ messages in thread
From: David Bremner @ 2021-05-07 11:30 UTC (permalink / raw)
To: notmuch; +Cc: David Bremner
The behaviour should not change depending on where the configuration
is stored.
---
test/T050-new.sh | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/test/T050-new.sh b/test/T050-new.sh
index 33ad7f5a..f28497bf 100755
--- a/test/T050-new.sh
+++ b/test/T050-new.sh
@@ -406,6 +406,19 @@ notmuch config set database.path ${MAIL_DIR}
rm home/Maildir
test_expect_equal_file EXPECTED OUTPUT
+test_begin_subtest "Relative mail root (in db) expanded in new"
+test_subtest_known_broken
+ln -s `pwd`/mail home/Maildir
+notmuch config set --database database.mail_root Maildir
+generate_message
+NOTMUCH_NEW > OUTPUT
+cat <<EOF >EXPECTED
+Added 1 new message to the database.
+EOF
+notmuch config set database.mail_root
+rm home/Maildir
+test_expect_equal_file EXPECTED OUTPUT
+
add_email_corpus broken
test_begin_subtest "reference loop does not crash"
test_expect_code 0 "notmuch show --format=json id:mid-loop-12@example.org id:mid-loop-21@example.org > OUTPUT"
--
2.30.2
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 4/9] lib/config: expand relative paths when reading from database
2021-05-07 11:30 Restore relative path handling for database.path David Bremner
` (2 preceding siblings ...)
2021-05-07 11:30 ` [PATCH 3/9] test: add known broken test for relative setting of mail_root David Bremner
@ 2021-05-07 11:30 ` David Bremner
2021-05-07 12:30 ` Tomi Ollila
2021-05-07 11:30 ` [PATCH 5/9] test: test relative paths for database.hook_dir David Bremner
` (5 subsequent siblings)
9 siblings, 1 reply; 17+ messages in thread
From: David Bremner @ 2021-05-07 11:30 UTC (permalink / raw)
To: notmuch; +Cc: David Bremner
This makes the treatment of relative paths consistent between the
database and config files.
---
lib/config.cc | 8 +++++---
test/T050-new.sh | 1 -
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/lib/config.cc b/lib/config.cc
index e08c6bf7..74339694 100644
--- a/lib/config.cc
+++ b/lib/config.cc
@@ -46,6 +46,7 @@ struct _notmuch_config_pairs {
};
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)
@@ -257,9 +258,10 @@ _notmuch_config_load_from_database (notmuch_database_t *notmuch)
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 = _expand_path (list, key, notmuch_config_list_value (list));
+ _notmuch_string_map_append (notmuch->config, key, normalized_val);
+ talloc_free (normalized_val);
}
return status;
diff --git a/test/T050-new.sh b/test/T050-new.sh
index f28497bf..dfabcf03 100755
--- a/test/T050-new.sh
+++ b/test/T050-new.sh
@@ -407,7 +407,6 @@ rm home/Maildir
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "Relative mail root (in db) expanded in new"
-test_subtest_known_broken
ln -s `pwd`/mail home/Maildir
notmuch config set --database database.mail_root Maildir
generate_message
--
2.30.2
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 5/9] test: test relative paths for database.hook_dir
2021-05-07 11:30 Restore relative path handling for database.path David Bremner
` (3 preceding siblings ...)
2021-05-07 11:30 ` [PATCH 4/9] lib/config: expand relative paths when reading from database David Bremner
@ 2021-05-07 11:30 ` David Bremner
2021-05-07 12:34 ` Tomi Ollila
2021-05-07 11:30 ` [PATCH 6/9] test: test explicit configuration of backup directory David Bremner
` (4 subsequent siblings)
9 siblings, 1 reply; 17+ messages in thread
From: David Bremner @ 2021-05-07 11:30 UTC (permalink / raw)
To: notmuch; +Cc: David Bremner
---
test/T400-hooks.sh | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/test/T400-hooks.sh b/test/T400-hooks.sh
index 3a2df2f4..00c99337 100755
--- a/test/T400-hooks.sh
+++ b/test/T400-hooks.sh
@@ -43,7 +43,7 @@ add_message
# create maildir structure for notmuch-insert
mkdir -p "$MAIL_DIR"/{cur,new,tmp}
-for config in traditional profile explicit XDG split; do
+for config in traditional profile explicit relative XDG split; do
unset NOTMUCH_PROFILE
notmuch config set database.hook_dir
notmuch config set database.path ${MAIL_DIR}
@@ -63,6 +63,11 @@ for config in traditional profile explicit XDG split; do
mkdir -p $HOOK_DIR
notmuch config set database.hook_dir $HOOK_DIR
;;
+ relative)
+ HOOK_DIR=${HOME}/.notmuch-hooks
+ mkdir -p $HOOK_DIR
+ notmuch config set database.hook_dir .notmuch-hooks
+ ;;
XDG)
HOOK_DIR=${HOME}/.config/notmuch/default/hooks
;;
--
2.30.2
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 6/9] test: test explicit configuration of backup directory
2021-05-07 11:30 Restore relative path handling for database.path David Bremner
` (4 preceding siblings ...)
2021-05-07 11:30 ` [PATCH 5/9] test: test relative paths for database.hook_dir David Bremner
@ 2021-05-07 11:30 ` David Bremner
2021-05-07 11:30 ` [PATCH 7/9] doc: document (tersely) the intended behaviour of relative paths David Bremner
` (3 subsequent siblings)
9 siblings, 0 replies; 17+ messages in thread
From: David Bremner @ 2021-05-07 11:30 UTC (permalink / raw)
To: notmuch; +Cc: David Bremner
Including the relative path that was broken until a recent commit.
---
test/T530-upgrade.sh | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/test/T530-upgrade.sh b/test/T530-upgrade.sh
index cce29f45..5f0de2ed 100755
--- a/test/T530-upgrade.sh
+++ b/test/T530-upgrade.sh
@@ -54,4 +54,23 @@ for key in 'from/subject/message-ID in database' \
restore_database
done
+test_begin_subtest "upgrade with configured backup dir"
+notmuch config set database.backup_dir ${HOME}/backups
+delete_feature 'modification tracking'
+notmuch new | grep Backing | notmuch_dir_sanitize | sed 's/dump-[0-9T]*/dump-XXX/' > OUTPUT
+cat <<EOF > EXPECTED
+Backing up tags to CWD/home/backups/dump-XXX.gz...
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "upgrade with relative configured backup dir"
+notmuch config set database.backup_dir ${HOME}/backups
+delete_feature 'modification tracking'
+notmuch new | grep Backing | notmuch_dir_sanitize | sed 's/dump-[0-9T]*/dump-XXX/' > OUTPUT
+cat <<EOF > EXPECTED
+Backing up tags to CWD/home/backups/dump-XXX.gz...
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+
test_done
--
2.30.2
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 7/9] doc: document (tersely) the intended behaviour of relative paths.
2021-05-07 11:30 Restore relative path handling for database.path David Bremner
` (5 preceding siblings ...)
2021-05-07 11:30 ` [PATCH 6/9] test: test explicit configuration of backup directory David Bremner
@ 2021-05-07 11:30 ` David Bremner
2021-05-07 15:31 ` David Edmondson
2021-05-07 11:30 ` [PATCH 8/9] doc: document database.backup_dir David Bremner
` (2 subsequent siblings)
9 siblings, 1 reply; 17+ messages in thread
From: David Bremner @ 2021-05-07 11:30 UTC (permalink / raw)
To: notmuch; +Cc: David Bremner
---
doc/man1/notmuch-config.rst | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/doc/man1/notmuch-config.rst b/doc/man1/notmuch-config.rst
index 32290a38..5cb6e203 100644
--- a/doc/man1/notmuch-config.rst
+++ b/doc/man1/notmuch-config.rst
@@ -44,7 +44,9 @@ configuration file and corresponding database.
characters. In a multiple-value item (a list), the values are
separated by semicolon characters.
-The available configuration items are described below.
+The available configuration items are described below. Non-absolute
+paths are expanded relative to `$HOME` for items in section
+**database**.
**database.path**
Notmuch will store its database here, (in
--
2.30.2
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 8/9] doc: document database.backup_dir
2021-05-07 11:30 Restore relative path handling for database.path David Bremner
` (6 preceding siblings ...)
2021-05-07 11:30 ` [PATCH 7/9] doc: document (tersely) the intended behaviour of relative paths David Bremner
@ 2021-05-07 11:30 ` David Bremner
2021-05-07 11:30 ` [PATCH 9/9] NEWS: start NEWS for 0.32.1 David Bremner
2021-05-10 14:42 ` Restore relative path handling for database.path David Bremner
9 siblings, 0 replies; 17+ messages in thread
From: David Bremner @ 2021-05-07 11:30 UTC (permalink / raw)
To: notmuch; +Cc: David Bremner
Most users will not need to change this, but documenting it helps
preserve the interface.
---
doc/man1/notmuch-config.rst | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/doc/man1/notmuch-config.rst b/doc/man1/notmuch-config.rst
index 5cb6e203..a6cfeb41 100644
--- a/doc/man1/notmuch-config.rst
+++ b/doc/man1/notmuch-config.rst
@@ -65,6 +65,14 @@ paths are expanded relative to `$HOME` for items in section
Default: For compatibility with older configurations, the value of
database.path is used if **database.mail\_root** is unset.
+**database.backup_dir**
+ Directory to store tag dumps when upgrading database.
+
+ History: this configuration value was introduced in notmuch 0.32.
+
+ Default: A sibling directory of the Xapian database called
+ `backups`.
+
**database.hook_dir**
Directory containing hooks run by notmuch commands. See
--
2.30.2
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 9/9] NEWS: start NEWS for 0.32.1
2021-05-07 11:30 Restore relative path handling for database.path David Bremner
` (7 preceding siblings ...)
2021-05-07 11:30 ` [PATCH 8/9] doc: document database.backup_dir David Bremner
@ 2021-05-07 11:30 ` David Bremner
2021-05-10 14:42 ` Restore relative path handling for database.path David Bremner
9 siblings, 0 replies; 17+ messages in thread
From: David Bremner @ 2021-05-07 11:30 UTC (permalink / raw)
To: notmuch; +Cc: David Bremner
---
NEWS | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/NEWS b/NEWS
index 8cb9b345..44a18951 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,10 @@
+Notmuch 0.32.1 (UNRELEASED)
+===========================
+
+Restore handling of relative values for `database.path` that was
+broken by 0.32. Extend this handling to `database.mail_root`,
+`database.backup_dir`, and `database.hook_dir`.
+
Notmuch 0.32 (2021-05-02)
=========================
--
2.30.2
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH 1/9] test: add known broken test for relative database path in new
2021-05-07 11:30 ` [PATCH 1/9] test: add known broken test for relative database path in new David Bremner
@ 2021-05-07 12:19 ` Tomi Ollila
0 siblings, 0 replies; 17+ messages in thread
From: Tomi Ollila @ 2021-05-07 12:19 UTC (permalink / raw)
To: David Bremner, notmuch; +Cc: David Bremner
On Fri, May 07 2021, David Bremner wrote:
> This test highlights a bug introduced in 0.32. The new split between
> path and mail_root does not properly canonicalize relative paths in
> the latter.
> ---
> test/T050-new.sh | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> diff --git a/test/T050-new.sh b/test/T050-new.sh
> index 2985e24c..5faf6839 100755
> --- a/test/T050-new.sh
> +++ b/test/T050-new.sh
> @@ -394,6 +394,19 @@ exit status: 75
> EOF
> test_expect_equal_file EXPECTED OUTPUT
>
> +test_begin_subtest "Relative database path expanded in new"
> +test_subtest_known_broken
> +ln -s `pwd`/mail home/Maildir
$PWD
> +notmuch config set database.path Maildir
> +generate_message
> +NOTMUCH_NEW > OUTPUT
> +cat <<EOF >EXPECTED
> +Added 1 new message to the database.
> +EOF
> +notmuch config set database.path ${MAIL_DIR}
> +rm home/Maildir
2 spaces
> +test_expect_equal_file EXPECTED OUTPUT
> +
> add_email_corpus broken
> test_begin_subtest "reference loop does not crash"
> test_expect_code 0 "notmuch show --format=json id:mid-loop-12@example.org id:mid-loop-21@example.org > OUTPUT"
> --
> 2.30.2
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 2/9] lib/config: canonicalize paths relative to $HOME.
2021-05-07 11:30 ` [PATCH 2/9] lib/config: canonicalize paths relative to $HOME David Bremner
@ 2021-05-07 12:28 ` Tomi Ollila
2021-05-07 16:16 ` Tomi Ollila
0 siblings, 1 reply; 17+ messages in thread
From: Tomi Ollila @ 2021-05-07 12:28 UTC (permalink / raw)
To: David Bremner, notmuch; +Cc: David Bremner
On Fri, May 07 2021, David Bremner wrote:
> Prior to 0.32, notmuch had the (undocumented) behaviour that it
> expanded a relative value of database.path with respect to $HOME. In
> 0.32 this was special cased for database.path but broken for
> database.mail_root, which causes problems for at least notmuch-new
> when database.path is set to a relative path.
>
> The change in T030-config.sh reflects a user visible, but hopefully
> harmless behaviour change; the expanded form of the paths will now be
> printed by notmuch config.
> ---
> lib/config.cc | 22 +++++++++++++++++++++-
> test/T030-config.sh | 6 +++---
> test/T050-new.sh | 1 -
> 3 files changed, 24 insertions(+), 5 deletions(-)
>
> diff --git a/lib/config.cc b/lib/config.cc
> index 50bcf6a2..e08c6bf7 100644
> --- a/lib/config.cc
> +++ b/lib/config.cc
> @@ -387,6 +387,23 @@ notmuch_config_pairs_destroy (notmuch_config_pairs_t *pairs)
> talloc_free (pairs);
> }
>
> +static char *
> +_expand_path (void *ctx, const char *key, const char *val)
> +{
> + char *expanded_val;
> +
> + if ((strcmp (key, "database.path") == 0 ||
> + strcmp (key, "database.mail_root") == 0 ||
> + strcmp (key, "database.hook_dir") == 0 ||
> + strcmp (key, "database.backup_path") == 0 ) &&
> + val[0] != '/')
check val[0] first then one does not need to waste time scanning
through all the other possible values for 'key'. that is trivial
"optimization", other possible but not worth the effort...
> + expanded_val = talloc_asprintf (ctx, "%s/%s", getenv("HOME"), val);
> + else
> + expanded_val = talloc_strdup (ctx, val);
> +
> + return expanded_val;
> +}
> +
> notmuch_status_t
> _notmuch_config_load_from_file (notmuch_database_t *notmuch,
> GKeyFile *file)
> @@ -407,14 +424,17 @@ _notmuch_config_load_from_file (notmuch_database_t *notmuch,
> keys = g_key_file_get_keys (file, *grp, NULL, NULL);
> 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 (! val) {
> status = NOTMUCH_STATUS_FILE_ERROR;
> goto DONE;
> }
> - _notmuch_string_map_set (notmuch->config, absolute_key, val);
> + normalized_val = _expand_path (notmuch, absolute_key, val);
> + _notmuch_string_map_set (notmuch->config, absolute_key, normalized_val);
> g_free (val);
> talloc_free (absolute_key);
> + talloc_free (normalized_val);
> if (status)
> goto DONE;
> }
> diff --git a/test/T030-config.sh b/test/T030-config.sh
> index b22d8f29..7a1660e9 100755
> --- a/test/T030-config.sh
> +++ b/test/T030-config.sh
> @@ -117,12 +117,12 @@ test_expect_equal "$(notmuch config get database.path)" \
>
> ln -s `pwd`/mail home/Maildir
> add_email_corpus
> -test_begin_subtest "Relative database path expanded in open"
> +test_begin_subtest "Relative database path expanded"
> notmuch config set database.path Maildir
> -path=$(notmuch config get database.path)
> +path=$(notmuch config get database.path | notmuch_dir_sanitize)
> count=$(notmuch count '*')
> test_expect_equal "${path} ${count}" \
> - "Maildir 52"
> + "CWD/home/Maildir 52"
>
> test_begin_subtest "Add config to database"
> notmuch new
> diff --git a/test/T050-new.sh b/test/T050-new.sh
> index 5faf6839..33ad7f5a 100755
> --- a/test/T050-new.sh
> +++ b/test/T050-new.sh
> @@ -395,7 +395,6 @@ EOF
> test_expect_equal_file EXPECTED OUTPUT
>
> test_begin_subtest "Relative database path expanded in new"
> -test_subtest_known_broken
> ln -s `pwd`/mail home/Maildir
> notmuch config set database.path Maildir
> generate_message
> --
> 2.30.2
> _______________________________________________
> notmuch mailing list -- notmuch@notmuchmail.org
> To unsubscribe send an email to notmuch-leave@notmuchmail.org
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 4/9] lib/config: expand relative paths when reading from database
2021-05-07 11:30 ` [PATCH 4/9] lib/config: expand relative paths when reading from database David Bremner
@ 2021-05-07 12:30 ` Tomi Ollila
0 siblings, 0 replies; 17+ messages in thread
From: Tomi Ollila @ 2021-05-07 12:30 UTC (permalink / raw)
To: David Bremner, notmuch; +Cc: David Bremner
On Fri, May 07 2021, David Bremner wrote:
First, previous test change had the same extra space and `pwd` -> $PWD...
> This makes the treatment of relative paths consistent between the
> database and config files.
> ---
> lib/config.cc | 8 +++++---
> test/T050-new.sh | 1 -
> 2 files changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/lib/config.cc b/lib/config.cc
> index e08c6bf7..74339694 100644
> --- a/lib/config.cc
> +++ b/lib/config.cc
> @@ -46,6 +46,7 @@ struct _notmuch_config_pairs {
> };
>
> 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);
*key
>
> static int
> _notmuch_config_list_destroy (notmuch_config_list_t *list)
> @@ -257,9 +258,10 @@ _notmuch_config_load_from_database (notmuch_database_t *notmuch)
> 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);
key =
> + char *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;
> diff --git a/test/T050-new.sh b/test/T050-new.sh
> index f28497bf..dfabcf03 100755
> --- a/test/T050-new.sh
> +++ b/test/T050-new.sh
> @@ -407,7 +407,6 @@ rm home/Maildir
> test_expect_equal_file EXPECTED OUTPUT
>
> test_begin_subtest "Relative mail root (in db) expanded in new"
> -test_subtest_known_broken
> ln -s `pwd`/mail home/Maildir
that $PWD, out of changes in this message
> notmuch config set --database database.mail_root Maildir
> generate_message
> --
> 2.30.2
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 5/9] test: test relative paths for database.hook_dir
2021-05-07 11:30 ` [PATCH 5/9] test: test relative paths for database.hook_dir David Bremner
@ 2021-05-07 12:34 ` Tomi Ollila
0 siblings, 0 replies; 17+ messages in thread
From: Tomi Ollila @ 2021-05-07 12:34 UTC (permalink / raw)
To: David Bremner, notmuch
On Fri, May 07 2021, David Bremner wrote:
> ---
> test/T400-hooks.sh | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/test/T400-hooks.sh b/test/T400-hooks.sh
> index 3a2df2f4..00c99337 100755
> --- a/test/T400-hooks.sh
> +++ b/test/T400-hooks.sh
> @@ -43,7 +43,7 @@ add_message
> # create maildir structure for notmuch-insert
> mkdir -p "$MAIL_DIR"/{cur,new,tmp}
>
> -for config in traditional profile explicit XDG split; do
> +for config in traditional profile explicit relative XDG split; do
> unset NOTMUCH_PROFILE
> notmuch config set database.hook_dir
> notmuch config set database.path ${MAIL_DIR}
> @@ -63,6 +63,11 @@ for config in traditional profile explicit XDG split; do
> mkdir -p $HOOK_DIR
> notmuch config set database.hook_dir $HOOK_DIR
> ;;
> + relative)
> + HOOK_DIR=${HOME}/.notmuch-hooks
> + mkdir -p $HOOK_DIR
I'd drop the -p, to be sure $HOOK_DIR does not exist before test run
(if it existed, one notices when it fails (or not, we don't fail on error
:/ -- anyway noise to terminal/log (hopefully)
> + notmuch config set database.hook_dir .notmuch-hooks
> + ;;
> XDG)
> HOOK_DIR=${HOME}/.config/notmuch/default/hooks
> ;;
> --
> 2.30.2
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 7/9] doc: document (tersely) the intended behaviour of relative paths.
2021-05-07 11:30 ` [PATCH 7/9] doc: document (tersely) the intended behaviour of relative paths David Bremner
@ 2021-05-07 15:31 ` David Edmondson
0 siblings, 0 replies; 17+ messages in thread
From: David Edmondson @ 2021-05-07 15:31 UTC (permalink / raw)
To: David Bremner, notmuch; +Cc: David Bremner
On Friday, 2021-05-07 at 08:30:27 -03, David Bremner wrote:
> ---
> doc/man1/notmuch-config.rst | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/doc/man1/notmuch-config.rst b/doc/man1/notmuch-config.rst
> index 32290a38..5cb6e203 100644
> --- a/doc/man1/notmuch-config.rst
> +++ b/doc/man1/notmuch-config.rst
> @@ -44,7 +44,9 @@ configuration file and corresponding database.
> characters. In a multiple-value item (a list), the values are
> separated by semicolon characters.
>
> -The available configuration items are described below.
> +The available configuration items are described below. Non-absolute
> +paths are expanded relative to `$HOME` for items in section
Maybe "presumed" rather than "expanded"?
> +**database**.
>
> **database.path**
> Notmuch will store its database here, (in
> --
> 2.30.2
> _______________________________________________
> notmuch mailing list -- notmuch@notmuchmail.org
> To unsubscribe send an email to notmuch-leave@notmuchmail.org
dme.
--
Freedom is just a song by Wham!.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 2/9] lib/config: canonicalize paths relative to $HOME.
2021-05-07 12:28 ` Tomi Ollila
@ 2021-05-07 16:16 ` Tomi Ollila
0 siblings, 0 replies; 17+ messages in thread
From: Tomi Ollila @ 2021-05-07 16:16 UTC (permalink / raw)
To: David Bremner, notmuch; +Cc: David Bremner
On Fri, May 07 2021, Tomi Ollila wrote:
> On Fri, May 07 2021, David Bremner wrote:
>
>> Prior to 0.32, notmuch had the (undocumented) behaviour that it
>> expanded a relative value of database.path with respect to $HOME. In
>> 0.32 this was special cased for database.path but broken for
>> database.mail_root, which causes problems for at least notmuch-new
>> when database.path is set to a relative path.
>>
>> The change in T030-config.sh reflects a user visible, but hopefully
>> harmless behaviour change; the expanded form of the paths will now be
>> printed by notmuch config.
>> ---
>> lib/config.cc | 22 +++++++++++++++++++++-
>> test/T030-config.sh | 6 +++---
>> test/T050-new.sh | 1 -
>> 3 files changed, 24 insertions(+), 5 deletions(-)
>>
>> diff --git a/lib/config.cc b/lib/config.cc
>> index 50bcf6a2..e08c6bf7 100644
>> --- a/lib/config.cc
>> +++ b/lib/config.cc
>> @@ -387,6 +387,23 @@ notmuch_config_pairs_destroy (notmuch_config_pairs_t *pairs)
>> talloc_free (pairs);
>> }
>>
>> +static char *
>> +_expand_path (void *ctx, const char *key, const char *val)
>> +{
>> + char *expanded_val;
>> +
>> + if ((strcmp (key, "database.path") == 0 ||
>> + strcmp (key, "database.mail_root") == 0 ||
>> + strcmp (key, "database.hook_dir") == 0 ||
>> + strcmp (key, "database.backup_path") == 0 ) &&
>> + val[0] != '/')
>
> check val[0] first then one does not need to waste time scanning
> through all the other possible values for 'key'. that is trivial
> "optimization", other possible but not worth the effort...
Forget this suggestion; changing order makes things worse -- probably
in values of other keys than these checked don't start with '/' so
there would be one extra check in most of the cases...
Tomi
>
>> + expanded_val = talloc_asprintf (ctx, "%s/%s", getenv("HOME"), val);
>> + else
>> + expanded_val = talloc_strdup (ctx, val);
>> +
>> + return expanded_val;
>> +}
>> +
>> notmuch_status_t
>> _notmuch_config_load_from_file (notmuch_database_t *notmuch,
>> GKeyFile *file)
>> @@ -407,14 +424,17 @@ _notmuch_config_load_from_file (notmuch_database_t *notmuch,
>> keys = g_key_file_get_keys (file, *grp, NULL, NULL);
>> 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 (! val) {
>> status = NOTMUCH_STATUS_FILE_ERROR;
>> goto DONE;
>> }
>> - _notmuch_string_map_set (notmuch->config, absolute_key, val);
>> + normalized_val = _expand_path (notmuch, absolute_key, val);
>> + _notmuch_string_map_set (notmuch->config, absolute_key, normalized_val);
>> g_free (val);
>> talloc_free (absolute_key);
>> + talloc_free (normalized_val);
>> if (status)
>> goto DONE;
>> }
>> diff --git a/test/T030-config.sh b/test/T030-config.sh
>> index b22d8f29..7a1660e9 100755
>> --- a/test/T030-config.sh
>> +++ b/test/T030-config.sh
>> @@ -117,12 +117,12 @@ test_expect_equal "$(notmuch config get database.path)" \
>>
>> ln -s `pwd`/mail home/Maildir
>> add_email_corpus
>> -test_begin_subtest "Relative database path expanded in open"
>> +test_begin_subtest "Relative database path expanded"
>> notmuch config set database.path Maildir
>> -path=$(notmuch config get database.path)
>> +path=$(notmuch config get database.path | notmuch_dir_sanitize)
>> count=$(notmuch count '*')
>> test_expect_equal "${path} ${count}" \
>> - "Maildir 52"
>> + "CWD/home/Maildir 52"
>>
>> test_begin_subtest "Add config to database"
>> notmuch new
>> diff --git a/test/T050-new.sh b/test/T050-new.sh
>> index 5faf6839..33ad7f5a 100755
>> --- a/test/T050-new.sh
>> +++ b/test/T050-new.sh
>> @@ -395,7 +395,6 @@ EOF
>> test_expect_equal_file EXPECTED OUTPUT
>>
>> test_begin_subtest "Relative database path expanded in new"
>> -test_subtest_known_broken
>> ln -s `pwd`/mail home/Maildir
>> notmuch config set database.path Maildir
>> generate_message
>> --
>> 2.30.2
>> _______________________________________________
>> notmuch mailing list -- notmuch@notmuchmail.org
>> To unsubscribe send an email to notmuch-leave@notmuchmail.org
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: Restore relative path handling for database.path
2021-05-07 11:30 Restore relative path handling for database.path David Bremner
` (8 preceding siblings ...)
2021-05-07 11:30 ` [PATCH 9/9] NEWS: start NEWS for 0.32.1 David Bremner
@ 2021-05-10 14:42 ` David Bremner
9 siblings, 0 replies; 17+ messages in thread
From: David Bremner @ 2021-05-10 14:42 UTC (permalink / raw)
To: notmuch
David Bremner <david@tethera.net> writes:
> Release 0.32 broke (at least) `notmuch new` if database.path has a
> relative value.
>
> Although support for relative paths was undocumented, it was
> introduced as an easier (to implement) alternative to ~
> expansion. Restore the pre-0.32 functionality, and treat path config
> items introduced in 0.32 consistently.
This series has been applied to release and master
I'm still waiting for feedback on the tag-hook patch and the $HOME/mail
patch before doing a point release.
d
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2021-05-10 14:42 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-05-07 11:30 Restore relative path handling for database.path David Bremner
2021-05-07 11:30 ` [PATCH 1/9] test: add known broken test for relative database path in new David Bremner
2021-05-07 12:19 ` Tomi Ollila
2021-05-07 11:30 ` [PATCH 2/9] lib/config: canonicalize paths relative to $HOME David Bremner
2021-05-07 12:28 ` Tomi Ollila
2021-05-07 16:16 ` Tomi Ollila
2021-05-07 11:30 ` [PATCH 3/9] test: add known broken test for relative setting of mail_root David Bremner
2021-05-07 11:30 ` [PATCH 4/9] lib/config: expand relative paths when reading from database David Bremner
2021-05-07 12:30 ` Tomi Ollila
2021-05-07 11:30 ` [PATCH 5/9] test: test relative paths for database.hook_dir David Bremner
2021-05-07 12:34 ` Tomi Ollila
2021-05-07 11:30 ` [PATCH 6/9] test: test explicit configuration of backup directory David Bremner
2021-05-07 11:30 ` [PATCH 7/9] doc: document (tersely) the intended behaviour of relative paths David Bremner
2021-05-07 15:31 ` David Edmondson
2021-05-07 11:30 ` [PATCH 8/9] doc: document database.backup_dir David Bremner
2021-05-07 11:30 ` [PATCH 9/9] NEWS: start NEWS for 0.32.1 David Bremner
2021-05-10 14:42 ` Restore relative path handling for database.path David Bremner
Code repositories for project(s) associated with this public inbox
https://yhetil.org/notmuch.git/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).