From fb55ff28a2fdaa9c218af5ca10b1cae674869edd Mon Sep 17 00:00:00 2001 From: Kevin Boulain Date: Wed, 29 Mar 2023 18:13:32 +0200 Subject: [PATCH] lib/message-property: sync removed properties to the database _notmuch_message_remove_all_properties wasn't syncing the message back to the database but was still invalidating the metadata, giving the impression the properties had actually been removed. Also move the metadata invalidation to _notmuch_message_remove_terms to be closer to what's done in _notmuch_message_modify_property and _notmuch_message_remove_term. --- lib/message-property.cc | 4 +++- lib/message.cc | 2 ++ test/T610-message-property.sh | 10 ---------- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/lib/message-property.cc b/lib/message-property.cc index 0d444bb8..7f520340 100644 --- a/lib/message-property.cc +++ b/lib/message-property.cc @@ -142,7 +142,6 @@ _notmuch_message_remove_all_properties (notmuch_message_t *message, const char * if (status) return status; - _notmuch_message_invalidate_metadata (message, "property"); if (key) term_prefix = talloc_asprintf (message, "%s%s%s", _find_prefix ("property"), key, prefix ? "" : "="); @@ -157,6 +156,9 @@ _notmuch_message_remove_all_properties (notmuch_message_t *message, const char * return NOTMUCH_STATUS_XAPIAN_EXCEPTION; } + if (! _notmuch_message_frozen (message)) + _notmuch_message_sync (message); + return NOTMUCH_STATUS_SUCCESS; } diff --git a/lib/message.cc b/lib/message.cc index 1b1a071a..53f35dd1 100644 --- a/lib/message.cc +++ b/lib/message.cc @@ -719,6 +719,8 @@ _notmuch_message_remove_terms (notmuch_message_t *message, const char *prefix) /* Ignore failure to remove non-existent term. */ } } + + _notmuch_message_invalidate_metadata (message, "property"); } diff --git a/test/T610-message-property.sh b/test/T610-message-property.sh index afcda4a8..05cfd3b5 100755 --- a/test/T610-message-property.sh +++ b/test/T610-message-property.sh @@ -152,7 +152,6 @@ EOF test_expect_equal_file EXPECTED OUTPUT test_begin_subtest "notmuch_message_remove_all_properties" -test_subtest_known_broken cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} EXPECT0(notmuch_message_remove_all_properties (message, NULL)); EXPECT0(notmuch_database_destroy(db)); @@ -174,7 +173,6 @@ EOF test_expect_equal_file EXPECTED OUTPUT test_begin_subtest "notmuch_message_properties: multiple values" -test_subtest_known_broken cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} EXPECT0(notmuch_message_add_property (message, "testkey1", "bob")); EXPECT0(notmuch_message_add_property (message, "testkey1", "testvalue2")); @@ -191,7 +189,6 @@ EOF test_expect_equal_file EXPECTED OUTPUT test_begin_subtest "notmuch_message_properties: prefix" -test_subtest_known_broken cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} EXPECT0(notmuch_message_add_property (message, "testkey3", "bob3")); EXPECT0(notmuch_message_add_property (message, "testkey3", "testvalue3")); @@ -246,7 +243,6 @@ EOF test_expect_equal_file EXPECTED OUTPUT test_begin_subtest "dump message properties" -test_subtest_known_broken cat < PROPERTIES #= 4EFC743A.3060609@april.org fancy%20key%20with%20%c3%a1cc%c3%a8nts=import%20value%20with%20= testkey1=alice testkey1=bob testkey1=testvalue2 testkey3=alice3 testkey3=bob3 testkey3=testvalue3 EOF @@ -257,7 +253,6 @@ notmuch dump | grep '^#=' > OUTPUT test_expect_equal_file PROPERTIES OUTPUT test_begin_subtest "dump _only_ message properties" -test_subtest_known_broken cat < EXPECTED #notmuch-dump batch-tag:3 properties #= 4EFC743A.3060609@april.org fancy%20key%20with%20%c3%a1cc%c3%a8nts=import%20value%20with%20= testkey1=alice testkey1=bob testkey1=testvalue2 testkey3=alice3 testkey3=bob3 testkey3=testvalue3 @@ -267,7 +262,6 @@ test_expect_equal_file EXPECTED OUTPUT test_begin_subtest "restore missing message property (single line)" -test_subtest_known_broken notmuch dump | grep '^#=' > BEFORE1 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} EXPECT0(notmuch_message_remove_property (message, "testkey1", "bob")); @@ -278,7 +272,6 @@ test_expect_equal_file PROPERTIES OUTPUT test_begin_subtest "restore missing message property (full dump)" -test_subtest_known_broken notmuch dump > BEFORE2 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} EXPECT0(notmuch_message_remove_property (message, "testkey1", "bob")); @@ -288,7 +281,6 @@ notmuch dump | grep '^#=' > OUTPUT test_expect_equal_file PROPERTIES OUTPUT test_begin_subtest "restore clear extra message property" -test_subtest_known_broken cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} EXPECT0(notmuch_message_add_property (message, "testkey1", "charles")); EOF @@ -322,7 +314,6 @@ EOF test_expect_equal_file EXPECTED OUTPUT test_begin_subtest "msg.get_properties (python)" -test_subtest_known_broken test_python <<'EOF' import notmuch db = notmuch.Database(mode=notmuch.Database.MODE.READ_ONLY) @@ -338,7 +329,6 @@ EOF test_expect_equal_file EXPECTED OUTPUT test_begin_subtest "msg.get_properties (python, prefix)" -test_subtest_known_broken test_python <<'EOF' import notmuch db = notmuch.Database(mode=notmuch.Database.MODE.READ_ONLY)