[PATCH] cli: add --headers_only option to notmuch-show.c

2012-07-07 Thread Peter Wang
On Sat, 30 Jun 2012 08:33:15 +0100, Mark Walters  
wrote:
> This option just outputs the headers of a message (i.e. it omits the
> bodies). Currently this is only implemented for format=json.

I think the option would be better named --output-body=yes|no,
especially if we end up with --output-headers.

Peter


[PATCH] cli: add --headers_only option to notmuch-show.c

2012-07-07 Thread Jani Nikula
On Jul 7, 2012 4:22 AM, "Peter Wang"  wrote:
>
> On Sat, 30 Jun 2012 08:33:15 +0100, Mark Walters <
markwalters1009 at gmail.com> wrote:
> > This option just outputs the headers of a message (i.e. it omits the
> > bodies). Currently this is only implemented for format=json.
>
> I think the option would be better named --output-body=yes|no,
> especially if we end up with --output-headers.

Drive-by bikeshedding: --output={headers,body,all,whatnot}

Would be cool if we could support multiple comma separated keywords.

J.

>
> Peter
> ___
> notmuch mailing list
> notmuch at notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch
-- next part --
An HTML attachment was scrubbed...
URL: 



Re: [PATCH] cli: add --headers_only option to notmuch-show.c

2012-07-07 Thread Jani Nikula
On Jul 7, 2012 4:22 AM, Peter Wang noval...@gmail.com wrote:

 On Sat, 30 Jun 2012 08:33:15 +0100, Mark Walters 
markwalters1...@gmail.com wrote:
  This option just outputs the headers of a message (i.e. it omits the
  bodies). Currently this is only implemented for format=json.

 I think the option would be better named --output-body=yes|no,
 especially if we end up with --output-headers.

Drive-by bikeshedding: --output={headers,body,all,whatnot}

Would be cool if we could support multiple comma separated keywords.

J.


 Peter
 ___
 notmuch mailing list
 notmuch@notmuchmail.org
 http://notmuchmail.org/mailman/listinfo/notmuch
___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch


[PATCH] cli: add --headers_only option to notmuch-show.c

2012-06-30 Thread Mark Walters
This option just outputs the headers of a message (i.e. it omits the
bodies). 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; moreover it reduces the memory
usage in emacs hugely.
---

Currently notmuch-show outputs on a thread includes all headers and
all text/plain parts (more precisely all text/* except text/html): the
client has to fetch any other parts it wants.

This patch allows notmuch show to just output the headers: omitting
all the body parts. Jamie suggested in
id:"87zk80ilt9.fsf at servo.finestructure.net" that we always omit all
body parts and leave it to the client to fetch them. 

My feeling is that this could make some uses much slower (a view
expressed by Peter in id:"20120620110139.GA2356 at hili.localdomain").

What do people think?

Best wishes

Mark


 notmuch-client.h |3 ++-
 notmuch-reply.c  |2 +-
 notmuch-show.c   |   15 +++
 3 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/notmuch-client.h b/notmuch-client.h
index 0c17b79..17efde2 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 headers_only;
 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 headers_only);

 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..07c3bef 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, FALSE);

 /* End */
 printf ("}\n");
diff --git a/notmuch-show.c b/notmuch-show.c
index 8f3c60e..195e318 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 headers_only)
 {
 /* Any changes to the JSON format should be reflected in the file
  * devel/schemata. */
@@ -572,7 +572,8 @@ format_part_json (const void *ctx, mime_node_t *node, 
notmuch_bool_t first)
format_headers_json (ctx, GMIME_MESSAGE (node->part), FALSE);

printf (", \"body\": [");
-   format_part_json (ctx, mime_node_child (node, 0), first);
+   if (!headers_only)
+   format_part_json (ctx, mime_node_child (node, 0), first, FALSE);

printf ("]}");
return;
@@ -652,7 +653,7 @@ 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, FALSE);

 printf ("%s}", terminator);
 }
@@ -661,7 +662,7 @@ 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))
 {
-format_part_json (ctx, node, TRUE);
+format_part_json (ctx, node, TRUE, params->headers_only);

 return NOTMUCH_STATUS_SUCCESS;
 }
@@ -1010,6 +1011,7 @@ notmuch_show_command (void *ctx, unused (int argc), 
unused (char *argv[]))
}
 };
 int format_sel = NOTMUCH_FORMAT_NOT_SPECIFIED;
+notmuch_bool_t headers_only = FALSE;
 int exclude = EXCLUDE_TRUE;
 int entire_thread = ENTIRE_THREAD_DEFAULT;

@@ -1032,6 +1034,7 @@ notmuch_show_command (void *ctx, unused (int argc), 
unused (char *argv[]))
{ NOTMUCH_OPT_INT, , "part", 'p', 0 },
{ NOTMUCH_OPT_BOOLEAN, , "decrypt", 'd', 0 },
{ NOTMUCH_OPT_BOOLEAN, , "verify", 'v', 0 },
+   { NOTMUCH_OPT_BOOLEAN, _only, "headers-only", 'h', 0 },
{ 0, 0, 0, 0, 0 }
 };

@@ -1086,6 +1089,10 @@ notmuch_show_command (void *ctx, unused (int argc), 
unused (char *argv[]))
entire_thread = ENTIRE_THREAD_FALSE;
 }

+if (headers_only && format != _json)
+   fprintf (stderr,"Warning: --headers-only only implemented for 
format=json\n");
+params.headers_only = headers_only;
+
 if (entire_thread == ENTIRE_THREAD_TRUE)
params.entire_thread = TRUE;
 else
-- 
1.7.9.1



[PATCH] cli: add --headers_only option to notmuch-show.c

2012-06-30 Thread Mark Walters
This option just outputs the headers of a message (i.e. it omits the
bodies). 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; moreover it reduces the memory
usage in emacs hugely.
---

Currently notmuch-show outputs on a thread includes all headers and
all text/plain parts (more precisely all text/* except text/html): the
client has to fetch any other parts it wants.

This patch allows notmuch show to just output the headers: omitting
all the body parts. Jamie suggested in
id:87zk80ilt9@servo.finestructure.net that we always omit all
body parts and leave it to the client to fetch them. 

My feeling is that this could make some uses much slower (a view
expressed by Peter in id:20120620110139.GA2356@hili.localdomain).

What do people think?

Best wishes

Mark


 notmuch-client.h |3 ++-
 notmuch-reply.c  |2 +-
 notmuch-show.c   |   15 +++
 3 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/notmuch-client.h b/notmuch-client.h
index 0c17b79..17efde2 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 headers_only;
 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 headers_only);
 
 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..07c3bef 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, FALSE);
 
 /* End */
 printf (}\n);
diff --git a/notmuch-show.c b/notmuch-show.c
index 8f3c60e..195e318 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 headers_only)
 {
 /* Any changes to the JSON format should be reflected in the file
  * devel/schemata. */
@@ -572,7 +572,8 @@ format_part_json (const void *ctx, mime_node_t *node, 
notmuch_bool_t first)
format_headers_json (ctx, GMIME_MESSAGE (node-part), FALSE);
 
printf (, \body\: [);
-   format_part_json (ctx, mime_node_child (node, 0), first);
+   if (!headers_only)
+   format_part_json (ctx, mime_node_child (node, 0), first, FALSE);
 
printf (]});
return;
@@ -652,7 +653,7 @@ 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, FALSE);
 
 printf (%s}, terminator);
 }
@@ -661,7 +662,7 @@ 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))
 {
-format_part_json (ctx, node, TRUE);
+format_part_json (ctx, node, TRUE, params-headers_only);
 
 return NOTMUCH_STATUS_SUCCESS;
 }
@@ -1010,6 +1011,7 @@ notmuch_show_command (void *ctx, unused (int argc), 
unused (char *argv[]))
}
 };
 int format_sel = NOTMUCH_FORMAT_NOT_SPECIFIED;
+notmuch_bool_t headers_only = FALSE;
 int exclude = EXCLUDE_TRUE;
 int entire_thread = ENTIRE_THREAD_DEFAULT;
 
@@ -1032,6 +1034,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, headers_only, headers-only, 'h', 0 },
{ 0, 0, 0, 0, 0 }
 };
 
@@ -1086,6 +1089,10 @@ notmuch_show_command (void *ctx, unused (int argc), 
unused (char *argv[]))
entire_thread = ENTIRE_THREAD_FALSE;
 }
 
+if (headers_only  format != format_json)
+   fprintf (stderr,Warning: --headers-only only implemented for 
format=json\n);
+params.headers_only = headers_only;
+
 if (entire_thread == ENTIRE_THREAD_TRUE)
params.entire_thread = TRUE;
 else
-- 
1.7.9.1

___
notmuch mailing list
notmuch@notmuchmail.org