_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.
if (status)
return status;
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 ? "" : "=");
if (key)
term_prefix = talloc_asprintf (message, "%s%s%s", _find_prefix ("property"), key,
prefix ? "" : "=");
return NOTMUCH_STATUS_XAPIAN_EXCEPTION;
}
return NOTMUCH_STATUS_XAPIAN_EXCEPTION;
}
+ if (! _notmuch_message_frozen (message))
+ _notmuch_message_sync (message);
+
return NOTMUCH_STATUS_SUCCESS;
}
return NOTMUCH_STATUS_SUCCESS;
}
/* Ignore failure to remove non-existent term. */
}
}
/* Ignore failure to remove non-existent term. */
}
}
+
+ _notmuch_message_invalidate_metadata (message, "property");
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "notmuch_message_remove_all_properties"
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));
cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
EXPECT0(notmuch_message_remove_all_properties (message, NULL));
EXPECT0(notmuch_database_destroy(db));
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "notmuch_message_properties: multiple values"
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"));
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"));
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "notmuch_message_properties: prefix"
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"));
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"));
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "dump message properties"
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "dump message properties"
-test_subtest_known_broken
cat <<EOF > 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
cat <<EOF > 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
test_expect_equal_file PROPERTIES OUTPUT
test_begin_subtest "dump _only_ message properties"
test_expect_equal_file PROPERTIES OUTPUT
test_begin_subtest "dump _only_ message properties"
-test_subtest_known_broken
cat <<EOF > 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
cat <<EOF > 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
test_begin_subtest "restore missing message property (single line)"
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"));
notmuch dump | grep '^#=' > BEFORE1
cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
EXPECT0(notmuch_message_remove_property (message, "testkey1", "bob"));
test_begin_subtest "restore missing message property (full dump)"
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"));
notmuch dump > BEFORE2
cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
EXPECT0(notmuch_message_remove_property (message, "testkey1", "bob"));
test_expect_equal_file PROPERTIES OUTPUT
test_begin_subtest "restore clear extra message property"
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
cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
EXPECT0(notmuch_message_add_property (message, "testkey1", "charles"));
EOF
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "msg.get_properties (python)"
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)
test_python <<'EOF'
import notmuch
db = notmuch.Database(mode=notmuch.Database.MODE.READ_ONLY)
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "msg.get_properties (python, prefix)"
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)
test_python <<'EOF'
import notmuch
db = notmuch.Database(mode=notmuch.Database.MODE.READ_ONLY)