From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by olra.theworths.org (Postfix) with ESMTP id 69532431FB6 for ; Wed, 19 Dec 2012 13:32:57 -0800 (PST) X-Virus-Scanned: Debian amavisd-new at olra.theworths.org X-Spam-Flag: NO X-Spam-Score: -2.3 X-Spam-Level: X-Spam-Status: No, score=-2.3 tagged_above=-999 required=5 tests=[RCVD_IN_DNSWL_MED=-2.3] autolearn=disabled Received: from olra.theworths.org ([127.0.0.1]) by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id QQ-jiFiGDWw4 for ; Wed, 19 Dec 2012 13:32:55 -0800 (PST) Received: from max.feld.cvut.cz (max.feld.cvut.cz [147.32.192.36]) by olra.theworths.org (Postfix) with ESMTP id 4F2BD431FAF for ; Wed, 19 Dec 2012 13:32:55 -0800 (PST) Received: from localhost (unknown [192.168.200.7]) by max.feld.cvut.cz (Postfix) with ESMTP id B014F3CFE85; Wed, 19 Dec 2012 22:32:54 +0100 (CET) X-Virus-Scanned: IMAP STYX AMAVIS Received: from max.feld.cvut.cz ([192.168.200.1]) by localhost (styx.feld.cvut.cz [192.168.200.7]) (amavisd-new, port 10044) with ESMTP id idgEcp8umzzX; Wed, 19 Dec 2012 22:32:53 +0100 (CET) Received: from imap.feld.cvut.cz (imap.feld.cvut.cz [147.32.192.34]) by max.feld.cvut.cz (Postfix) with ESMTP id 87C483CFE86; Wed, 19 Dec 2012 22:32:52 +0100 (CET) Received: from steelpick.2x.cz (unknown [213.29.198.144]) (Authenticated sender: sojkam1) by imap.feld.cvut.cz (Postfix) with ESMTPSA id 2FD5566096A; Wed, 19 Dec 2012 22:32:52 +0100 (CET) Received: from wsh by steelpick.2x.cz with local (Exim 4.80) (envelope-from ) id 1TlRFu-00077w-SC; Wed, 19 Dec 2012 22:32:46 +0100 From: Michal Sojka To: notmuch@notmuchmail.org Subject: [PATCH 3/3] tags_to_maildir_flags: Don't rename if no flags change Date: Wed, 19 Dec 2012 22:32:27 +0100 Message-Id: <1355952747-27350-4-git-send-email-sojkam1@fel.cvut.cz> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1355952747-27350-1-git-send-email-sojkam1@fel.cvut.cz> References: <1355952747-27350-1-git-send-email-sojkam1@fel.cvut.cz> X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 19 Dec 2012 21:32:57 -0000 From: Louis Rilling notmuch_message_tags_to_maildir_flags() unconditionally moves messages from maildir directory "new/" to maildir directory "cur/", which makes messages lose their "new" status in the MUA. However some users want to keep this "new" status after, for instance, an auto-tagging of new messages. However, as Austin mentioned and according to the maildir specification, messages living in "new/" are not allowed to have flags, even if mutt allows it to happen. For this reason, this patch prevents moving messages from "new/" to "cur/", only if no flags have to be changed. It's hopefully enough to satisfy mutt (and maybe other MUAs showing the "new" status) users checking the "new" status. Changelog: * v2: Fix bool type as well as NULL returned despite having no errors (Austin Clements) * v4: Tag the related test (contributed by Michal Sojka) as working Signed-off-by: Louis Rilling [Condition for keeping messages in new/ was extended to satisfy all tests from the previous patch. -Michal Sojka] --- lib/message.cc | 13 ++++++++++++- test/maildir-sync | 1 - 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/message.cc b/lib/message.cc index 320901f..87369bb 100644 --- a/lib/message.cc +++ b/lib/message.cc @@ -1195,7 +1195,9 @@ _get_maildir_flag_actions (notmuch_message_t *message, * compute the new maildir filename. * * If the existing filename is in the directory "new", the new - * filename will be in the directory "cur". + * filename will be in the directory "cur", except for the case when + * no flags are changed and the existing filename does not contain + * maildir info (starting with ",2:"). * * After a sequence of ":2," in the filename, any subsequent * single-character flags will be added or removed according to the @@ -1218,6 +1220,7 @@ _new_maildir_filename (void *ctx, char *filename_new, *dir; char flag_map[128]; int flags_in_map = 0; + notmuch_bool_t flags_changed = FALSE; unsigned int i; char *s; @@ -1258,6 +1261,7 @@ _new_maildir_filename (void *ctx, if (flag_map[flag] == 0) { flag_map[flag] = 1; flags_in_map++; + flags_changed = TRUE; } } @@ -1266,9 +1270,16 @@ _new_maildir_filename (void *ctx, if (flag_map[flag]) { flag_map[flag] = 0; flags_in_map--; + flags_changed = TRUE; } } + /* Messages in new/ without maildir info can be kept in new/ if no + * flags have changed. */ + dir = (char *) _filename_is_in_maildir (filename); + if (dir && STRNCMP_LITERAL (dir, "new/") == 0 && !*info && !flags_changed) + return talloc_strdup (ctx, filename); + filename_new = (char *) talloc_size (ctx, info - filename + strlen (":2,") + flags_in_map + 1); diff --git a/test/maildir-sync b/test/maildir-sync index b2ac89f..33d2c58 100755 --- a/test/maildir-sync +++ b/test/maildir-sync @@ -84,7 +84,6 @@ test_expect_equal "$output" "No new mail." # creating all necessary database state for those directories. test_begin_subtest "Adding non-maildir tags does not move message from new to cur" -test_subtest_known_broken add_message [subject]='"Message to stay in new"' \ [date]='"Sat, 01 Jan 2000 12:00:00 -0000"' \ [filename]='message-to-stay-in-new' [dir]=new -- 1.7.10.4