From 50aaab91b5c19d50a33c5b89ebe92a39ff78283b Mon Sep 17 00:00:00 2001 From: David Bremner Date: Sat, 23 Sep 2023 08:12:06 -0300 Subject: [PATCH 1/7] version: update to 0.38.1~pre0 Start preparations for point release --- bindings/python/notmuch/version.py | 2 +- version.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bindings/python/notmuch/version.py b/bindings/python/notmuch/version.py index c847a1a3..af97e6d1 100644 --- a/bindings/python/notmuch/version.py +++ b/bindings/python/notmuch/version.py @@ -1,3 +1,3 @@ # this file should be kept in sync with ../../../version -__VERSION__ = '0.38' +__VERSION__ = '0.38.1~pre0' SOVERSION = '5' diff --git a/version.txt b/version.txt index 1cbc8125..cf30d88f 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.38 +0.38.1~pre0 From 14bc0cc56b19db927893a2fa4505bae232dd712b Mon Sep 17 00:00:00 2001 From: David Bremner Date: Sat, 23 Sep 2023 08:14:21 -0300 Subject: [PATCH 2/7] NEWS: add header for 0.38.1 Actual news items to be filled in after they are applied. --- NEWS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NEWS b/NEWS index 00f4fe47..34bdfca2 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,6 @@ +Notmuch 0.38.1 (UNRELEASED) +=========================== + Notmuch 0.38 (2023-09-12) ========================= From 6ed348474908e97950a78b431fdba19f528b2d30 Mon Sep 17 00:00:00 2001 From: David Bremner Date: Sat, 23 Sep 2023 08:16:20 -0300 Subject: [PATCH 3/7] debian: start changelog for 0.38.1~pre0-1 --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index c2c2f6ab..eec70b05 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +notmuch (0.38.1~pre0-1) UNRELEASED; urgency=medium + + * New upstream release release candidate + + -- David Bremner Sat, 23 Sep 2023 08:15:19 -0300 + notmuch (0.38-2) unstable; urgency=medium * Restrict autopkgtests to amd64 and aarch64. There are failures in From 112c53535a569ba28a2a7f3baae7fcc4033c65bc Mon Sep 17 00:00:00 2001 From: David Bremner Date: Fri, 15 Sep 2023 09:50:01 -0300 Subject: [PATCH 4/7] test: add known broken test for bad utf8 in config We should ideally print an informative error message, but at the very least we should not exit with success. --- test/T030-config.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/T030-config.sh b/test/T030-config.sh index ea0b4012..c416e781 100755 --- a/test/T030-config.sh +++ b/test/T030-config.sh @@ -3,6 +3,8 @@ test_description='"notmuch config"' . $(dirname "$0")/test-lib.sh || exit 1 +cp notmuch-config initial-config + test_begin_subtest "Get string value" test_expect_equal "$(notmuch config get user.name)" "Notmuch Test Suite" @@ -193,4 +195,10 @@ test_begin_subtest "get built_with.nonexistent prints false" output=$(notmuch config get built_with.nonexistent) test_expect_equal "$output" "false" +test_begin_subtest "Bad utf8 reported as error" +test_subtest_known_broken +cp initial-config bad-config +printf '[query]\nq3=from:\xff\n' >>bad-config +test_expect_code 1 "notmuch --config=./bad-config config list" + test_done From dbb5ff338511bfa6718ed144b95a689809d4bea1 Mon Sep 17 00:00:00 2001 From: David Bremner Date: Fri, 15 Sep 2023 09:50:02 -0300 Subject: [PATCH 5/7] CLI: exit with error when load_config returns an error. For now print a generic error message and exit with error on any non-success code. Previously the code exited, but with exit code zero, leading users / scripts to think the command had succeeded. --- notmuch.c | 2 ++ test/T030-config.sh | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/notmuch.c b/notmuch.c index 37286b8f..69a18131 100644 --- a/notmuch.c +++ b/notmuch.c @@ -584,6 +584,8 @@ main (int argc, char *argv[]) case NOTMUCH_STATUS_SUCCESS: break; default: + fputs ("Error: unable to load config file.\n", stderr); + ret = 1; goto DONE; } diff --git a/test/T030-config.sh b/test/T030-config.sh index c416e781..2d3017da 100755 --- a/test/T030-config.sh +++ b/test/T030-config.sh @@ -196,7 +196,6 @@ output=$(notmuch config get built_with.nonexistent) test_expect_equal "$output" "false" test_begin_subtest "Bad utf8 reported as error" -test_subtest_known_broken cp initial-config bad-config printf '[query]\nq3=from:\xff\n' >>bad-config test_expect_code 1 "notmuch --config=./bad-config config list" From bc38580cef3316254b1ffb15b4711b541c6f9bb3 Mon Sep 17 00:00:00 2001 From: David Bremner Date: Fri, 15 Sep 2023 09:50:03 -0300 Subject: [PATCH 6/7] test: add known broken subtest for the bad config error message This is a bit fragile w.r.t. glib changing their error message, but it already helped me find one formatting bug, so for now I think it's worth it, instead of just grepping for "UTF-8". --- test/T030-config.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/T030-config.sh b/test/T030-config.sh index 2d3017da..636b5a53 100755 --- a/test/T030-config.sh +++ b/test/T030-config.sh @@ -200,4 +200,13 @@ cp initial-config bad-config printf '[query]\nq3=from:\xff\n' >>bad-config test_expect_code 1 "notmuch --config=./bad-config config list" +test_begin_subtest "Specific error message about bad utf8" +test_subtest_known_broken +notmuch --config=./bad-config config list 2>ERRORS +cat < EXPECTED +GLib: Key file contains key “q3” with value “from:�” which is not UTF-8 +Error: unable to load config file. +EOF +test_expect_equal_file EXPECTED ERRORS + test_done From 1c10d91d8e4a3e5bc76ca4c6b9939f3759e6ef5e Mon Sep 17 00:00:00 2001 From: David Bremner Date: Fri, 15 Sep 2023 09:50:04 -0300 Subject: [PATCH 7/7] Pass error message from GLib ini parser to CLI The function _notmuch_config_load_from_file is only called in two places in open.cc. Update internal API to match the idiom in open.cc. Adding a newline is needed for consistency with other status strings. Based in part on a patch [1] from Eric Blake. [1]: id:20230906153402.101471-1-eblake@redhat.com --- lib/config.cc | 13 +++++++++++-- lib/notmuch-private.h | 2 +- lib/open.cc | 4 ++-- notmuch.c | 6 ++++++ test/T030-config.sh | 1 - 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/config.cc b/lib/config.cc index 2323860d..6cd15fab 100644 --- a/lib/config.cc +++ b/lib/config.cc @@ -416,7 +416,8 @@ _expand_path (void *ctx, const char *key, const char *val) notmuch_status_t _notmuch_config_load_from_file (notmuch_database_t *notmuch, - GKeyFile *file) + GKeyFile *file, + char **status_string) { notmuch_status_t status = NOTMUCH_STATUS_SUCCESS; gchar **groups = NULL, **keys, *val; @@ -435,6 +436,7 @@ _notmuch_config_load_from_file (notmuch_database_t *notmuch, for (gchar **keys_p = keys; *keys_p; keys_p++) { char *absolute_key = talloc_asprintf (notmuch, "%s.%s", *grp, *keys_p); char *normalized_val; + GError *gerr = NULL; /* If we opened from a given path, do not overwrite it */ if (strcmp (absolute_key, "database.path") == 0 && @@ -442,7 +444,14 @@ _notmuch_config_load_from_file (notmuch_database_t *notmuch, notmuch->xapian_db) continue; - val = g_key_file_get_string (file, *grp, *keys_p, NULL); + val = g_key_file_get_string (file, *grp, *keys_p, &gerr); + if (gerr) { + if (status_string) + IGNORE_RESULT (asprintf (status_string, + "GLib: %s\n", + gerr->message)); + g_error_free (gerr); + } if (! val) { status = NOTMUCH_STATUS_FILE_ERROR; goto DONE; diff --git a/lib/notmuch-private.h b/lib/notmuch-private.h index c19ee8e2..367e23e6 100644 --- a/lib/notmuch-private.h +++ b/lib/notmuch-private.h @@ -726,7 +726,7 @@ notmuch_status_t _notmuch_config_load_from_database (notmuch_database_t *db); notmuch_status_t -_notmuch_config_load_from_file (notmuch_database_t *db, GKeyFile *file); +_notmuch_config_load_from_file (notmuch_database_t *db, GKeyFile *file, char **status_string); notmuch_status_t _notmuch_config_load_defaults (notmuch_database_t *db); diff --git a/lib/open.cc b/lib/open.cc index 54d1faf3..005872dc 100644 --- a/lib/open.cc +++ b/lib/open.cc @@ -555,7 +555,7 @@ _finish_open (notmuch_database_t *notmuch, goto DONE; if (key_file) - status = _notmuch_config_load_from_file (notmuch, key_file); + status = _notmuch_config_load_from_file (notmuch, key_file, &message); if (status) goto DONE; @@ -961,7 +961,7 @@ notmuch_database_load_config (const char *database_path, } if (key_file) { - status = _notmuch_config_load_from_file (notmuch, key_file); + status = _notmuch_config_load_from_file (notmuch, key_file, &message); if (status) goto DONE; } diff --git a/notmuch.c b/notmuch.c index 69a18131..814b9e42 100644 --- a/notmuch.c +++ b/notmuch.c @@ -563,6 +563,12 @@ main (int argc, char *argv[]) NULL, ¬much, &status_string); + if (status_string) { + fputs (status_string, stderr); + free (status_string); + status_string = NULL; + } + switch (status) { case NOTMUCH_STATUS_NO_CONFIG: if (! (command->mode & NOTMUCH_COMMAND_CONFIG_CREATE)) { diff --git a/test/T030-config.sh b/test/T030-config.sh index 636b5a53..621e0b69 100755 --- a/test/T030-config.sh +++ b/test/T030-config.sh @@ -201,7 +201,6 @@ printf '[query]\nq3=from:\xff\n' >>bad-config test_expect_code 1 "notmuch --config=./bad-config config list" test_begin_subtest "Specific error message about bad utf8" -test_subtest_known_broken notmuch --config=./bad-config config list 2>ERRORS cat < EXPECTED GLib: Key file contains key “q3” with value “from:�” which is not UTF-8