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.
This commit is contained in:
Carl Worth 2010-11-11 02:55:13 -08:00
parent 38d82b07c4
commit 404db1de90

View file

@ -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;