1 Return-Path: <jani@nikula.org>
\r
2 X-Original-To: notmuch@notmuchmail.org
\r
3 Delivered-To: notmuch@notmuchmail.org
\r
4 Received: from localhost (localhost [127.0.0.1])
\r
5 by olra.theworths.org (Postfix) with ESMTP id 8FE20431FD2
\r
6 for <notmuch@notmuchmail.org>; Sat, 9 Mar 2013 07:12:48 -0800 (PST)
\r
7 X-Virus-Scanned: Debian amavisd-new at olra.theworths.org
\r
8 X-Amavis-Alert: BAD HEADER SECTION, Duplicate header field: "References"
\r
12 X-Spam-Status: No, score=-0.7 tagged_above=-999 required=5
\r
13 tests=[RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled
\r
14 Received: from olra.theworths.org ([127.0.0.1])
\r
15 by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)
\r
16 with ESMTP id FkPO22usFL2s for <notmuch@notmuchmail.org>;
\r
17 Sat, 9 Mar 2013 07:12:47 -0800 (PST)
\r
18 Received: from mail-la0-f48.google.com (mail-la0-f48.google.com
\r
19 [209.85.215.48]) (using TLSv1 with cipher RC4-SHA (128/128 bits))
\r
20 (No client certificate requested)
\r
21 by olra.theworths.org (Postfix) with ESMTPS id D4298431FC9
\r
22 for <notmuch@notmuchmail.org>; Sat, 9 Mar 2013 07:12:44 -0800 (PST)
\r
23 Received: by mail-la0-f48.google.com with SMTP id fq13so2568115lab.21
\r
24 for <notmuch@notmuchmail.org>; Sat, 09 Mar 2013 07:12:43 -0800 (PST)
\r
25 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
\r
26 d=google.com; s=20120113;
\r
27 h=x-received:from:to:cc:subject:date:message-id:x-mailer:in-reply-to
\r
28 :references:in-reply-to:references:x-gm-message-state;
\r
29 bh=9A+71CoOyZaSFjWmtaMl0g0rmc+JXkDZca9xWkSmEFQ=;
\r
30 b=MT90g4qR2EZfACQvddxh8mJNCnCgsSKqBLAfinbfUCm6NGRfq4CPYnvFBG2rtuihDf
\r
31 IIpGdgLpgsZfnIdnTmPmLCZcSffJiURMOvGCuMbIZhvYNnxQR53LO+fOqnftSGf1TIEC
\r
32 YhVLcRwlI6YNR7w2Xu22adStlm4kgchKB+O+KsAh/xif1tkIeTdl9IMana5hN4YrG4W5
\r
33 A8LhszDNoLdeRGzfUBonwjVREKE7343bgf+IfxKpMGGl4thkiJEYBZyr7dXzzNI1VSrf
\r
34 1MH+BU08hx+0NJGvTAbHSAoW44FZERAEjhEAp6l5CeikuWWS27j54XiMBwDl51NCyBrB
\r
36 X-Received: by 10.112.16.199 with SMTP id i7mr2418294lbd.65.1362841963195;
\r
37 Sat, 09 Mar 2013 07:12:43 -0800 (PST)
\r
38 Received: from localhost (dsl-hkibrasgw4-50df51-27.dhcp.inet.fi.
\r
40 by mx.google.com with ESMTPS id iq6sm4274815lab.10.2013.03.09.07.12.40
\r
41 (version=TLSv1.2 cipher=RC4-SHA bits=128/128);
\r
42 Sat, 09 Mar 2013 07:12:42 -0800 (PST)
\r
43 From: Jani Nikula <jani@nikula.org>
\r
44 To: notmuch@notmuchmail.org
\r
45 Subject: [PATCH v2 3/6] cli: add --batch option to notmuch count
\r
46 Date: Sat, 9 Mar 2013 17:12:23 +0200
\r
48 <d2a935b53c0e7c09bd7adb2515075d8d6c94e081.1362841844.git.jani@nikula.org>
\r
49 X-Mailer: git-send-email 1.7.10.4
\r
50 In-Reply-To: <cover.1362841844.git.jani@nikula.org>
\r
51 References: <cover.1362841844.git.jani@nikula.org>
\r
52 In-Reply-To: <cover.1362841844.git.jani@nikula.org>
\r
53 References: <cover.1362841844.git.jani@nikula.org>
\r
55 ALoCoQmi/y3DgnLZQ3esgkN+9Tq0Whs6kISCi1KhtNcg56ci5w25ko5sIDnHfMC1YEODjP0etJ7O
\r
56 X-BeenThere: notmuch@notmuchmail.org
\r
57 X-Mailman-Version: 2.1.13
\r
59 List-Id: "Use and development of the notmuch mail system."
\r
60 <notmuch.notmuchmail.org>
\r
61 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,
\r
62 <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>
\r
63 List-Archive: <http://notmuchmail.org/pipermail/notmuch>
\r
64 List-Post: <mailto:notmuch@notmuchmail.org>
\r
65 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>
\r
66 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,
\r
67 <mailto:notmuch-request@notmuchmail.org?subject=subscribe>
\r
68 X-List-Received-Date: Sat, 09 Mar 2013 15:12:49 -0000
\r
70 Add support for reading queries from stdin, one per line, and writing
\r
71 results to stdin, one per line.
\r
73 This will bring considerable performance improvements when utilized in
\r
74 Emacs notmuch-hello, especially so when running remote notmuch.
\r
76 notmuch-count.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++--
\r
77 1 file changed, 50 insertions(+), 2 deletions(-)
\r
79 diff --git a/notmuch-count.c b/notmuch-count.c
\r
80 index 630f036..8772cff 100644
\r
81 --- a/notmuch-count.c
\r
82 +++ b/notmuch-count.c
\r
83 @@ -62,6 +62,27 @@ print_count (notmuch_database_t *notmuch, const char *query_str,
\r
88 +count_file (notmuch_database_t *notmuch, FILE *input, const char **exclude_tags,
\r
89 + size_t exclude_tags_length, int output)
\r
91 + char *line = NULL;
\r
96 + while (!ret && (line_len = getline (&line, &line_size, input)) != -1) {
\r
97 + chomp_newline (line);
\r
98 + ret = print_count (notmuch, line, exclude_tags, exclude_tags_length,
\r
109 notmuch_count_command (notmuch_config_t *config, int argc, char *argv[])
\r
111 @@ -72,6 +93,9 @@ notmuch_count_command (notmuch_config_t *config, int argc, char *argv[])
\r
112 int exclude = EXCLUDE_TRUE;
\r
113 const char **search_exclude_tags = NULL;
\r
114 size_t search_exclude_tags_length = 0;
\r
115 + notmuch_bool_t batch = FALSE;
\r
116 + FILE *input = stdin;
\r
117 + char *input_file_name = NULL;
\r
120 notmuch_opt_desc_t options[] = {
\r
121 @@ -83,6 +107,8 @@ notmuch_count_command (notmuch_config_t *config, int argc, char *argv[])
\r
122 (notmuch_keyword_t []){ { "true", EXCLUDE_TRUE },
\r
123 { "false", EXCLUDE_FALSE },
\r
125 + { NOTMUCH_OPT_BOOLEAN, &batch, "batch", 0, 0 },
\r
126 + { NOTMUCH_OPT_STRING, &input_file_name, "input", 'i', 0 },
\r
130 @@ -92,6 +118,21 @@ notmuch_count_command (notmuch_config_t *config, int argc, char *argv[])
\r
134 + if (input_file_name) {
\r
136 + input = fopen (input_file_name, "r");
\r
137 + if (input == NULL) {
\r
138 + fprintf (stderr, "Error opening %s for reading: %s\n",
\r
139 + input_file_name, strerror (errno));
\r
144 + if (batch && opt_index != argc) {
\r
145 + fprintf (stderr, "--batch and query string are not compatible\n");
\r
149 if (notmuch_database_open (notmuch_config_get_database_path (config),
\r
150 NOTMUCH_DATABASE_MODE_READ_ONLY, ¬much))
\r
152 @@ -107,10 +148,17 @@ notmuch_count_command (notmuch_config_t *config, int argc, char *argv[])
\r
153 (config, &search_exclude_tags_length);
\r
156 - ret = print_count (notmuch, query_str, search_exclude_tags,
\r
157 - search_exclude_tags_length, output);
\r
159 + ret = count_file (notmuch, input, search_exclude_tags,
\r
160 + search_exclude_tags_length, output);
\r
162 + ret = print_count (notmuch, query_str, search_exclude_tags,
\r
163 + search_exclude_tags_length, output);
\r
165 notmuch_database_destroy (notmuch);
\r
167 + if (input != stdin)
\r