unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
* [PATCH v2 0/4] Add a --body option to notmuch show
@ 2012-07-23 17:57 Mark Walters
  2012-07-23 17:57 ` [PATCH v2 1/4] cli: add --body=true|false option to notmuch-show.c Mark Walters
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: Mark Walters @ 2012-07-23 17:57 UTC (permalink / raw)
  To: notmuch

Version 2 of this patch set (version 1 at
id:"1343060241-18283-1-git-send-email-markwalters1009@gmail.com"). This
corrects the errors Austin spotted in v1, and makes it explicit that
--body=false and --part>0 are incompatible.


Mark Walters (4):
  cli: add --body=true|false option to notmuch-show.c
  test: add tests for the new --body=true|false option
  man: update man page for the new --body=true|false option
  schemata: update for --body=true|false option

 devel/schemata          |    2 +-
 man/man1/notmuch-show.1 |   16 ++++++++++++++++
 notmuch-client.h        |    3 ++-
 notmuch-reply.c         |    2 +-
 notmuch-show.c          |   30 ++++++++++++++++++++++--------
 test/json               |    9 +++++++++
 6 files changed, 51 insertions(+), 11 deletions(-)

-- 
1.7.9.1

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v2 1/4] cli: add --body=true|false option to notmuch-show.c
  2012-07-23 17:57 [PATCH v2 0/4] Add a --body option to notmuch show Mark Walters
@ 2012-07-23 17:57 ` Mark Walters
  2012-07-23 17:57 ` [PATCH v2 2/4] test: add tests for the new --body=true|false option Mark Walters
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Mark Walters @ 2012-07-23 17:57 UTC (permalink / raw)
  To: notmuch

This option allows the caller to suppress the output of the bodies of
the messages. Currently this is only implemented for format=json.

This is used by notmuch-pick.el (although not needed) because it gives
a speed-up of at least a factor of a two (and in some cases a speed up
of more than a factor of 8); moreover it reduces the memory usage in
emacs hugely.
---
 notmuch-client.h |    3 ++-
 notmuch-reply.c  |    2 +-
 notmuch-show.c   |   30 ++++++++++++++++++++++--------
 3 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/notmuch-client.h b/notmuch-client.h
index 0c17b79..f930798 100644
--- a/notmuch-client.h
+++ b/notmuch-client.h
@@ -87,6 +87,7 @@ typedef struct notmuch_crypto {
 typedef struct notmuch_show_params {
     notmuch_bool_t entire_thread;
     notmuch_bool_t omit_excluded;
+    notmuch_bool_t output_body;
     notmuch_bool_t raw;
     int part;
     notmuch_crypto_t crypto;
@@ -176,7 +177,7 @@ notmuch_status_t
 show_one_part (const char *filename, int part);
 
 void
-format_part_json (const void *ctx, mime_node_t *node, notmuch_bool_t first);
+format_part_json (const void *ctx, mime_node_t *node, notmuch_bool_t first, notmuch_bool_t output_body);
 
 void
 format_headers_json (const void *ctx, GMimeMessage *message, notmuch_bool_t reply);
diff --git a/notmuch-reply.c b/notmuch-reply.c
index 3a038ed..de21f3b 100644
--- a/notmuch-reply.c
+++ b/notmuch-reply.c
@@ -620,7 +620,7 @@ notmuch_reply_format_json(void *ctx,
     /* Start the original */
     printf (", \"original\": ");
 
-    format_part_json (ctx, node, TRUE);
+    format_part_json (ctx, node, TRUE, TRUE);
 
     /* End */
     printf ("}\n");
diff --git a/notmuch-show.c b/notmuch-show.c
index 8f3c60e..d3419e4 100644
--- a/notmuch-show.c
+++ b/notmuch-show.c
@@ -559,7 +559,7 @@ format_part_text (const void *ctx, mime_node_t *node,
 }
 
 void
-format_part_json (const void *ctx, mime_node_t *node, notmuch_bool_t first)
+format_part_json (const void *ctx, mime_node_t *node, notmuch_bool_t first, notmuch_bool_t output_body)
 {
     /* Any changes to the JSON format should be reflected in the file
      * devel/schemata. */
@@ -571,10 +571,12 @@ format_part_json (const void *ctx, mime_node_t *node, notmuch_bool_t first)
 	printf ("\"headers\": ");
 	format_headers_json (ctx, GMIME_MESSAGE (node->part), FALSE);
 
-	printf (", \"body\": [");
-	format_part_json (ctx, mime_node_child (node, 0), first);
-
-	printf ("]}");
+	if (output_body) {
+	    printf (", \"body\": [");
+	    format_part_json (ctx, mime_node_child (node, 0), first, TRUE);
+	    printf ("]");
+	}
+	printf ("}");
 	return;
     }
 
@@ -652,16 +654,16 @@ format_part_json (const void *ctx, mime_node_t *node, notmuch_bool_t first)
     talloc_free (local);
 
     for (i = 0; i < node->nchildren; i++)
-	format_part_json (ctx, mime_node_child (node, i), i == 0);
+	format_part_json (ctx, mime_node_child (node, i), i == 0, TRUE);
 
     printf ("%s}", terminator);
 }
 
 static notmuch_status_t
 format_part_json_entry (const void *ctx, mime_node_t *node, unused (int indent),
-			unused (const notmuch_show_params_t *params))
+			const notmuch_show_params_t *params)
 {
-    format_part_json (ctx, node, TRUE);
+    format_part_json (ctx, node, TRUE, params->output_body);
 
     return NOTMUCH_STATUS_SUCCESS;
 }
@@ -1004,6 +1006,7 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[]))
     notmuch_show_params_t params = {
 	.part = -1,
 	.omit_excluded = TRUE,
+	.output_body = TRUE,
 	.crypto = {
 	    .verify = FALSE,
 	    .decrypt = FALSE
@@ -1032,6 +1035,7 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[]))
 	{ NOTMUCH_OPT_INT, &params.part, "part", 'p', 0 },
 	{ NOTMUCH_OPT_BOOLEAN, &params.crypto.decrypt, "decrypt", 'd', 0 },
 	{ NOTMUCH_OPT_BOOLEAN, &params.crypto.verify, "verify", 'v', 0 },
+	{ NOTMUCH_OPT_BOOLEAN, &params.output_body, "body", 'b', 0 },
 	{ 0, 0, 0, 0, 0 }
     };
 
@@ -1086,6 +1090,16 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[]))
 	    entire_thread = ENTIRE_THREAD_FALSE;
     }
 
+    if (!params.output_body) {
+	if (params.part > 0) {
+	    fprintf (stderr, "Warning: --body=false is incompatible with --part > 0. Disabling.\n");
+	    params.output_body = TRUE;
+	} else {
+	    if (format != &format_json)
+		fprintf (stderr, "Warning: --body=false only implemented for format=json\n");
+	}
+    }
+
     if (entire_thread == ENTIRE_THREAD_TRUE)
 	params.entire_thread = TRUE;
     else
-- 
1.7.9.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 2/4] test: add tests for the new --body=true|false option
  2012-07-23 17:57 [PATCH v2 0/4] Add a --body option to notmuch show Mark Walters
  2012-07-23 17:57 ` [PATCH v2 1/4] cli: add --body=true|false option to notmuch-show.c Mark Walters
@ 2012-07-23 17:57 ` Mark Walters
  2012-07-23 17:57 ` [PATCH v2 3/4] man: update man page " Mark Walters
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Mark Walters @ 2012-07-23 17:57 UTC (permalink / raw)
  To: notmuch

---
 test/json |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/test/json b/test/json
index 6439788..709b34f 100755
--- a/test/json
+++ b/test/json
@@ -7,6 +7,15 @@ add_message "[subject]=\"json-show-subject\"" "[date]=\"Sat, 01 Jan 2000 12:00:0
 output=$(notmuch show --format=json "json-show-message")
 test_expect_equal "$output" "[[[{\"id\": \"${gen_msg_id}\", \"match\": true, \"excluded\": false, \"filename\": \"${gen_msg_filename}\", \"timestamp\": 946728000, \"date_relative\": \"2000-01-01\", \"tags\": [\"inbox\",\"unread\"], \"headers\": {\"Subject\": \"json-show-subject\", \"From\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"To\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"Date\": \"Sat, 01 Jan 2000 12:00:00 +0000\"}, \"body\": [{\"id\": 1, \"content-type\": \"text/plain\", \"content\": \"json-show-message\n\"}]}, []]]]"
 
+# This should be the same output as above.
+test_begin_subtest "Show message: json --body=true"
+output=$(notmuch show --format=json --body=true "json-show-message")
+test_expect_equal "$output" "[[[{\"id\": \"${gen_msg_id}\", \"match\": true, \"excluded\": false, \"filename\": \"${gen_msg_filename}\", \"timestamp\": 946728000, \"date_relative\": \"2000-01-01\", \"tags\": [\"inbox\",\"unread\"], \"headers\": {\"Subject\": \"json-show-subject\", \"From\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"To\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"Date\": \"Sat, 01 Jan 2000 12:00:00 +0000\"}, \"body\": [{\"id\": 1, \"content-type\": \"text/plain\", \"content\": \"json-show-message\n\"}]}, []]]]"
+
+test_begin_subtest "Show message: json --body=false"
+output=$(notmuch show --format=json --body=false "json-show-message")
+test_expect_equal "$output" "[[[{\"id\": \"${gen_msg_id}\", \"match\": true, \"excluded\": false, \"filename\": \"${gen_msg_filename}\", \"timestamp\": 946728000, \"date_relative\": \"2000-01-01\", \"tags\": [\"inbox\",\"unread\"], \"headers\": {\"Subject\": \"json-show-subject\", \"From\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"To\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"Date\": \"Sat, 01 Jan 2000 12:00:00 +0000\"}}, []]]]"
+
 test_begin_subtest "Search message: json"
 add_message "[subject]=\"json-search-subject\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[body]=\"json-search-message\""
 output=$(notmuch search --format=json "json-search-message" | notmuch_search_sanitize)
-- 
1.7.9.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 3/4] man: update man page for the new --body=true|false option
  2012-07-23 17:57 [PATCH v2 0/4] Add a --body option to notmuch show Mark Walters
  2012-07-23 17:57 ` [PATCH v2 1/4] cli: add --body=true|false option to notmuch-show.c Mark Walters
  2012-07-23 17:57 ` [PATCH v2 2/4] test: add tests for the new --body=true|false option Mark Walters
@ 2012-07-23 17:57 ` Mark Walters
  2012-07-23 17:57 ` [PATCH v2 4/4] schemata: update for " Mark Walters
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Mark Walters @ 2012-07-23 17:57 UTC (permalink / raw)
  To: notmuch

---
 man/man1/notmuch-show.1 |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/man/man1/notmuch-show.1 b/man/man1/notmuch-show.1
index 5fa590e..91c19d8 100644
--- a/man/man1/notmuch-show.1
+++ b/man/man1/notmuch-show.1
@@ -154,6 +154,22 @@ The default is
 
 .RE
 
+.RS 4
+.TP 4
+.B \-\-body=(true|false)
+
+If true (the default)
+.B notmuch show
+includes the bodies of the messages in the output; if false,
+bodies are omitted.
+.B --body=false
+is only implemented for the json format and it is incompatible with
+.B --part > 0.
+
+This is useful if the caller only needs the headers as body-less
+output is much faster and substantially smaller.
+.RE
+
 A common use of
 .B notmuch show
 is to display a single thread of email messages. For this, use a
-- 
1.7.9.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 4/4] schemata: update for --body=true|false option
  2012-07-23 17:57 [PATCH v2 0/4] Add a --body option to notmuch show Mark Walters
                   ` (2 preceding siblings ...)
  2012-07-23 17:57 ` [PATCH v2 3/4] man: update man page " Mark Walters
@ 2012-07-23 17:57 ` Mark Walters
  2012-07-23 18:34 ` [PATCH v2 0/4] Add a --body option to notmuch show Austin Clements
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Mark Walters @ 2012-07-23 17:57 UTC (permalink / raw)
  To: notmuch

Previously body: was a compulsory field in a message. The new
--body=false option causes notmuch show to omit this field so update
schemata to reflect this.
---
 devel/schemata |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/devel/schemata b/devel/schemata
index 6677a1c..9cb25f5 100644
--- a/devel/schemata
+++ b/devel/schemata
@@ -47,7 +47,7 @@ message = {
     tags:           [string*],
 
     headers:        headers,
-    body:           [part]
+    body?:          [part]    # omitted if --body=false
 }
 
 # A MIME part (format_part_json)
-- 
1.7.9.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 0/4] Add a --body option to notmuch show
  2012-07-23 17:57 [PATCH v2 0/4] Add a --body option to notmuch show Mark Walters
                   ` (3 preceding siblings ...)
  2012-07-23 17:57 ` [PATCH v2 4/4] schemata: update for " Mark Walters
@ 2012-07-23 18:34 ` Austin Clements
  2012-07-23 19:16 ` Jameson Graef Rollins
  2012-07-24 16:33 ` David Bremner
  6 siblings, 0 replies; 8+ messages in thread
From: Austin Clements @ 2012-07-23 18:34 UTC (permalink / raw)
  To: Mark Walters; +Cc: notmuch

LGTM.

Quoth Mark Walters on Jul 23 at  6:57 pm:
> Version 2 of this patch set (version 1 at
> id:"1343060241-18283-1-git-send-email-markwalters1009@gmail.com"). This
> corrects the errors Austin spotted in v1, and makes it explicit that
> --body=false and --part>0 are incompatible.
> 
> 
> Mark Walters (4):
>   cli: add --body=true|false option to notmuch-show.c
>   test: add tests for the new --body=true|false option
>   man: update man page for the new --body=true|false option
>   schemata: update for --body=true|false option
> 
>  devel/schemata          |    2 +-
>  man/man1/notmuch-show.1 |   16 ++++++++++++++++
>  notmuch-client.h        |    3 ++-
>  notmuch-reply.c         |    2 +-
>  notmuch-show.c          |   30 ++++++++++++++++++++++--------
>  test/json               |    9 +++++++++
>  6 files changed, 51 insertions(+), 11 deletions(-)
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 0/4] Add a --body option to notmuch show
  2012-07-23 17:57 [PATCH v2 0/4] Add a --body option to notmuch show Mark Walters
                   ` (4 preceding siblings ...)
  2012-07-23 18:34 ` [PATCH v2 0/4] Add a --body option to notmuch show Austin Clements
@ 2012-07-23 19:16 ` Jameson Graef Rollins
  2012-07-24 16:33 ` David Bremner
  6 siblings, 0 replies; 8+ messages in thread
From: Jameson Graef Rollins @ 2012-07-23 19:16 UTC (permalink / raw)
  To: Mark Walters, notmuch

[-- Attachment #1: Type: text/plain, Size: 910 bytes --]

On Mon, Jul 23 2012, Mark Walters <markwalters1009@gmail.com> wrote:
> Version 2 of this patch set (version 1 at
> id:"1343060241-18283-1-git-send-email-markwalters1009@gmail.com"). This
> corrects the errors Austin spotted in v1, and makes it explicit that
> --body=false and --part>0 are incompatible.
>
>
> Mark Walters (4):
>   cli: add --body=true|false option to notmuch-show.c
>   test: add tests for the new --body=true|false option
>   man: update man page for the new --body=true|false option
>   schemata: update for --body=true|false option
>
>  devel/schemata          |    2 +-
>  man/man1/notmuch-show.1 |   16 ++++++++++++++++
>  notmuch-client.h        |    3 ++-
>  notmuch-reply.c         |    2 +-
>  notmuch-show.c          |   30 ++++++++++++++++++++++--------
>  test/json               |    9 +++++++++
>  6 files changed, 51 insertions(+), 11 deletions(-)

Untested, but LGTM.

jamie.

[-- Attachment #2: Type: application/pgp-signature, Size: 835 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 0/4] Add a --body option to notmuch show
  2012-07-23 17:57 [PATCH v2 0/4] Add a --body option to notmuch show Mark Walters
                   ` (5 preceding siblings ...)
  2012-07-23 19:16 ` Jameson Graef Rollins
@ 2012-07-24 16:33 ` David Bremner
  6 siblings, 0 replies; 8+ messages in thread
From: David Bremner @ 2012-07-24 16:33 UTC (permalink / raw)
  To: Mark Walters, notmuch

Mark Walters <markwalters1009@gmail.com> writes:

> Version 2 of this patch set (version 1 at
> id:"1343060241-18283-1-git-send-email-markwalters1009@gmail.com"). This
> corrects the errors Austin spotted in v1, and makes it explicit that
> --body=false and --part>0 are incompatible.

2/4 doesn't apply anymore to current master, and I was a bit leery of
resolving conflicts in the tests; can you rebase and resend? no need for
review of the rebased series.

d

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2012-07-24 16:33 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-23 17:57 [PATCH v2 0/4] Add a --body option to notmuch show Mark Walters
2012-07-23 17:57 ` [PATCH v2 1/4] cli: add --body=true|false option to notmuch-show.c Mark Walters
2012-07-23 17:57 ` [PATCH v2 2/4] test: add tests for the new --body=true|false option Mark Walters
2012-07-23 17:57 ` [PATCH v2 3/4] man: update man page " Mark Walters
2012-07-23 17:57 ` [PATCH v2 4/4] schemata: update for " Mark Walters
2012-07-23 18:34 ` [PATCH v2 0/4] Add a --body option to notmuch show Austin Clements
2012-07-23 19:16 ` Jameson Graef Rollins
2012-07-24 16:33 ` David Bremner

Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).