mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 20:38:08 +01:00
notmuch-reply.c: implement notmuch_reply_format_headers_only
This command only generates References, To, and Cc headers. The purpose is primarily for use in git send-email --notmuch id:<MESSAGE-ID> to get proper threading and address the relevant parties. Hooks for other SCMs may come later. Signed-off-by: Jed Brown <jed@59A2.org>
This commit is contained in:
parent
5d447f327f
commit
f47e54bc51
1 changed files with 70 additions and 0 deletions
|
@ -283,6 +283,74 @@ notmuch_reply_format_default(void *ctx, notmuch_config_t *config, notmuch_query_
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* This format is currently tuned for a git send-email --notmuch hook */
|
||||||
|
static int
|
||||||
|
notmuch_reply_format_headers_only(void *ctx, notmuch_config_t *config, notmuch_query_t *query)
|
||||||
|
{
|
||||||
|
GMimeMessage *reply;
|
||||||
|
notmuch_messages_t *messages;
|
||||||
|
notmuch_message_t *message;
|
||||||
|
const char *recipients, *in_reply_to, *orig_references, *references;
|
||||||
|
char *reply_headers;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for (messages = notmuch_query_search_messages (query);
|
||||||
|
notmuch_messages_has_more (messages);
|
||||||
|
notmuch_messages_advance (messages))
|
||||||
|
{
|
||||||
|
message = notmuch_messages_get (messages);
|
||||||
|
|
||||||
|
/* The 0 means we do not want headers in a "pretty" order. */
|
||||||
|
reply = g_mime_message_new (0);
|
||||||
|
if (reply == NULL) {
|
||||||
|
fprintf (stderr, "Out of memory\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
in_reply_to = talloc_asprintf (ctx, "<%s>",
|
||||||
|
notmuch_message_get_message_id (message));
|
||||||
|
|
||||||
|
orig_references = notmuch_message_get_header (message, "references");
|
||||||
|
|
||||||
|
/* We print References first because git format-patch treats it specially.
|
||||||
|
* Git uses the first entry of References to create In-Reply-To.
|
||||||
|
*/
|
||||||
|
references = talloc_asprintf (ctx, "%s%s%s",
|
||||||
|
in_reply_to,
|
||||||
|
orig_references ? orig_references : "",
|
||||||
|
orig_references ? " " : "");
|
||||||
|
g_mime_object_set_header (GMIME_OBJECT (reply),
|
||||||
|
"References", references);
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE (reply_to_map); i++) {
|
||||||
|
const char *addr;
|
||||||
|
|
||||||
|
recipients = notmuch_message_get_header (message,
|
||||||
|
reply_to_map[i].header);
|
||||||
|
if ((recipients == NULL || recipients[0] == '\0') && reply_to_map[i].fallback)
|
||||||
|
recipients = notmuch_message_get_header (message,
|
||||||
|
reply_to_map[i].fallback);
|
||||||
|
|
||||||
|
addr = add_recipients_for_string (reply, config,
|
||||||
|
reply_to_map[i].recipient_type,
|
||||||
|
recipients);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_mime_object_set_header (GMIME_OBJECT (reply), "Bcc",
|
||||||
|
notmuch_config_get_user_primary_email (config));
|
||||||
|
|
||||||
|
reply_headers = g_mime_object_to_string (GMIME_OBJECT (reply));
|
||||||
|
printf ("%s", reply_headers);
|
||||||
|
free (reply_headers);
|
||||||
|
|
||||||
|
g_object_unref (G_OBJECT (reply));
|
||||||
|
reply = NULL;
|
||||||
|
|
||||||
|
notmuch_message_destroy (message);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
notmuch_reply_command (void *ctx, int argc, char *argv[])
|
notmuch_reply_command (void *ctx, int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
@ -304,6 +372,8 @@ notmuch_reply_command (void *ctx, int argc, char *argv[])
|
||||||
opt = argv[i] + sizeof ("--format=") - 1;
|
opt = argv[i] + sizeof ("--format=") - 1;
|
||||||
if (strcmp (opt, "default") == 0) {
|
if (strcmp (opt, "default") == 0) {
|
||||||
reply_format_func = notmuch_reply_format_default;
|
reply_format_func = notmuch_reply_format_default;
|
||||||
|
} else if (strcmp (opt, "headers-only") == 0) {
|
||||||
|
reply_format_func = notmuch_reply_format_headers_only;
|
||||||
} else {
|
} else {
|
||||||
fprintf (stderr, "Invalid value for --format: %s\n", opt);
|
fprintf (stderr, "Invalid value for --format: %s\n", opt);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Reference in a new issue