Return-Path: X-Original-To: notmuch@notmuchmail.org Delivered-To: notmuch@notmuchmail.org Received: from localhost (localhost [127.0.0.1]) by olra.theworths.org (Postfix) with ESMTP id AB0C2429E25 for ; Mon, 11 Jul 2011 15:42:42 -0700 (PDT) X-Virus-Scanned: Debian amavisd-new at olra.theworths.org X-Spam-Flag: NO X-Spam-Score: -0.699 X-Spam-Level: X-Spam-Status: No, score=-0.699 tagged_above=-999 required=5 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7] 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 6SxtJhQYZa2s for ; Mon, 11 Jul 2011 15:42:41 -0700 (PDT) Received: from mail-fx0-f46.google.com (mail-fx0-f46.google.com [209.85.161.46]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (No client certificate requested) by olra.theworths.org (Postfix) with ESMTPS id 9C6B3431FB6 for ; Mon, 11 Jul 2011 15:42:41 -0700 (PDT) Received: by fxh19 with SMTP id 19so4428696fxh.19 for ; Mon, 11 Jul 2011 15:42:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=sender:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references; bh=QL0kWUiIQNN2Nji8qmuXge4j9lSGjDUFuv5AyttDpCY=; b=SgyMzlopqr/gsckdWCSDq2Z9z8md8LE/D3xudthnzovg3V1rOCNq5yUncvh4PR2GUa po5Ft/ZkTkyYxqdZW1BA1QbcqTfSSvy618QYAmBrQOfVJg0ofer0YzyvuSp6iH+Pp69v gMBtGOyPLclHUftvOsNjLMyvju1TnU6wyBrJ4= Received: by 10.223.52.155 with SMTP id i27mr8133337fag.139.1310424160452; Mon, 11 Jul 2011 15:42:40 -0700 (PDT) Received: from osdor.le-roi-du-couscous.fr ([78.222.14.116]) by mx.google.com with ESMTPS id b13sm9532048fab.12.2011.07.11.15.42.39 (version=SSLv3 cipher=OTHER); Mon, 11 Jul 2011 15:42:39 -0700 (PDT) Sender: Louis Rilling From: Louis Rilling To: Austin Clements Subject: [PATCH v2] tags_to_maildir_flags: Don't rename if no flags change Date: Tue, 12 Jul 2011 00:41:55 +0200 Message-Id: <1310424115-18850-1-git-send-email-l.rilling@av7.net> X-Mailer: git-send-email 1.7.2.5 In-Reply-To: <20110711223805.GC3583@localdomain> References: <20110711223805.GC3583@localdomain> Cc: notmuch@notmuchmail.org 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: Mon, 11 Jul 2011 22:42:42 -0000 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) Signed-off-by: Louis Rilling --- lib/message.cc | 12 +++++++++++- 1 files changed, 11 insertions(+), 1 deletions(-) diff --git a/lib/message.cc b/lib/message.cc index 64b6cf8..3f8c4ba 100644 --- a/lib/message.cc +++ b/lib/message.cc @@ -1139,7 +1139,7 @@ _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", unless no flags are changed. * * After a sequence of ":2," in the filename, any subsequent * single-character flags will be added or removed according to the @@ -1162,6 +1162,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; @@ -1202,6 +1203,7 @@ _new_maildir_filename (void *ctx, if (flag_map[flag] == 0) { flag_map[flag] = 1; flags_in_map++; + flags_changed = TRUE; } } @@ -1210,9 +1212,17 @@ _new_maildir_filename (void *ctx, if (flag_map[flag]) { flag_map[flag] = 0; flags_in_map--; + flags_changed = TRUE; } } + /* No need to rename. Messages in new/ can be kept in new/. + * Note: We don't even try to fix buggy messages having flags and living in + * new/. It's not our business. + */ + if (!flags_changed) + return talloc_strdup (ctx, filename); + filename_new = (char *) talloc_size (ctx, info - filename + strlen (":2,") + flags_in_map + 1); -- 1.7.2.5