{"thread":{"id":"11916","subject":"[PATCH 2/4] Export some email and pretty-printing functions","startedAt":"2008-02-06T16:43:21Z","lastAt":"2008-02-06T20:30:30Z","messageCount":2,"participants":["Daniel Barkalow","Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":4},"messages":[{"id":"67671","messageId":"alpine.LNX.1.00.0802061141140.13593@iabervon.org","threadId":"11916","inReplyTo":null,"subject":"[PATCH 2/4] Export some email and pretty-printing functions","fromName":"Daniel Barkalow","fromEmail":"barkalow@iabervon.org","sentAt":"2008-02-06T16:43:21Z","receivedAt":"2008-02-06T16:43:21Z","isPatch":true,"sender":{"key":"barkalow@iabervon.org","avatar":"https://avatars.githubusercontent.com/u/55364219?v=4"},"body":"These will be used for generating the cover letter in addition to the\npatch emails.\n\nSigned-off-by: Daniel Barkalow <barkalow@iabervon.org>\n---\n commit.h   |   15 +++++++\n log-tree.c |  126 ++++++++++++++++++++++++++++++++---------------------------\n log-tree.h |    2 +\n pretty.c   |   28 +++++++-------\n 4 files changed, 99 insertions(+), 72 deletions(-)\n\ndiff --git a/commit.h b/commit.h\nindex 10e2b5d..42b4825 100644\n--- a/commit.h\n+++ b/commit.h\n@@ -71,6 +71,21 @@ extern void pretty_print_commit(enum cmit_fmt fmt, const struct commit*,\n                                 int abbrev, const char *subject,\n                                 const char *after_subject, enum date_mode,\n \t\t\t\tint non_ascii_present);\n+void add_user_info(const char *what, enum cmit_fmt fmt, struct strbuf *sb,\n+\t\t   const char *line, enum date_mode dmode,\n+\t\t   const char *encoding);\n+void pp_title_line(enum cmit_fmt fmt,\n+\t\t   const char **msg_p,\n+\t\t   struct strbuf *sb,\n+\t\t   const char *subject,\n+\t\t   const char *after_subject,\n+\t\t   const char *encoding,\n+\t\t   int plain_non_ascii);\n+void pp_remainder(enum cmit_fmt fmt,\n+\t\t  const char **msg_p,\n+\t\t  struct strbuf *sb,\n+\t\t  int indent);\n+\n \n /** Removes the first commit from a list sorted by date, and adds all\n  * of its parents.\ndiff --git a/log-tree.c b/log-tree.c\nindex 1f3fcf1..56c8b27 100644\n--- a/log-tree.c\n+++ b/log-tree.c\n@@ -137,6 +137,72 @@ static int has_non_ascii(const char *s)\n \treturn 0;\n }\n \n+void write_email_headers(struct rev_info *opt, const char *name,\n+\t\t\t const char **subject_p, const char **extra_headers_p)\n+{\n+\tconst char *subject = NULL;\n+\tconst char *extra_headers = opt->extra_headers;\n+\tif (opt->total > 0) {\n+\t\tstatic char buffer[64];\n+\t\tsnprintf(buffer, sizeof(buffer),\n+\t\t\t \"Subject: [%s %0*d/%d] \",\n+\t\t\t opt->subject_prefix,\n+\t\t\t digits_in_number(opt->total),\n+\t\t\t opt->nr, opt->total);\n+\t\tsubject = buffer;\n+\t} else if (opt->total == 0 && opt->subject_prefix && *opt->subject_prefix) {\n+\t\tstatic char buffer[256];\n+\t\tsnprintf(buffer, sizeof(buffer),\n+\t\t\t \"Subject: [%s] \",\n+\t\t\t opt->subject_prefix);\n+\t\tsubject = buffer;\n+\t} else {\n+\t\tsubject = \"Subject: \";\n+\t}\n+\n+\tprintf(\"From %s Mon Sep 17 00:00:00 2001\\n\", name);\n+\tif (opt->message_id)\n+\t\tprintf(\"Message-Id: <%s>\\n\", opt->message_id);\n+\tif (opt->ref_message_id)\n+\t\tprintf(\"In-Reply-To: <%s>\\nReferences: <%s>\\n\",\n+\t\t       opt->ref_message_id, opt->ref_message_id);\n+\tif (opt->mime_boundary) {\n+\t\tstatic char subject_buffer[1024];\n+\t\tstatic char buffer[1024];\n+\t\tsnprintf(subject_buffer, sizeof(subject_buffer) - 1,\n+\t\t\t \"%s\"\n+\t\t\t \"MIME-Version: 1.0\\n\"\n+\t\t\t \"Content-Type: multipart/mixed;\"\n+\t\t\t \" boundary=\\\"%s%s\\\"\\n\"\n+\t\t\t \"\\n\"\n+\t\t\t \"This is a multi-part message in MIME \"\n+\t\t\t \"format.\\n\"\n+\t\t\t \"--%s%s\\n\"\n+\t\t\t \"Content-Type: text/plain; \"\n+\t\t\t \"charset=UTF-8; format=fixed\\n\"\n+\t\t\t \"Content-Transfer-Encoding: 8bit\\n\\n\",\n+\t\t\t extra_headers ? extra_headers : \"\",\n+\t\t\t mime_boundary_leader, opt->mime_boundary,\n+\t\t\t mime_boundary_leader, opt->mime_boundary);\n+\t\textra_headers = subject_buffer;\n+\n+\t\tsnprintf(buffer, sizeof(buffer) - 1,\n+\t\t\t \"--%s%s\\n\"\n+\t\t\t \"Content-Type: text/x-patch;\"\n+\t\t\t \" name=\\\"%s.diff\\\"\\n\"\n+\t\t\t \"Content-Transfer-Encoding: 8bit\\n\"\n+\t\t\t \"Content-Disposition: %s;\"\n+\t\t\t \" filename=\\\"%s.diff\\\"\\n\\n\",\n+\t\t\t mime_boundary_leader, opt->mime_boundary,\n+\t\t\t name,\n+\t\t\t opt->no_inline ? \"attachment\" : \"inline\",\n+\t\t\t name);\n+\t\topt->diffopt.stat_sep = buffer;\n+\t}\n+\t*subject_p = subject;\n+\t*extra_headers_p = extra_headers;\n+}\n+\n void show_log(struct rev_info *opt, const char *sep)\n {\n \tstruct strbuf msgbuf;\n@@ -186,64 +252,8 @@ void show_log(struct rev_info *opt, const char *sep)\n \t */\n \n \tif (opt->commit_format == CMIT_FMT_EMAIL) {\n-\t\tchar *sha1 = sha1_to_hex(commit->object.sha1);\n-\t\tif (opt->total > 0) {\n-\t\t\tstatic char buffer[64];\n-\t\t\tsnprintf(buffer, sizeof(buffer),\n-\t\t\t\t\t\"Subject: [%s %0*d/%d] \",\n-\t\t\t\t\topt->subject_prefix,\n-\t\t\t\t\tdigits_in_number(opt->total),\n-\t\t\t\t\topt->nr, opt->total);\n-\t\t\tsubject = buffer;\n-\t\t} else if (opt->total == 0 && opt->subject_prefix && *opt->subject_prefix) {\n-\t\t\tstatic char buffer[256];\n-\t\t\tsnprintf(buffer, sizeof(buffer),\n-\t\t\t\t\t\"Subject: [%s] \",\n-\t\t\t\t\topt->subject_prefix);\n-\t\t\tsubject = buffer;\n-\t\t} else {\n-\t\t\tsubject = \"Subject: \";\n-\t\t}\n-\n-\t\tprintf(\"From %s Mon Sep 17 00:00:00 2001\\n\", sha1);\n-\t\tif (opt->message_id)\n-\t\t\tprintf(\"Message-Id: <%s>\\n\", opt->message_id);\n-\t\tif (opt->ref_message_id)\n-\t\t\tprintf(\"In-Reply-To: <%s>\\nReferences: <%s>\\n\",\n-\t\t\t       opt->ref_message_id, opt->ref_message_id);\n-\t\tif (opt->mime_boundary) {\n-\t\t\tstatic char subject_buffer[1024];\n-\t\t\tstatic char buffer[1024];\n-\t\t\tsnprintf(subject_buffer, sizeof(subject_buffer) - 1,\n-\t\t\t\t \"%s\"\n-\t\t\t\t \"MIME-Version: 1.0\\n\"\n-\t\t\t\t \"Content-Type: multipart/mixed;\"\n-\t\t\t\t \" boundary=\\\"%s%s\\\"\\n\"\n-\t\t\t\t \"\\n\"\n-\t\t\t\t \"This is a multi-part message in MIME \"\n-\t\t\t\t \"format.\\n\"\n-\t\t\t\t \"--%s%s\\n\"\n-\t\t\t\t \"Content-Type: text/plain; \"\n-\t\t\t\t \"charset=UTF-8; format=fixed\\n\"\n-\t\t\t\t \"Content-Transfer-Encoding: 8bit\\n\\n\",\n-\t\t\t\t extra_headers ? extra_headers : \"\",\n-\t\t\t\t mime_boundary_leader, opt->mime_boundary,\n-\t\t\t\t mime_boundary_leader, opt->mime_boundary);\n-\t\t\textra_headers = subject_buffer;\n-\n-\t\t\tsnprintf(buffer, sizeof(buffer) - 1,\n-\t\t\t\t \"--%s%s\\n\"\n-\t\t\t\t \"Content-Type: text/x-patch;\"\n-\t\t\t\t \" name=\\\"%s.diff\\\"\\n\"\n-\t\t\t\t \"Content-Transfer-Encoding: 8bit\\n\"\n-\t\t\t\t \"Content-Disposition: %s;\"\n-\t\t\t\t \" filename=\\\"%s.diff\\\"\\n\\n\",\n-\t\t\t\t mime_boundary_leader, opt->mime_boundary,\n-\t\t\t\t sha1,\n-\t\t\t\t opt->no_inline ? \"attachment\" : \"inline\",\n-\t\t\t\t sha1);\n-\t\t\topt->diffopt.stat_sep = buffer;\n-\t\t}\n+\t\twrite_email_headers(opt, sha1_to_hex(commit->object.sha1),\n+\t\t\t\t    &subject, &extra_headers);\n \t} else if (opt->commit_format != CMIT_FMT_USERFORMAT) {\n \t\tfputs(diff_get_color_opt(&opt->diffopt, DIFF_COMMIT), stdout);\n \t\tif (opt->commit_format != CMIT_FMT_ONELINE)\ndiff --git a/log-tree.h b/log-tree.h\nindex b33f7cd..7cab9ef 100644\n--- a/log-tree.h\n+++ b/log-tree.h\n@@ -13,5 +13,7 @@ int log_tree_commit(struct rev_info *, struct commit *);\n int log_tree_opt_parse(struct rev_info *, const char **, int);\n void show_log(struct rev_info *opt, const char *sep);\n void show_decorations(struct commit *commit);\n+void write_email_headers(struct rev_info *opt, const char *name,\n+\t\t\t const char **subject_p, const char **extra_headers_p);\n \n #endif\ndiff --git a/pretty.c b/pretty.c\nindex b987ff2..f82380b 100644\n--- a/pretty.c\n+++ b/pretty.c\n@@ -110,9 +110,9 @@ needquote:\n \tstrbuf_addstr(sb, \"?=\");\n }\n \n-static void add_user_info(const char *what, enum cmit_fmt fmt, struct strbuf *sb,\n-\t\t\t const char *line, enum date_mode dmode,\n-\t\t\t const char *encoding)\n+void add_user_info(const char *what, enum cmit_fmt fmt, struct strbuf *sb,\n+\t\t   const char *line, enum date_mode dmode,\n+\t\t   const char *encoding)\n {\n \tchar *date;\n \tint namelen;\n@@ -653,13 +653,13 @@ static void pp_header(enum cmit_fmt fmt,\n \t}\n }\n \n-static void pp_title_line(enum cmit_fmt fmt,\n-\t\t\t  const char **msg_p,\n-\t\t\t  struct strbuf *sb,\n-\t\t\t  const char *subject,\n-\t\t\t  const char *after_subject,\n-\t\t\t  const char *encoding,\n-\t\t\t  int plain_non_ascii)\n+void pp_title_line(enum cmit_fmt fmt,\n+\t\t   const char **msg_p,\n+\t\t   struct strbuf *sb,\n+\t\t   const char *subject,\n+\t\t   const char *after_subject,\n+\t\t   const char *encoding,\n+\t\t   int plain_non_ascii)\n {\n \tstruct strbuf title;\n \n@@ -708,10 +708,10 @@ static void pp_title_line(enum cmit_fmt fmt,\n \tstrbuf_release(&title);\n }\n \n-static void pp_remainder(enum cmit_fmt fmt,\n-\t\t\t const char **msg_p,\n-\t\t\t struct strbuf *sb,\n-\t\t\t int indent)\n+void pp_remainder(enum cmit_fmt fmt,\n+\t\t  const char **msg_p,\n+\t\t  struct strbuf *sb,\n+\t\t  int indent)\n {\n \tint first = 1;\n \tfor (;;) {\n-- \n1.5.4.27.gf6864\n"},{"id":"67701","messageId":"7vabmdx1y1.fsf@gitster.siamese.dyndns.org","threadId":"11916","inReplyTo":"alpine.LNX.1.00.0802061141140.13593@iabervon.org","subject":"Re: [PATCH 2/4] Export some email and pretty-printing functions","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-02-06T20:30:30Z","receivedAt":"2008-02-06T20:30:30Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Daniel Barkalow <barkalow@iabervon.org> writes:\n\n> These will be used for generating the cover letter in addition to the\n> patch emails.\n\nNicely done.  The only potential issue I see is add_user_info()\nas a global name may be a bit too generic.\n"}]}