[PATCH 1/2] cli: notmuch show support for --body=false with --format=text

2018-10-30 Thread mawww
From: Maxime Coste 

---
 NEWS  |  8 
 doc/man1/notmuch-show.rst |  4 ++--
 notmuch-show.c| 11 +--
 test/T190-multipart.sh| 15 +++
 4 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/NEWS b/NEWS
index ca3ba99e..64de 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,11 @@
+Notmuch 0.29 (UNRELEASED)
+=
+
+Command Line Interface
+--
+
+`notmuch show` now supports --body=false with --format=text
+
 Notmuch 0.28 (2018-10-12)
 =
 
diff --git a/doc/man1/notmuch-show.rst b/doc/man1/notmuch-show.rst
index 8bfa87c6..f3c32fd2 100644
--- a/doc/man1/notmuch-show.rst
+++ b/doc/man1/notmuch-show.rst
@@ -176,8 +176,8 @@ Supported options for **show** include
 ``--body=(true|false)``
 If true (the default) **notmuch show** includes the bodies of the
 messages in the output; if false, bodies are omitted.
-``--body=false`` is only implemented for the json and sexp formats
-and it is incompatible with ``--part > 0.``
+``--body=false`` is only implemented for the text, json and sexp
+formats and it is incompatible with ``--part > 0.``
 
 This is useful if the caller only needs the headers as body-less
 output is much faster and substantially smaller.
diff --git a/notmuch-show.c b/notmuch-show.c
index c3a3783a..42fe27cc 100644
--- a/notmuch-show.c
+++ b/notmuch-show.c
@@ -574,6 +574,11 @@ format_part_text (const void *ctx, sprinter_t *sp, 
mime_node_t *node,
g_mime_stream_printf (stream, "Date: %s\n", date_string);
g_mime_stream_printf (stream, "\fheader}\n");
 
+   if (!params->output_body)
+   {
+   g_mime_stream_printf (stream, "\f%s}\n", part_type);
+   return NOTMUCH_STATUS_SUCCESS;
+   }
g_mime_stream_printf (stream, "\fbody{\n");
 }
 
@@ -1204,9 +1209,11 @@ notmuch_show_command (notmuch_config_t *config, int 
argc, char *argv[])
fprintf (stderr, "Warning: --body=false is incompatible with --part 
> 0. Disabling.\n");
params.output_body = true;
} else {
-   if (format != NOTMUCH_FORMAT_JSON && format != NOTMUCH_FORMAT_SEXP)
+   if (format != NOTMUCH_FORMAT_TEXT &&
+   format != NOTMUCH_FORMAT_JSON &&
+   format != NOTMUCH_FORMAT_SEXP)
fprintf (stderr,
-"Warning: --body=false only implemented for 
format=json and format=sexp\n");
+"Warning: --body=false only implemented for 
format=text, format=json and format=sexp\n");
}
 }
 
diff --git a/test/T190-multipart.sh b/test/T190-multipart.sh
index 3eeac1db..81c4d772 100755
--- a/test/T190-multipart.sh
+++ b/test/T190-multipart.sh
@@ -190,6 +190,21 @@ Non-text part: application/pgp-signature
 EOF
 test_expect_equal_file EXPECTED OUTPUT
 
+test_begin_subtest "--format=text --part=0 --body=false, message header"
+notmuch show --format=text --part=0  --body=false 
'id:87liy5ap00@yoom.home.cworth.org' >OUTPUT
+cat OUTPUT
 cat 

Re: [PATCH] cli: Support --include-html and --body=false for --format=text

2018-10-25 Thread mawww

On 2018-10-26 05:55, Jani Nikula wrote:

It's debatable whether parsing the --format=text output correctly is
convenient or not. Particularly for notmuch show I think the text 
format

output is basically legacy, and I don't think we're all that fond of
adding new features to it.


I would argue that it is easier to work with with shell tools than
sexpression or json, but even if it was not, this change is pretty 
trivial

and does not add a brand new feature to the text format, it just makes
it possible to use existing features (include-html and body=false) with 
it.



In any case, this patch has two independent changes in one, and should
be split.


Following are the splitted commits.

From afd74f5a7506704d4459d01a4d347d8b57293cc5 Mon Sep 17 00:00:00 2001
From: Maxime Coste 
Date: Fri, 26 Oct 2018 13:01:24 +1100
Subject: [PATCH 1/2] cli: notmuch show support for --body=false with
 --format=text

---
 NEWS  |  8 
 doc/man1/notmuch-show.rst |  4 ++--
 notmuch-show.c| 11 +--
 test/T190-multipart.sh| 15 +++
 4 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/NEWS b/NEWS
index ca3ba99e..64de 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,11 @@
+Notmuch 0.29 (UNRELEASED)
+=
+
+Command Line Interface
+--
+
+`notmuch show` now supports --body=false with --format=text
+
 Notmuch 0.28 (2018-10-12)
 =

diff --git a/doc/man1/notmuch-show.rst b/doc/man1/notmuch-show.rst
index 8bfa87c6..f3c32fd2 100644
--- a/doc/man1/notmuch-show.rst
+++ b/doc/man1/notmuch-show.rst
@@ -176,8 +176,8 @@ Supported options for **show** include
 ``--body=(true|false)``
 If true (the default) **notmuch show** includes the bodies of the
 messages in the output; if false, bodies are omitted.
-``--body=false`` is only implemented for the json and sexp formats
-and it is incompatible with ``--part > 0.``
+``--body=false`` is only implemented for the text, json and sexp
+formats and it is incompatible with ``--part > 0.``

 This is useful if the caller only needs the headers as body-less
 output is much faster and substantially smaller.
diff --git a/notmuch-show.c b/notmuch-show.c
index c3a3783a..42fe27cc 100644
--- a/notmuch-show.c
+++ b/notmuch-show.c
@@ -574,6 +574,11 @@ format_part_text (const void *ctx, sprinter_t *sp, 
mime_node_t *node,

g_mime_stream_printf (stream, "Date: %s\n", date_string);
g_mime_stream_printf (stream, "\fheader}\n");

+   if (!params->output_body)
+   {
+   g_mime_stream_printf (stream, "\f%s}\n", part_type);
+   return NOTMUCH_STATUS_SUCCESS;
+   }
g_mime_stream_printf (stream, "\fbody{\n");
 }

@@ -1204,9 +1209,11 @@ notmuch_show_command (notmuch_config_t *config, 
int argc, char *argv[])
 	fprintf (stderr, "Warning: --body=false is incompatible with 
--part > 0. Disabling.\n");

params.output_body = true;
} else {
-	if (format != NOTMUCH_FORMAT_JSON && format != 
NOTMUCH_FORMAT_SEXP)

+   if (format != NOTMUCH_FORMAT_TEXT &&
+   format != NOTMUCH_FORMAT_JSON &&
+   format != NOTMUCH_FORMAT_SEXP)
fprintf (stderr,
-			 "Warning: --body=false only implemented for format=json and 
format=sexp\n");
+			 "Warning: --body=false only implemented for format=text, 
format=json and format=sexp\n");

}
 }

diff --git a/test/T190-multipart.sh b/test/T190-multipart.sh
index 3eeac1db..81c4d772 100755
--- a/test/T190-multipart.sh
+++ b/test/T190-multipart.sh
@@ -190,6 +190,21 @@ Non-text part: application/pgp-signature
 EOF
 test_expect_equal_file EXPECTED OUTPUT

+test_begin_subtest "--format=text --part=0 --body=false, message 
header"
+notmuch show --format=text --part=0  --body=false 
'id:87liy5ap00@yoom.home.cworth.org' >OUTPUT

+cat OUTPUT

 cat 

[PATCH] cli: Support --include-html and --body=false for --format=text

2018-10-24 Thread mawww

text format is convenient for shell based parsing of notmuch output,
adding support for --include-html and --body=false improves its
usefulness to write complex shell based scripts.
---
 NEWS  |  9 +
 doc/man1/notmuch-show.rst | 15 ---
 notmuch-show.c| 20 +++-
 test/T190-multipart.sh| 24 
 4 files changed, 56 insertions(+), 12 deletions(-)

diff --git a/NEWS b/NEWS
index ca3ba99e..6d7e7162 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,12 @@
+Notmuch 0.29 (UNRELEASED)
+=
+
+Command Line Interface
+--
+
+`notmuch show` now supports --include-html and --body=false with
+--format=text
+
 Notmuch 0.28 (2018-10-12)
 =

diff --git a/doc/man1/notmuch-show.rst b/doc/man1/notmuch-show.rst
index 8bfa87c6..a2708a04 100644
--- a/doc/man1/notmuch-show.rst
+++ b/doc/man1/notmuch-show.rst
@@ -176,18 +176,19 @@ Supported options for **show** include
 ``--body=(true|false)``
 If true (the default) **notmuch show** includes the bodies of the
 messages in the output; if false, bodies are omitted.
-``--body=false`` is only implemented for the json and sexp formats
-and it is incompatible with ``--part > 0.``
+``--body=false`` is only implemented for the text, json and sexp
+formats and it is incompatible with ``--part > 0.``

 This is useful if the caller only needs the headers as body-less
 output is much faster and substantially smaller.

 ``--include-html``
-Include "text/html" parts as part of the output (currently only
-supported with ``--format=json`` and ``--format=sexp``). By 
default,

-unless ``--part=N`` is used to select a specific part or
-``--include-html`` is used to include all "text/html" parts, no
-part with content type "text/html" is included in the output.
+Include "text/html" parts as part of the output (currently
+only supported with ``--format=text``, ``--format=json`` and
+``--format=sexp``). By default, unless ``--part=N`` is used to
+select a specific part or ``--include-html`` is used to include all
+"text/html" parts, no part with content type "text/html" is 
included

+in the output.

 A common use of **notmuch show** is to display a single thread of email
 messages. For this, use a search term of "thread:" as can be
diff --git a/notmuch-show.c b/notmuch-show.c
index c3a3783a..07e9a5db 100644
--- a/notmuch-show.c
+++ b/notmuch-show.c
@@ -574,12 +574,18 @@ format_part_text (const void *ctx, sprinter_t *sp, 
mime_node_t *node,

g_mime_stream_printf (stream, "Date: %s\n", date_string);
g_mime_stream_printf (stream, "\fheader}\n");

+   if (!params->output_body)
+   {
+   g_mime_stream_printf (stream, "\f%s}\n", part_type);
+   return NOTMUCH_STATUS_SUCCESS;
+   }
g_mime_stream_printf (stream, "\fbody{\n");
 }

 if (leaf) {
if (g_mime_content_type_is_type (content_type, "text", "*") &&
-   !g_mime_content_type_is_type (content_type, "text", "html"))
+   (params->include_html ||
+! g_mime_content_type_is_type (content_type, "text", "html")))
{
show_text_part_content (node->part, stream, 0);
} else {
@@ -1204,15 +1210,19 @@ notmuch_show_command (notmuch_config_t *config, 
int argc, char *argv[])
 	fprintf (stderr, "Warning: --body=false is incompatible with 
--part > 0. Disabling.\n");

params.output_body = true;
} else {
-	if (format != NOTMUCH_FORMAT_JSON && format != 
NOTMUCH_FORMAT_SEXP)

+   if (format != NOTMUCH_FORMAT_TEXT &&
+   format != NOTMUCH_FORMAT_JSON &&
+   format != NOTMUCH_FORMAT_SEXP)
fprintf (stderr,
-			 "Warning: --body=false only implemented for format=json and 
format=sexp\n");
+			 "Warning: --body=false only implemented for format=text, 
format=json and format=sexp\n");

}
 }

 if (params.include_html &&
-(format != NOTMUCH_FORMAT_JSON && format != 
NOTMUCH_FORMAT_SEXP)) {
-	fprintf (stderr, "Warning: --include-html only implemented for 
format=json and format=sexp\n");

+(format != NOTMUCH_FORMAT_TEXT &&
+format != NOTMUCH_FORMAT_JSON &&
+format != NOTMUCH_FORMAT_SEXP)) {
+	fprintf (stderr, "Warning: --include-html only implemented for 
format=text, format=json and format=sexp\n");

 }

 query_string = query_string_from_args (config, argc-opt_index, 
argv+opt_index);

diff --git a/test/T190-multipart.sh b/test/T190-multipart.sh
index 3eeac1db..9ad141cb 100755
--- a/test/T190-multipart.sh
+++ b/test/T190-multipart.sh
@@ -190,6 +190,21 @@ Non-text part: application/pgp-signature
 EOF
 test_expect_equal_file EXPECTED OUTPUT

+test_begin_subtest "--format=text --part=0 --body=false, message 
header"
+notmuch show --format=text --part=0  --body=false 
'id:87liy5ap00@yoom.home.cworth.org' >OUTPUT