maildir_flags_to_tags: Avoid interpreting "no info" as "no flags set".
authorCarl Worth <cworth@cworth.org>
Thu, 11 Nov 2010 10:55:13 +0000 (02:55 -0800)
committerCarl Worth <cworth@cworth.org>
Thu, 11 Nov 2010 11:40:19 +0000 (03:40 -0800)
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

index 39036ecca5516a4a7bc6f896f686a62d89d503c6..b8128505bfb7c63176728bbe145b87113dd4c5a7 100644 (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;