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 3FE34431FD6 for ; Sat, 24 Mar 2012 09:14:55 -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 HvnZdEGv6h1z for ; Sat, 24 Mar 2012 09:14:53 -0700 (PDT) Received: from mail-lb0-f181.google.com (mail-lb0-f181.google.com [209.85.217.181]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (No client certificate requested) by olra.theworths.org (Postfix) with ESMTPS id 7A8D1431FC9 for ; Sat, 24 Mar 2012 09:14:49 -0700 (PDT) Received: by mail-lb0-f181.google.com with SMTP id k6so3358397lbo.26 for ; Sat, 24 Mar 2012 09:14:49 -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=I7Ey2iPdCus0Q9WS9Qa0SBUn6KBTMElQufkGikf0vsw=; b=aR/Zc7l0Qvqq7G7dhxuSiIeB+hQTtxjXwqVZLCgJ+HxSmpA66JOUGWlypD5/ibShZc T7qr9Ln0+arla6Uld4LgTezs5APo0kfmHXwGlUrvcLsuWpOUbOEUjT94WaXY4oWFJNlv pDuQI4LhICUkiJJjS1/PJXD0AOdMGDNgLcgxFeTMn87a3Tjb2C6EHJhza1EcAdiK8yq/ 0HXRJ3y9buWRo4BDY2B8c0ahe8WgqMEYfHmLyAVt5m6zgsg8ou4z++sJkqgdG6RxrNAb j6BmKLk/lKltgUSHFQjIPMlp3CaFidq1XBnTwm4i7iwpiJqSYDtwK66oTuw7nQ/KjY6U KiTA== Received: by 10.112.24.196 with SMTP id w4mr5923166lbf.62.1332605689045; Sat, 24 Mar 2012 09:14:49 -0700 (PDT) Received: from localhost (dsl-hkibrasgw4-fe50f800-253.dhcp.inet.fi. [84.248.80.253]) by mx.google.com with ESMTPS id tt5sm11392906lab.10.2012.03.24.09.14.47 (version=SSLv3 cipher=OTHER); Sat, 24 Mar 2012 09:14:48 -0700 (PDT) From: Jani Nikula To: notmuch@notmuchmail.org Subject: [PATCH 2/3] cli: refactor "notmuch tag" query tagging into a separate function Date: Sat, 24 Mar 2012 18:14:36 +0200 Message-Id: <0557d94790bd72a13cd8e6696ea6ac1708a92be5.1332604895.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: ALoCoQnB/8SzztJxUALQ5qQOBClieBK5Og+uv/cSo2KGJeYw/eVDc80zdmSKHiiv4BE3xEFuIcqC 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: Sat, 24 Mar 2012 16:14:55 -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 98b2126..c4e3f9d 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)); @@ -167,14 +219,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; @@ -186,40 +230,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