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 75C5E431FBF for ; Sun, 25 Mar 2012 12:19:03 -0700 (PDT) X-Virus-Scanned: Debian amavisd-new at olra.theworths.org X-Amavis-Alert: BAD HEADER SECTION, Duplicate header field: "References" X-Spam-Flag: NO X-Spam-Score: -0.7 X-Spam-Level: X-Spam-Status: No, score=-0.7 tagged_above=-999 required=5 tests=[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 oE4gAdve4m0a for ; Sun, 25 Mar 2012 12:19:01 -0700 (PDT) Received: from mail-lpp01m010-f53.google.com (mail-lpp01m010-f53.google.com [209.85.215.53]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (No client certificate requested) by olra.theworths.org (Postfix) with ESMTPS id 69FC8431FC0 for ; Sun, 25 Mar 2012 12:18:57 -0700 (PDT) Received: by mail-lpp01m010-f53.google.com with SMTP id c1so3755652lah.26 for ; Sun, 25 Mar 2012 12:18:57 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references :in-reply-to:references:x-gm-message-state; bh=LkSeekLEJWTehEeU/FuWZ+1VC8hs51RqlfXXDHatRpo=; b=Cdxs34NRVl0QLCWk15JlreDJiX9uZcFcl6ApyZnO3NqW2zeTHM4WLOeOSOwT5Xpf8Y MBWR0A8KkHNgC/DsU3og3ZhDRtvKKEKfOfJ9GJ+z9EKeCz/fOhnXFidtHeLkGaJ4noI+ QNlIVmsDLt12eNWa/3uW7JFSAhGolwdM8/srZVE3gmDPvfzcw9/NWDQwafAt5cs3IRb0 Y/RMfXtLlextiTybz2gXs4CiwyV0o9CHlRQTOpqfPN0d0B7bcwaR65jLEnbA798m8Hbo vUSuoX88K0zt7CxKZWAPdXuGojTd87w3JlKi5XurHQKOdSpdhmznh865jhrsPShE9PDD Qysg== Received: by 10.152.132.6 with SMTP id oq6mr14347923lab.44.1332703136987; Sun, 25 Mar 2012 12:18:56 -0700 (PDT) Received: from localhost (dsl-hkibrasgw4-fe50f800-253.dhcp.inet.fi. [84.248.80.253]) by mx.google.com with ESMTPS id mq3sm14857176lab.0.2012.03.25.12.18.55 (version=SSLv3 cipher=OTHER); Sun, 25 Mar 2012 12:18:56 -0700 (PDT) From: Jani Nikula To: notmuch@notmuchmail.org Subject: [PATCH v2 2/3] cli: refactor "notmuch tag" query tagging into a separate function Date: Sun, 25 Mar 2012 22:18:44 +0300 Message-Id: <584067da00dd9f04a7f3982b76fd4b4918e4fe61.1332702915.git.jani@nikula.org> X-Mailer: git-send-email 1.7.5.4 In-Reply-To: References: In-Reply-To: References: X-Gm-Message-State: ALoCoQnzihF3JGRAoi7+ZpfNu+t/EAm4chgKyenjq+qjri7vAouKN8bJBOPk+pEIrhN++oR5ZLKJ 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: Sun, 25 Mar 2012 19:19:04 -0000 Refactor to make tagging code easier to reuse in the future. No functional changes. Signed-off-by: Jani Nikula --- notmuch-tag.c | 101 ++++++++++++++++++++++++++++++++------------------------- 1 files changed, 57 insertions(+), 44 deletions(-) diff --git a/notmuch-tag.c b/notmuch-tag.c index c39b235..edbfdec 100644 --- a/notmuch-tag.c +++ b/notmuch-tag.c @@ -106,6 +106,60 @@ _optimize_tag_query (void *ctx, const char *orig_query_string, return query_string; } +static int +tag_query (void *ctx, notmuch_database_t *notmuch, const char *query_string, + tag_operation_t *tag_ops, notmuch_bool_t synchronize_flags) +{ + notmuch_query_t *query; + notmuch_messages_t *messages; + notmuch_message_t *message; + int i; + + /* Optimize the query so it excludes messages that already have + * the specified set of tags. */ + query_string = _optimize_tag_query (ctx, query_string, tag_ops); + if (query_string == NULL) { + fprintf (stderr, "Out of memory.\n"); + return 1; + } + + query = notmuch_query_create (notmuch, query_string); + if (query == NULL) { + fprintf (stderr, "Out of memory.\n"); + return 1; + } + + /* tagging is not interested in any special sort order */ + notmuch_query_set_sort (query, NOTMUCH_SORT_UNSORTED); + + for (messages = notmuch_query_search_messages (query); + notmuch_messages_valid (messages) && !interrupted; + notmuch_messages_move_to_next (messages)) + { + message = notmuch_messages_get (messages); + + notmuch_message_freeze (message); + + for (i = 0; tag_ops[i].tag; i++) { + if (tag_ops[i].remove) + notmuch_message_remove_tag (message, tag_ops[i].tag); + else + notmuch_message_add_tag (message, tag_ops[i].tag); + } + + notmuch_message_thaw (message); + + if (synchronize_flags) + notmuch_message_tags_to_maildir_flags (message); + + notmuch_message_destroy (message); + } + + notmuch_query_destroy (query); + + return interrupted; +} + int notmuch_tag_command (void *ctx, int argc, char *argv[]) { @@ -114,12 +168,10 @@ notmuch_tag_command (void *ctx, int argc, char *argv[]) char *query_string; notmuch_config_t *config; notmuch_database_t *notmuch; - notmuch_query_t *query; - notmuch_messages_t *messages; - notmuch_message_t *message; struct sigaction action; notmuch_bool_t synchronize_flags; int i; + int ret; /* Setup our handler for SIGINT */ memset (&action, 0, sizeof (struct sigaction)); @@ -166,14 +218,6 @@ notmuch_tag_command (void *ctx, int argc, char *argv[]) return 1; } - /* Optimize the query so it excludes messages that already have - * the specified set of tags. */ - query_string = _optimize_tag_query (ctx, query_string, tag_ops); - if (query_string == NULL) { - fprintf (stderr, "Out of memory.\n"); - return 1; - } - config = notmuch_config_open (ctx, NULL, NULL); if (config == NULL) return 1; @@ -185,40 +229,9 @@ notmuch_tag_command (void *ctx, int argc, char *argv[]) synchronize_flags = notmuch_config_get_maildir_synchronize_flags (config); - query = notmuch_query_create (notmuch, query_string); - if (query == NULL) { - fprintf (stderr, "Out of memory.\n"); - return 1; - } - - /* tagging is not interested in any special sort order */ - notmuch_query_set_sort (query, NOTMUCH_SORT_UNSORTED); + ret = tag_query (ctx, notmuch, query_string, tag_ops, synchronize_flags); - for (messages = notmuch_query_search_messages (query); - notmuch_messages_valid (messages) && !interrupted; - notmuch_messages_move_to_next (messages)) - { - message = notmuch_messages_get (messages); - - notmuch_message_freeze (message); - - for (i = 0; tag_ops[i].tag; i++) { - if (tag_ops[i].remove) - notmuch_message_remove_tag (message, tag_ops[i].tag); - else - notmuch_message_add_tag (message, tag_ops[i].tag); - } - - notmuch_message_thaw (message); - - if (synchronize_flags) - notmuch_message_tags_to_maildir_flags (message); - - notmuch_message_destroy (message); - } - - notmuch_query_destroy (query); notmuch_database_close (notmuch); - return interrupted; + return ret; } -- 1.7.5.4