From: Mark Walters <markwalters1009@gmail.com>
To: notmuch@notmuchmail.org
Subject: [PATCH] cli: add --headers_only option to notmuch-show.c
Date: Sat, 30 Jun 2012 08:33:15 +0100 [thread overview]
Message-ID: <1341041595-5858-1-git-send-email-markwalters1009@gmail.com> (raw)
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@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, ¶ms.part, "part", 'p', 0 },
{ NOTMUCH_OPT_BOOLEAN, ¶ms.crypto.decrypt, "decrypt", 'd', 0 },
{ NOTMUCH_OPT_BOOLEAN, ¶ms.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
next reply other threads:[~2012-06-30 7:33 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-30 7:33 Mark Walters [this message]
2012-07-07 1:22 ` [PATCH] cli: add --headers_only option to notmuch-show.c Peter Wang
2012-07-07 6:21 ` Jani Nikula
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://notmuchmail.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1341041595-5858-1-git-send-email-markwalters1009@gmail.com \
--to=markwalters1009@gmail.com \
--cc=notmuch@notmuchmail.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).