mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-24 20:08:10 +01:00
complete ghost-on-removal-when-shared-thread-exists
To fully complete the ghost-on-removal-when-shared-thread-exists proposal, we need to clear all ghost messages when the last active message is removed from a thread. Amended by db: Remove the last test of T530, as it no longer makes sense if we are garbage collecting ghost messages.
This commit is contained in:
parent
1695415039
commit
e366bb2227
3 changed files with 21 additions and 26 deletions
|
@ -1098,6 +1098,26 @@ _notmuch_message_delete (notmuch_message_t *message)
|
|||
|
||||
notmuch_message_destroy (ghost);
|
||||
status = COERCE_STATUS (private_status, "Error converting to ghost message");
|
||||
} else {
|
||||
/* the thread is empty; drop all ghost messages from it */
|
||||
notmuch_messages_t *messages;
|
||||
status = _notmuch_query_search_documents (query,
|
||||
"ghost",
|
||||
&messages);
|
||||
if (status == NOTMUCH_STATUS_SUCCESS) {
|
||||
notmuch_status_t last_error = NOTMUCH_STATUS_SUCCESS;
|
||||
while (notmuch_messages_valid (messages)) {
|
||||
message = notmuch_messages_get (messages);
|
||||
status = _notmuch_message_delete (message);
|
||||
if (status) /* we'll report the last failure we see;
|
||||
* if there is more than one failure, we
|
||||
* forget about previous ones */
|
||||
last_error = status;
|
||||
notmuch_message_destroy (message);
|
||||
notmuch_messages_move_to_next (messages);
|
||||
}
|
||||
status = last_error;
|
||||
}
|
||||
}
|
||||
notmuch_query_destroy (query);
|
||||
return status;
|
||||
|
|
|
@ -116,25 +116,4 @@ MAIL_DIR/bar/new/21:2,
|
|||
MAIL_DIR/bar/new/22:2,
|
||||
MAIL_DIR/cur/51:2,"
|
||||
|
||||
# Ghost messages are difficult to test since they're nearly invisible.
|
||||
# However, if the upgrade works correctly, the ghost message should
|
||||
# retain the right thread ID even if all of the original messages in
|
||||
# the thread are deleted. That's what we test. This won't detect if
|
||||
# the upgrade just plain didn't happen, but it should detect if
|
||||
# something went wrong.
|
||||
test_begin_subtest "ghost message retains thread ID"
|
||||
# Upgrade database
|
||||
notmuch new
|
||||
# Get thread ID of real message
|
||||
thread=$(notmuch search --output=threads id:4EFC743A.3060609@april.org)
|
||||
# Delete all real messages in that thread
|
||||
rm $(notmuch search --output=files $thread)
|
||||
notmuch new
|
||||
# "Deliver" ghost message
|
||||
add_message '[subject]=Ghost' '[id]=4EFC3931.6030007@april.org'
|
||||
# If the ghost upgrade worked, the new message should be attached to
|
||||
# the existing thread ID.
|
||||
nthread=$(notmuch search --output=threads id:4EFC3931.6030007@april.org)
|
||||
test_expect_equal "$thread" "$nthread"
|
||||
|
||||
test_done
|
||||
|
|
|
@ -119,10 +119,6 @@ notmuch new >/dev/null
|
|||
test_thread_count 0 'All messages gone: no threads'
|
||||
test_content_count apple 0
|
||||
test_content_count banana 0
|
||||
test_begin_subtest 'No ghosts should remain after full thread deletion'
|
||||
# this is known to fail; we are leaking ghost messages deliberately
|
||||
test_subtest_known_broken
|
||||
ghosts=$(../ghost-report ${MAIL_DIR}/.notmuch/xapian)
|
||||
test_expect_equal "$ghosts" "0"
|
||||
test_ghost_count 0 'No ghosts should remain after full thread deletion'
|
||||
|
||||
test_done
|
||||
|
|
Loading…
Reference in a new issue