From 404db1de90f6e5a66c34077b38b18a39c955ece2 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Thu, 11 Nov 2010 02:55:13 -0800 Subject: [PATCH] maildir_flags_to_tags: Avoid interpreting "no info" as "no flags set". If a filename has no maildir info at all, (that is, it does not contain the sequence ":2,"), we consider this distinct from a filename with an empty maildir info, (the ":2," separator is present, but no flags characters follow). Specifically, we regard a missing info field as providing no information, so tags will remain unchanged. On the other hand, an info field that is present but has no flags set will cause various tags to be cleared, (or in the case of "unread", added). This fixes the "remove info" case of the maildir-sync tests in the test suite. --- lib/message.cc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/message.cc b/lib/message.cc index 39036ecc..b8128505 100644 --- a/lib/message.cc +++ b/lib/message.cc @@ -868,6 +868,7 @@ notmuch_message_maildir_flags_to_tags (notmuch_message_t *message) const char *filename; char *combined_flags = talloc_strdup (message, ""); unsigned i; + int seen_maildir_info = 0; for (filenames = notmuch_message_get_filenames (message); notmuch_filenames_valid (filenames); @@ -879,11 +880,18 @@ notmuch_message_maildir_flags_to_tags (notmuch_message_t *message) if (! flags) continue; + seen_maildir_info = 1; flags += 3; combined_flags = talloc_strdup_append (combined_flags, flags); } + /* If none of the filenames have any maildir info field (not even + * an empty info with no flags set) then there's no information to + * go on, so do nothing. */ + if (! seen_maildir_info) + return NOTMUCH_STATUS_SUCCESS; + status = notmuch_message_freeze (message); if (status) return status;