1 Return-Path: <bremner@tesseract.cs.unb.ca>
\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 arlo.cworth.org (Postfix) with ESMTP id C2F896DE1BD3
\r
6 for <notmuch@notmuchmail.org>; Sun, 5 Apr 2015 16:03:56 -0700 (PDT)
\r
7 X-Virus-Scanned: Debian amavisd-new at cworth.org
\r
11 X-Spam-Status: No, score=0.488 tagged_above=-999 required=5 tests=[AWL=0.478,
\r
12 T_HEADER_FROM_DIFFERENT_DOMAINS=0.01] autolearn=disabled
\r
13 Received: from arlo.cworth.org ([127.0.0.1])
\r
14 by localhost (arlo.cworth.org [127.0.0.1]) (amavisd-new, port 10024)
\r
15 with ESMTP id SVGGayr289jQ for <notmuch@notmuchmail.org>;
\r
16 Sun, 5 Apr 2015 16:03:54 -0700 (PDT)
\r
17 Received: from mx.xen14.node3324.gplhost.com (gitolite.debian.net
\r
19 by arlo.cworth.org (Postfix) with ESMTPS id 5AA656DE1BD5
\r
20 for <notmuch@notmuchmail.org>; Sun, 5 Apr 2015 16:03:53 -0700 (PDT)
\r
21 Received: from remotemail by mx.xen14.node3324.gplhost.com with local (Exim
\r
22 4.80) (envelope-from <bremner@tesseract.cs.unb.ca>)
\r
23 id 1YetZP-0002rI-R0; Sun, 05 Apr 2015 23:03:11 +0000
\r
24 Received: (nullmailer pid 2253 invoked by uid 1000); Sun, 05 Apr 2015
\r
26 From: David Bremner <david@tethera.net>
\r
27 To: notmuch@notmuchmail.org
\r
28 Subject: [WIP2 09/12] cli/search: add metadata element to structured output
\r
29 Date: Mon, 6 Apr 2015 07:59:11 +0900
\r
30 Message-Id: <1428274754-1698-10-git-send-email-david@tethera.net>
\r
31 X-Mailer: git-send-email 2.1.4
\r
32 In-Reply-To: <1428274754-1698-1-git-send-email-david@tethera.net>
\r
33 References: <1428274754-1698-1-git-send-email-david@tethera.net>
\r
35 Content-Type: text/plain; charset=UTF-8
\r
36 Content-Transfer-Encoding: 8bit
\r
37 X-BeenThere: notmuch@notmuchmail.org
\r
38 X-Mailman-Version: 2.1.18
\r
40 List-Id: "Use and development of the notmuch mail system."
\r
41 <notmuch.notmuchmail.org>
\r
42 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,
\r
43 <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>
\r
44 List-Archive: <http://notmuchmail.org/pipermail/notmuch/>
\r
45 List-Post: <mailto:notmuch@notmuchmail.org>
\r
46 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>
\r
47 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,
\r
48 <mailto:notmuch-request@notmuchmail.org?subject=subscribe>
\r
49 X-List-Received-Date: Sun, 05 Apr 2015 23:03:56 -0000
\r
51 As before, we force the test suite to use format version 2 in order
\r
52 not to break. This is probably not the solution for the final version
\r
55 devel/schemata | 10 +++++-----
\r
56 notmuch-search.c | 18 +++++++++---------
\r
57 test/T070-insert.sh | 2 +-
\r
58 test/T090-search-output.sh | 20 ++++++++++----------
\r
59 test/T095-address.sh | 4 ++--
\r
60 test/T160-json.sh | 4 ++--
\r
61 test/T170-sexp.sh | 4 ++--
\r
62 test/T470-missing-headers.sh | 2 +-
\r
63 test/test-lib.sh | 8 ++++++++
\r
64 9 files changed, 40 insertions(+), 32 deletions(-)
\r
66 diff --git a/devel/schemata b/devel/schemata
\r
67 index 02f7cc0..e297adf 100644
\r
68 --- a/devel/schemata
\r
69 +++ b/devel/schemata
\r
70 @@ -144,19 +144,19 @@ notmuch search schema
\r
71 ---------------------
\r
74 -search_summary = [thread_summary*]
\r
75 +search_summary = [database_metadata, thread_summary*]
\r
78 -search_threads = [threadid*]
\r
79 +search_threads = [database_metadata, threadid*]
\r
82 -search_messages = [messageid*]
\r
83 +search_messages = [database_metadata, messageid*]
\r
86 -search_files = [string*]
\r
87 +search_files = [database_metadata, string*]
\r
90 -search_tags = [string*]
\r
91 +search_tags = [database_metadata, string*]
\r
94 database: database_metadata
\r
95 diff --git a/notmuch-search.c b/notmuch-search.c
\r
96 index 994ae58..5d17dac 100644
\r
97 --- a/notmuch-search.c
\r
98 +++ b/notmuch-search.c
\r
99 @@ -122,7 +122,8 @@ do_search_threads (search_context_t *ctx)
\r
100 if (threads == NULL)
\r
103 - format->begin_list (format);
\r
104 + sprinter_start_output (format, ctx->query,
\r
105 + (ctx->output == OUTPUT_THREADS) ? "threads" : "summary");
\r
108 notmuch_threads_valid (threads) && (ctx->limit < 0 || i < ctx->offset + ctx->limit);
\r
109 @@ -238,8 +239,7 @@ do_search_threads (search_context_t *ctx)
\r
110 notmuch_thread_destroy (thread);
\r
113 - format->end (format);
\r
115 + sprinter_finish_output (format);
\r
119 @@ -423,7 +423,7 @@ do_search_messages (search_context_t *ctx)
\r
120 if (messages == NULL)
\r
123 - format->begin_list (format);
\r
124 + sprinter_start_output (format, ctx->query, "messages");
\r
127 notmuch_messages_valid (messages) && (ctx->limit < 0 || i < ctx->offset + ctx->limit);
\r
128 @@ -486,8 +486,7 @@ do_search_messages (search_context_t *ctx)
\r
130 notmuch_messages_destroy (messages);
\r
132 - format->end (format);
\r
134 + sprinter_finish_output (format);
\r
138 @@ -505,6 +504,8 @@ do_search_tags (const search_context_t *ctx)
\r
141 /* Special-case query of "*" for better performance. */
\r
144 if (strcmp (notmuch_query_get_query_string (query), "*") == 0) {
\r
145 tags = notmuch_database_get_all_tags (notmuch);
\r
147 @@ -517,7 +518,7 @@ do_search_tags (const search_context_t *ctx)
\r
151 - format->begin_list (format);
\r
152 + sprinter_start_output (format, query, "tags");
\r
155 notmuch_tags_valid (tags);
\r
156 @@ -535,8 +536,7 @@ do_search_tags (const search_context_t *ctx)
\r
158 notmuch_messages_destroy (messages);
\r
160 - format->end (format);
\r
162 + sprinter_finish_output (format);
\r
166 diff --git a/test/T070-insert.sh b/test/T070-insert.sh
\r
167 index 48d36af..67acbb0 100755
\r
168 --- a/test/T070-insert.sh
\r
169 +++ b/test/T070-insert.sh
\r
170 @@ -64,7 +64,7 @@ output=$(notmuch search --output=files "subject:insert-subject" | wc -l)
\r
171 test_expect_equal "$output" 2
\r
173 test_begin_subtest "Duplicate message does not change tags"
\r
174 -output=$(notmuch search --format=json --output=tags "subject:insert-subject")
\r
175 +output=$(NOTMUCH_SEARCH --format=json --output=tags "subject:insert-subject")
\r
176 test_expect_equal_json "$output" '["inbox", "unread"]'
\r
178 test_begin_subtest "Insert message, add tag"
\r
179 diff --git a/test/T090-search-output.sh b/test/T090-search-output.sh
\r
180 index fe2ec9a..1dc74b6 100755
\r
181 --- a/test/T090-search-output.sh
\r
182 +++ b/test/T090-search-output.sh
\r
183 @@ -35,7 +35,7 @@ EOF
\r
184 test_expect_equal_file OUTPUT EXPECTED
\r
186 test_begin_subtest "--output=threads --format=json"
\r
187 -notmuch search --format=json --output=threads '*' | sed -e s/\".*\"/\"THREADID\"/ >OUTPUT
\r
188 +NOTMUCH_SEARCH --format=json --output=threads '*' | sed -e s/\".*\"/\"THREADID\"/ >OUTPUT
\r
189 cat <<EOF >EXPECTED
\r
192 @@ -141,7 +141,7 @@ EOF
\r
193 test_expect_equal_file OUTPUT EXPECTED
\r
195 test_begin_subtest "--output=messages --format=json"
\r
196 -notmuch search --format=json --output=messages '*' >OUTPUT
\r
197 +NOTMUCH_SEARCH --format=json --output=messages '*' >OUTPUT
\r
198 cat <<EOF >EXPECTED
\r
199 ["4EFC743A.3060609@april.org",
\r
200 "877h1wv7mg.fsf@inf-8657.int-evry.fr",
\r
201 @@ -199,19 +199,19 @@ EOF
\r
202 test_expect_equal_file OUTPUT EXPECTED
\r
204 test_begin_subtest "--output=messages --format=json --duplicate=1"
\r
205 -notmuch search --output=messages --format=json --duplicate=1 '*' >OUTPUT
\r
206 +NOTMUCH_SEARCH --output=messages --format=json --duplicate=1 '*' >OUTPUT
\r
207 # reuse same EXPECTED as above
\r
208 test_expect_equal_file OUTPUT EXPECTED
\r
210 test_begin_subtest "--output=messages --format=json --duplicate=2"
\r
211 -notmuch search --output=messages --format=json --duplicate=2 '*' >OUTPUT
\r
212 +NOTMUCH_SEARCH --output=messages --format=json --duplicate=2 '*' >OUTPUT
\r
213 cat <<EOF >EXPECTED
\r
214 ["20091117232137.GA7669@griffis1.net"]
\r
216 test_expect_equal_file OUTPUT EXPECTED
\r
218 test_begin_subtest "--output=messages --format=json --duplicate=3"
\r
219 -notmuch search --output=messages --format=json --duplicate=3 '*' >OUTPUT
\r
220 +NOTMUCH_SEARCH --output=messages --format=json --duplicate=3 '*' >OUTPUT
\r
221 cat <<EOF >EXPECTED
\r
224 @@ -338,7 +338,7 @@ EOF
\r
225 test_expect_equal_file OUTPUT EXPECTED
\r
227 test_begin_subtest "--output=files --format=json"
\r
228 -notmuch search --format=json --output=files '*' | notmuch_search_files_sanitize \
\r
229 +NOTMUCH_SEARCH --format=json --output=files '*' | notmuch_search_files_sanitize \
\r
230 | test_sort_json >OUTPUT
\r
231 cat <<EOF | test_sort_json >EXPECTED
\r
232 ["MAIL_DIR/cur/52:2,",
\r
233 @@ -398,14 +398,14 @@ EOF
\r
234 test_expect_equal_file OUTPUT EXPECTED
\r
236 test_begin_subtest "--output=files --format=json --duplicate=2"
\r
237 -notmuch search --format=json --output=files --duplicate=2 '*' | notmuch_search_files_sanitize >OUTPUT
\r
238 +NOTMUCH_SEARCH --format=json --output=files --duplicate=2 '*' | notmuch_search_files_sanitize >OUTPUT
\r
239 cat <<EOF >EXPECTED
\r
242 test_expect_equal_file OUTPUT EXPECTED
\r
244 test_begin_subtest "--output=tags"
\r
245 -notmuch search --output=tags '*' >OUTPUT
\r
246 +NOTMUCH_SEARCH --output=tags '*' >OUTPUT
\r
247 cat <<EOF >EXPECTED
\r
250 @@ -415,7 +415,7 @@ EOF
\r
251 test_expect_equal_file OUTPUT EXPECTED
\r
253 test_begin_subtest "--output=tags --format=json"
\r
254 -notmuch search --format=json --output=tags '*' >OUTPUT
\r
255 +NOTMUCH_SEARCH --format=json --output=tags '*' >OUTPUT
\r
256 cat <<EOF >EXPECTED
\r
259 @@ -439,7 +439,7 @@ echo -n >EXPECTED
\r
260 test_expect_equal_file OUTPUT EXPECTED
\r
262 test_begin_subtest "search --format=json for non-existent message prints proper empty json"
\r
263 -notmuch search --format=json "no-message-matches-this" > OUTPUT
\r
264 +NOTMUCH_SEARCH --format=json "no-message-matches-this" > OUTPUT
\r
265 echo "[]" >EXPECTED
\r
266 test_expect_equal_file OUTPUT EXPECTED
\r
268 diff --git a/test/T095-address.sh b/test/T095-address.sh
\r
269 index ed0cac7..6eae30e 100755
\r
270 --- a/test/T095-address.sh
\r
271 +++ b/test/T095-address.sh
\r
272 @@ -33,7 +33,7 @@ notmuch address '*' >OUTPUT
\r
273 test_expect_equal_file OUTPUT EXPECTED
\r
275 test_begin_subtest "--output=sender --format=json"
\r
276 -notmuch address --output=sender --format=json '*' >OUTPUT
\r
277 +NOTMUCH_ADDRESS --output=sender --format=json '*' >OUTPUT
\r
278 cat <<EOF >EXPECTED
\r
279 [{"name": "François Boulogne", "address": "boulogne.f@gmail.com", "name-addr": "François Boulogne <boulogne.f@gmail.com>"},
\r
280 {"name": "Olivier Berger", "address": "olivier.berger@it-sudparis.eu", "name-addr": "Olivier Berger <olivier.berger@it-sudparis.eu>"},
\r
281 @@ -122,7 +122,7 @@ test_expect_equal_file OUTPUT EXPECTED
\r
282 test_begin_subtest "--output=count --format=json"
\r
283 # Since the iteration order of GHashTable is not specified, we
\r
284 # preprocess and sort the results to keep the order stable here.
\r
285 -notmuch address --output=count --format=json '*' | \
\r
286 +NOTMUCH_ADDRESS --output=count --format=json '*' | \
\r
287 sed -e 's/^\[//' -e 's/]$//' -e 's/,$//' | sort >OUTPUT
\r
288 cat <<EOF >EXPECTED
\r
289 {"name": "Adrian Perez de Castro", "address": "aperez@igalia.com", "name-addr": "Adrian Perez de Castro <aperez@igalia.com>", "count": 1}
\r
290 diff --git a/test/T160-json.sh b/test/T160-json.sh
\r
291 index 46c1314..10df42a 100755
\r
292 --- a/test/T160-json.sh
\r
293 +++ b/test/T160-json.sh
\r
294 @@ -18,7 +18,7 @@ test_expect_equal_json "$output" "[[[{\"id\": \"${gen_msg_id}\", \"match\": true
\r
296 test_begin_subtest "Search message: json"
\r
297 add_message "[subject]=\"json-search-subject\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[body]=\"json-search-message\""
\r
298 -output=$(notmuch search --format=json "json-search-message" | notmuch_search_sanitize)
\r
299 +output=$(NOTMUCH_SEARCH --format=json "json-search-message" | notmuch_search_sanitize)
\r
300 test_expect_equal_json "$output" "[{\"thread\": \"XXX\",
\r
301 \"timestamp\": 946728000,
\r
302 \"date_relative\": \"2000-01-01\",
\r
303 @@ -52,7 +52,7 @@ test_expect_equal_json "$output" "[[[{\"id\": \"$id\", \"match\": true, \"exclud
\r
305 test_begin_subtest "Search message: json, utf-8"
\r
306 add_message "[subject]=\"json-search-utf8-body-sübjéct\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[body]=\"jsön-search-méssage\""
\r
307 -output=$(notmuch search --format=json "jsön-search-méssage" | notmuch_search_sanitize)
\r
308 +output=$(NOTMUCH_SEARCH --format=json "jsön-search-méssage" | notmuch_search_sanitize)
\r
309 test_expect_equal_json "$output" "[{\"thread\": \"XXX\",
\r
310 \"timestamp\": 946728000,
\r
311 \"date_relative\": \"2000-01-01\",
\r
312 diff --git a/test/T170-sexp.sh b/test/T170-sexp.sh
\r
313 index 6c7402a..06a7f98 100755
\r
314 --- a/test/T170-sexp.sh
\r
315 +++ b/test/T170-sexp.sh
\r
316 @@ -18,7 +18,7 @@ test_expect_equal "$output" "((((:id \"${gen_msg_id}\" :match t :excluded nil :f
\r
318 test_begin_subtest "Search message: sexp"
\r
319 add_message "[subject]=\"sexp-search-subject\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[body]=\"sexp-search-message\""
\r
320 -output=$(notmuch search --format=sexp "sexp-search-message" | notmuch_search_sanitize)
\r
321 +output=$(NOTMUCH_SEARCH --format=sexp "sexp-search-message" | notmuch_search_sanitize)
\r
322 test_expect_equal "$output" "((:thread \"0000000000000002\" :timestamp 946728000 :date_relative \"2000-01-01\" :matched 1 :total 1 :authors \"Notmuch Test Suite\" :subject \"sexp-search-subject\" :query (\"id:$gen_msg_id\" nil) :tags (\"inbox\" \"unread\")))"
\r
324 test_begin_subtest "Show message: sexp, utf-8"
\r
325 @@ -43,7 +43,7 @@ test_expect_equal "$output" "((((:id \"$id\" :match t :excluded nil :filename \"
\r
327 test_begin_subtest "Search message: sexp, utf-8"
\r
328 add_message "[subject]=\"sexp-search-utf8-body-sübjéct\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[body]=\"jsön-search-méssage\""
\r
329 -output=$(notmuch search --format=sexp "jsön-search-méssage" | notmuch_search_sanitize)
\r
330 +output=$(NOTMUCH_SEARCH --format=sexp "jsön-search-méssage" | notmuch_search_sanitize)
\r
331 test_expect_equal "$output" "((:thread \"0000000000000005\" :timestamp 946728000 :date_relative \"2000-01-01\" :matched 1 :total 1 :authors \"Notmuch Test Suite\" :subject \"sexp-search-utf8-body-sübjéct\" :query (\"id:$gen_msg_id\" nil) :tags (\"inbox\" \"unread\")))"
\r
334 diff --git a/test/T470-missing-headers.sh b/test/T470-missing-headers.sh
\r
335 index c3ee430..2e24a74 100755
\r
336 --- a/test/T470-missing-headers.sh
\r
337 +++ b/test/T470-missing-headers.sh
\r
338 @@ -29,7 +29,7 @@ thread:XXX 2001-01-05 [1/1] (null); (inbox unread)
\r
339 thread:XXX 1970-01-01 [1/1] Notmuch Test Suite; (inbox unread)"
\r
341 test_begin_subtest "Search: json"
\r
342 -output=$(notmuch search --format=json '*' | notmuch_search_sanitize)
\r
343 +output=$(NOTMUCH_SEARCH --format=json '*' | notmuch_search_sanitize)
\r
344 test_expect_equal_json "$output" '
\r
347 diff --git a/test/test-lib.sh b/test/test-lib.sh
\r
348 index d30608a..d9d8ea1 100644
\r
349 --- a/test/test-lib.sh
\r
350 +++ b/test/test-lib.sh
\r
351 @@ -664,11 +664,19 @@ test_emacs_expect_t () {
\r
355 +NOTMUCH_ADDRESS () {
\r
356 + notmuch address --format-version=2 "${@}"
\r
361 notmuch new "${@}" | grep -v -E -e '^Processed [0-9]*( total)? file|Found [0-9]* total file'
\r
364 +NOTMUCH_SEARCH () {
\r
365 + notmuch search --format-version=2 "${@}"
\r
369 notmuch show --format-version=2 "${@}"
\r