[PATCH] configure: add --without-api-docs option
[notmuch-archives.git] / 87 / aa9f67105d97e808ddf9562652f0f2f56ce301
1 Return-Path: <amthrax@drake.mit.edu>\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 2003D431FC3\r
6         for <notmuch@notmuchmail.org>; Fri,  2 Mar 2012 21:20:43 -0800 (PST)\r
7 X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
8 X-Spam-Flag: NO\r
9 X-Spam-Score: -0.7\r
10 X-Spam-Level: \r
11 X-Spam-Status: No, score=-0.7 tagged_above=-999 required=5\r
12         tests=[RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled\r
13 Received: from olra.theworths.org ([127.0.0.1])\r
14         by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
15         with ESMTP id pm21u82kkZ1Q for <notmuch@notmuchmail.org>;\r
16         Fri,  2 Mar 2012 21:20:39 -0800 (PST)\r
17 Received: from dmz-mailsec-scanner-2.mit.edu (DMZ-MAILSEC-SCANNER-2.MIT.EDU\r
18         [18.9.25.13])\r
19         by olra.theworths.org (Postfix) with ESMTP id A5BB2431FCB\r
20         for <notmuch@notmuchmail.org>; Fri,  2 Mar 2012 21:20:33 -0800 (PST)\r
21 X-AuditID: 1209190d-b7fbf6d0000008ba-e4-4f51aa21dc8c\r
22 Received: from mailhub-auth-2.mit.edu ( [18.7.62.36])\r
23         by dmz-mailsec-scanner-2.mit.edu (Symantec Messaging Gateway) with SMTP\r
24         id 97.77.02234.12AA15F4; Sat,  3 Mar 2012 00:20:33 -0500 (EST)\r
25 Received: from outgoing.mit.edu (OUTGOING-AUTH.MIT.EDU [18.7.22.103])\r
26         by mailhub-auth-2.mit.edu (8.13.8/8.9.2) with ESMTP id q235KWOr030588; \r
27         Sat, 3 Mar 2012 00:20:32 -0500\r
28 Received: from drake.mit.edu\r
29         (209-6-116-242.c3-0.arl-ubr1.sbo-arl.ma.cable.rcn.com\r
30         [209.6.116.242]) (authenticated bits=0)\r
31         (User authenticated as amdragon@ATHENA.MIT.EDU)\r
32         by outgoing.mit.edu (8.13.6/8.12.4) with ESMTP id q235KVc4022259\r
33         (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT);\r
34         Sat, 3 Mar 2012 00:20:32 -0500 (EST)\r
35 Received: from amthrax by drake.mit.edu with local (Exim 4.77)\r
36         (envelope-from <amthrax@drake.mit.edu>)\r
37         id 1S3hOR-0000h7-EZ; Sat, 03 Mar 2012 00:20:31 -0500\r
38 From: Austin Clements <amdragon@MIT.EDU>\r
39 To: notmuch@notmuchmail.org\r
40 Subject: [PATCH 5/5] show: Convert raw format to the new self-recursive style\r
41 Date: Sat,  3 Mar 2012 00:20:25 -0500\r
42 Message-Id: <1330752025-2542-6-git-send-email-amdragon@mit.edu>\r
43 X-Mailer: git-send-email 1.7.7.3\r
44 In-Reply-To: <1330752025-2542-1-git-send-email-amdragon@mit.edu>\r
45 References: <1330752025-2542-1-git-send-email-amdragon@mit.edu>\r
46 X-Brightmail-Tracker:\r
47  H4sIAAAAAAAAA+NgFtrMIsWRmVeSWpSXmKPExsUixG6noqu4KtDfoH0ri8X1mzOZHRg9nq26\r
48         xRzAGMVlk5Kak1mWWqRvl8CV0XRnFUvBN9+Kv5vfMTcw/rPrYuTkkBAwkTj2eCU7hC0mceHe\r
49         erYuRi4OIYF9jBJbl99hgXDWM0rcXt7CDuHcY5LYeOQAE4Qzn1Gic9cPJpB+NgENiW37lzOC\r
50         2CIC0hI7785m7WLk4GAWUJP406UCEhYW8JW4/mEO2DoWAVWJJzOfM4PYvAL2Eo+mT2OFOENB\r
51         4tzqc2A1nAIOEi3Hj4HFhYBqfvR3skxg5F/AyLCKUTYlt0o3NzEzpzg1Wbc4OTEvL7VI10gv\r
52         N7NELzWldBMjKGw4JXl3ML47qHSIUYCDUYmH9+LLAH8h1sSy4srcQ4ySHExKorzlywP9hfiS\r
53         8lMqMxKLM+KLSnNSiw8xSnAwK4nwLvMEyvGmJFZWpRblw6SkOViUxHlVtd75CQmkJ5akZqem\r
54         FqQWwWRlODiUJHijVgI1ChalpqdWpGXmlCCkmTg4QYbzAA33AKnhLS5IzC3OTIfIn2JUlBLn\r
55         zQVJCIAkMkrz4Hphcf2KURzoFWHeAJAqHmBKgOt+BTSYCWjw4st+IINLEhFSUg2M01VlxD2P\r
56         7VA7IO8619/lZd+/yxbffsZabZZ5lG1p5VAYFqlQ+7J7/4WSeVIlZ92jblysijykbbhs8WJW\r
57         np4vcpxmv/deaGuRWLc02evHHK9pR9Ym8nyeKeVvNjGBrYhNMV37lFiuwv+Q4CT96LeV+bEC\r
58         gRL3dtxdWfx/luLU/MctO3/JGsgpsRRnJBpqMRcVJwIAJION5sYCAAA=\r
59 X-BeenThere: notmuch@notmuchmail.org\r
60 X-Mailman-Version: 2.1.13\r
61 Precedence: list\r
62 List-Id: "Use and development of the notmuch mail system."\r
63         <notmuch.notmuchmail.org>\r
64 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
65         <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
66 List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
67 List-Post: <mailto:notmuch@notmuchmail.org>\r
68 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
69 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
70         <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
71 X-List-Received-Date: Sat, 03 Mar 2012 05:20:43 -0000\r
72 \r
73 This is fully compatible for root and leaf parts, but drops support\r
74 for interior parts.  Showing interior parts in raw has always been\r
75 braindead broken, so I don't think anyone will miss this.  Tests have\r
76 been updated to reflect this.\r
77 \r
78 The diff looks complicated, but the change is simple.  We delete\r
79 format_headers_message_part_text, since it's no longer needed; move\r
80 the special-case code for --part=0 that used to be in do_show_single\r
81 to format_part_raw; and re-indent the code for formatting leaf parts\r
82 in format_part_raw.\r
83 ---\r
84  notmuch-show.c |  165 ++++++++++++++++++++++----------------------------------\r
85  test/multipart |   51 ++++--------------\r
86  2 files changed, 76 insertions(+), 140 deletions(-)\r
87 \r
88 diff --git a/notmuch-show.c b/notmuch-show.c\r
89 index 6f6052c..9c2f890 100644\r
90 --- a/notmuch-show.c\r
91 +++ b/notmuch-show.c\r
92 @@ -20,9 +20,6 @@\r
93  \r
94  #include "notmuch-client.h"\r
95  \r
96 -static void\r
97 -format_headers_message_part_text (GMimeMessage *message);\r
98 -\r
99  static notmuch_status_t\r
100  format_part_text (const void *ctx, mime_node_t *node,\r
101                   int indent, const notmuch_show_params_t *params);\r
102 @@ -56,23 +53,16 @@ static const notmuch_show_format_t format_mbox = {\r
103      .message_set_end = ""\r
104  };\r
105  \r
106 -static void\r
107 -format_part_content_raw (GMimeObject *part);\r
108 +static notmuch_status_t\r
109 +format_part_raw (unused (const void *ctx), mime_node_t *node,\r
110 +                unused (int indent),\r
111 +                unused (const notmuch_show_params_t *params));\r
112  \r
113  static const notmuch_show_format_t format_raw = {\r
114 -    "", NULL,\r
115 -       "", NULL,\r
116 -           "", NULL, format_headers_message_part_text, "\n",\r
117 -            "",\r
118 -                NULL,\r
119 -                NULL,\r
120 -                NULL,\r
121 -                format_part_content_raw,\r
122 -                NULL,\r
123 -                "",\r
124 -            "",\r
125 -       "", "",\r
126 -    ""\r
127 +    .message_set_start = "",\r
128 +    .part = format_part_raw,\r
129 +    .message_set_sep = "",\r
130 +    .message_set_end = ""\r
131  };\r
132  \r
133  static const char *\r
134 @@ -210,27 +200,6 @@ _is_from_line (const char *line)\r
135  }\r
136  \r
137  static void\r
138 -format_headers_message_part_text (GMimeMessage *message)\r
139 -{\r
140 -    InternetAddressList *recipients;\r
141 -    const char *recipients_string;\r
142 -\r
143 -    printf ("Subject: %s\n", g_mime_message_get_subject (message));\r
144 -    printf ("From: %s\n", g_mime_message_get_sender (message));\r
145 -    recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO);\r
146 -    recipients_string = internet_address_list_to_string (recipients, 0);\r
147 -    if (recipients_string)\r
148 -       printf ("To: %s\n",\r
149 -               recipients_string);\r
150 -    recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_CC);\r
151 -    recipients_string = internet_address_list_to_string (recipients, 0);\r
152 -    if (recipients_string)\r
153 -       printf ("Cc: %s\n",\r
154 -               recipients_string);\r
155 -    printf ("Date: %s\n", g_mime_message_get_date_as_string (message));\r
156 -}\r
157 -\r
158 -static void\r
159  format_headers_json (const void *ctx, GMimeMessage *message)\r
160  {\r
161      void *local = talloc_new (ctx);\r
162 @@ -731,31 +700,70 @@ format_part_mbox (const void *ctx, mime_node_t *node, unused (int indent),\r
163      return NOTMUCH_STATUS_SUCCESS;\r
164  }\r
165  \r
166 -static void\r
167 -format_part_content_raw (GMimeObject *part)\r
168 +static notmuch_status_t\r
169 +format_part_raw (unused (const void *ctx), mime_node_t *node,\r
170 +                unused (int indent),\r
171 +                unused (const notmuch_show_params_t *params))\r
172  {\r
173 -    if (! GMIME_IS_PART (part))\r
174 -       return;\r
175 +    if (node->envelope_file) {\r
176 +       const char *filename;\r
177 +       FILE *file;\r
178 +       size_t size;\r
179 +       char buf[4096];\r
180  \r
181 -    GMimeStream *stream_stdout;\r
182 -    GMimeStream *stream_filter = NULL;\r
183 -    GMimeDataWrapper *wrapper;\r
184 +       filename = notmuch_message_get_filename (node->envelope_file);\r
185 +       if (filename == NULL) {\r
186 +           fprintf (stderr, "Error: Cannot get message filename.\n");\r
187 +           return NOTMUCH_STATUS_FILE_ERROR;\r
188 +       }\r
189  \r
190 -    stream_stdout = g_mime_stream_file_new (stdout);\r
191 -    g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream_stdout), FALSE);\r
192 +       file = fopen (filename, "r");\r
193 +       if (file == NULL) {\r
194 +           fprintf (stderr, "Error: Cannot open file %s: %s\n", filename, strerror (errno));\r
195 +           return NOTMUCH_STATUS_FILE_ERROR;\r
196 +       }\r
197  \r
198 -    stream_filter = g_mime_stream_filter_new (stream_stdout);\r
199 +       while (!feof (file)) {\r
200 +           size = fread (buf, 1, sizeof (buf), file);\r
201 +           if (ferror (file)) {\r
202 +               fprintf (stderr, "Error: Read failed from %s\n", filename);\r
203 +               fclose (file);\r
204 +               return NOTMUCH_STATUS_FILE_ERROR;\r
205 +           }\r
206  \r
207 -    wrapper = g_mime_part_get_content_object (GMIME_PART (part));\r
208 +           if (fwrite (buf, size, 1, stdout) != 1) {\r
209 +               fprintf (stderr, "Error: Write failed\n");\r
210 +               fclose (file);\r
211 +               return NOTMUCH_STATUS_FILE_ERROR;\r
212 +           }\r
213 +       }\r
214  \r
215 -    if (wrapper && stream_filter)\r
216 -       g_mime_data_wrapper_write_to_stream (wrapper, stream_filter);\r
217 +       fclose (file);\r
218 +    } else if (GMIME_IS_PART (node->part)) {\r
219 +       GMimeStream *stream_stdout;\r
220 +       GMimeStream *stream_filter = NULL;\r
221 +       GMimeDataWrapper *wrapper;\r
222  \r
223 -    if (stream_filter)\r
224 -       g_object_unref (stream_filter);\r
225 +       stream_stdout = g_mime_stream_file_new (stdout);\r
226 +       g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream_stdout), FALSE);\r
227  \r
228 -    if (stream_stdout)\r
229 -       g_object_unref(stream_stdout);\r
230 +       stream_filter = g_mime_stream_filter_new (stream_stdout);\r
231 +\r
232 +       wrapper = g_mime_part_get_content_object (GMIME_PART (node->part));\r
233 +\r
234 +       if (wrapper && stream_filter)\r
235 +           g_mime_data_wrapper_write_to_stream (wrapper, stream_filter);\r
236 +\r
237 +       if (stream_filter)\r
238 +           g_object_unref (stream_filter);\r
239 +\r
240 +       if (stream_stdout)\r
241 +           g_object_unref(stream_stdout);\r
242 +    } else {\r
243 +       fprintf (stderr, "Error: Raw only supports root and leaf parts\n");\r
244 +       return NOTMUCH_STATUS_FILE_ERROR;\r
245 +    }\r
246 +    return NOTMUCH_STATUS_SUCCESS;\r
247  }\r
248  \r
249  static notmuch_status_t\r
250 @@ -891,50 +899,7 @@ do_show_single (void *ctx,\r
251  \r
252      notmuch_message_set_flag (message, NOTMUCH_MESSAGE_FLAG_MATCH, 1);\r
253  \r
254 -    /* Special case for --format=raw of full single message, just cat out file */\r
255 -    if (params->raw && 0 == params->part) {\r
256 -\r
257 -       const char *filename;\r
258 -       FILE *file;\r
259 -       size_t size;\r
260 -       char buf[4096];\r
261 -\r
262 -       filename = notmuch_message_get_filename (message);\r
263 -       if (filename == NULL) {\r
264 -           fprintf (stderr, "Error: Cannot message filename.\n");\r
265 -           return 1;\r
266 -       }\r
267 -\r
268 -       file = fopen (filename, "r");\r
269 -       if (file == NULL) {\r
270 -           fprintf (stderr, "Error: Cannot open file %s: %s\n", filename, strerror (errno));\r
271 -           return 1;\r
272 -       }\r
273 -\r
274 -       while (!feof (file)) {\r
275 -           size = fread (buf, 1, sizeof (buf), file);\r
276 -           if (ferror (file)) {\r
277 -               fprintf (stderr, "Error: Read failed from %s\n", filename);\r
278 -               fclose (file);\r
279 -               return 1;\r
280 -           }\r
281 -\r
282 -           if (fwrite (buf, size, 1, stdout) != 1) {\r
283 -               fprintf (stderr, "Error: Write failed\n");\r
284 -               fclose (file);\r
285 -               return 1;\r
286 -           }\r
287 -       }\r
288 -\r
289 -       fclose (file);\r
290 -\r
291 -       return 0;\r
292 -\r
293 -    } else {\r
294 -\r
295 -       return show_message (ctx, format, message, 0, params) != NOTMUCH_STATUS_SUCCESS;\r
296 -\r
297 -    }\r
298 +    return show_message (ctx, format, message, 0, params) != NOTMUCH_STATUS_SUCCESS;\r
299  }\r
300  \r
301  /* Formatted output of threads */\r
302 diff --git a/test/multipart b/test/multipart\r
303 index a3036b4..cb16b43 100755\r
304 --- a/test/multipart\r
305 +++ b/test/multipart\r
306 @@ -448,59 +448,30 @@ notmuch show --format=raw --part=0 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUT\r
307  test_expect_equal_file OUTPUT "${MAIL_DIR}"/multipart\r
308  \r
309  test_begin_subtest "--format=raw --part=1, message body"\r
310 -notmuch show --format=raw --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT\r
311 -# output should *not* include newline\r
312 -echo >>OUTPUT\r
313 +notmuch show --format=raw --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org' >&OUTPUT\r
314  cat <<EOF >EXPECTED\r
315 -Subject: html message\r
316 -From: Carl Worth <cworth@cworth.org>\r
317 -To: cworth@cworth.org\r
318 -Date: Fri, 05 Jan 2001 15:42:57 +0000\r
319 -\r
320 -<p>This is an embedded message, with a multipart/alternative part.</p>\r
321 -This is an embedded message, with a multipart/alternative part.\r
322 -This is a text attachment.\r
323 -And this message is signed.\r
324 -\r
325 --Carl\r
326 ------BEGIN PGP SIGNATURE-----\r
327 -Version: GnuPG v1.4.11 (GNU/Linux)\r
328 -\r
329 -iEYEARECAAYFAk3SA/gACgkQ6JDdNq8qSWj0sACghqVJEQJUs3yV8zbTzhgnSIcD\r
330 -W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE\r
331 -=zkga\r
332 ------END PGP SIGNATURE-----\r
333 +Error: Raw only supports root and leaf parts\r
334  EOF\r
335  test_expect_equal_file OUTPUT EXPECTED\r
336  \r
337  test_begin_subtest "--format=raw --part=2, multipart/mixed"\r
338 -notmuch show --format=raw --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT\r
339 +notmuch show --format=raw --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org' >&OUTPUT\r
340  cat <<EOF >EXPECTED\r
341 -Subject: html message\r
342 -From: Carl Worth <cworth@cworth.org>\r
343 -To: cworth@cworth.org\r
344 -Date: Fri, 05 Jan 2001 15:42:57 +0000\r
345 -\r
346 -<p>This is an embedded message, with a multipart/alternative part.</p>\r
347 -This is an embedded message, with a multipart/alternative part.\r
348 -This is a text attachment.\r
349 -And this message is signed.\r
350 -\r
351 --Carl\r
352 +Error: Raw only supports root and leaf parts\r
353  EOF\r
354  test_expect_equal_file OUTPUT EXPECTED\r
355  \r
356  test_begin_subtest "--format=raw --part=3, rfc822 part"\r
357 -test_subtest_known_broken\r
358 -\r
359 -notmuch show --format=raw --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT\r
360 -test_expect_equal_file OUTPUT embedded_message\r
361 +notmuch show --format=raw --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org' >&OUTPUT\r
362 +cat <<EOF >EXPECTED\r
363 +Error: Raw only supports root and leaf parts\r
364 +EOF\r
365 +test_expect_equal_file OUTPUT EXPECTED\r
366  \r
367  test_begin_subtest "--format=raw --part=4, rfc822's html part"\r
368 -notmuch show --format=raw --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT\r
369 +notmuch show --format=raw --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org' >&OUTPUT\r
370  cat <<EOF >EXPECTED\r
371 -<p>This is an embedded message, with a multipart/alternative part.</p>\r
372 -This is an embedded message, with a multipart/alternative part.\r
373 +Error: Raw only supports root and leaf parts\r
374  EOF\r
375  test_expect_equal_file OUTPUT EXPECTED\r
376  \r
377 -- \r
378 1.7.7.3\r
379 \r