From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: Angus Hammond <angusgh@gmail.com>, git@vger.kernel.org
Subject: [PATCH 13/13] format-patch: refactor get_patch_filename
Date: Fri, 18 May 2012 19:24:49 -0400 [thread overview]
Message-ID: <20120518232449.GM30031@sigill.intra.peff.net> (raw)
In-Reply-To: <20120518230528.GA30510@sigill.intra.peff.net>
The get_patch_filename function expects a commit argument
and uses it to get the sanitized subject line when making a
patch filename. However, we also want to use this same
function for the cover letter, which does not have a commit
object. The current solution is to create a fake commit with
the subject "cover letter". Instead, let's make the
get_patch_filename interface more flexibile, and allow
passing a direct subject.
Signed-off-by: Jeff King <peff@peff.net>
---
This one is a bonus. It doesn't really have anything to do with ident,
except that I came across it while trying to figure out how the
committer info is being used in make_cover_letter.
builtin/log.c | 35 +++++++----------------------------
log-tree.c | 19 +++++++++++--------
log-tree.h | 4 ++--
3 files changed, 20 insertions(+), 38 deletions(-)
diff --git a/builtin/log.c b/builtin/log.c
index 656bddf..8010a40 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -663,7 +663,8 @@ static FILE *realstdout = NULL;
static const char *output_directory = NULL;
static int outdir_offset;
-static int reopen_stdout(struct commit *commit, struct rev_info *rev, int quiet)
+static int reopen_stdout(struct commit *commit, const char *subject,
+ struct rev_info *rev, int quiet)
{
struct strbuf filename = STRBUF_INIT;
int suffix_len = strlen(fmt_patch_suffix) + 1;
@@ -677,7 +678,7 @@ static int reopen_stdout(struct commit *commit, struct rev_info *rev, int quiet)
strbuf_addch(&filename, '/');
}
- get_patch_filename(commit, rev->nr, fmt_patch_suffix, &filename);
+ get_patch_filename(commit, subject, rev->nr, fmt_patch_suffix, &filename);
if (!quiet)
fprintf(realstdout, "%s\n", filename.buf + outdir_offset);
@@ -778,7 +779,6 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
const char *encoding = "UTF-8";
struct diff_options opts;
int need_8bit_cte = 0;
- struct commit *commit = NULL;
struct pretty_print_context pp = {0};
if (rev->commit_format != CMIT_FMT_EMAIL)
@@ -786,31 +786,10 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
committer = git_committer_info(0);
- if (!numbered_files) {
- /*
- * We fake a commit for the cover letter so we get the filename
- * desired.
- */
- commit = xcalloc(1, sizeof(*commit));
- commit->buffer = xmalloc(400);
- snprintf(commit->buffer, 400,
- "tree 0000000000000000000000000000000000000000\n"
- "parent %s\n"
- "author %s\n"
- "committer %s\n\n"
- "cover letter\n",
- sha1_to_hex(head->object.sha1), committer, committer);
- }
-
- if (!use_stdout && reopen_stdout(commit, rev, quiet))
+ if (!use_stdout &&
+ reopen_stdout(NULL, numbered_files ? NULL : "cover-letter", rev, quiet))
return;
- if (commit) {
-
- free(commit->buffer);
- free(commit);
- }
-
log_write_email_headers(rev, head, &pp.subject, &pp.after_subject,
&need_8bit_cte);
@@ -1405,8 +1384,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
gen_message_id(&rev, sha1_to_hex(commit->object.sha1));
}
- if (!use_stdout && reopen_stdout(numbered_files ? NULL : commit,
- &rev, quiet))
+ if (!use_stdout &&
+ reopen_stdout(numbered_files ? NULL : commit, NULL, &rev, quiet))
die(_("Failed to create output files"));
shown = log_tree_commit(&rev, commit);
free(commit->buffer);
diff --git a/log-tree.c b/log-tree.c
index 376d973..c894930 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -299,19 +299,22 @@ static unsigned int digits_in_number(unsigned int number)
return result;
}
-void get_patch_filename(struct commit *commit, int nr, const char *suffix,
- struct strbuf *buf)
+void get_patch_filename(struct commit *commit, const char *subject, int nr,
+ const char *suffix, struct strbuf *buf)
{
int suffix_len = strlen(suffix) + 1;
int start_len = buf->len;
- strbuf_addf(buf, commit ? "%04d-" : "%d", nr);
- if (commit) {
+ strbuf_addf(buf, commit || subject ? "%04d-" : "%d", nr);
+ if (commit || subject) {
int max_len = start_len + FORMAT_PATCH_NAME_MAX - suffix_len;
struct pretty_print_context ctx = {0};
- ctx.date_mode = DATE_NORMAL;
- format_commit_message(commit, "%f", buf, &ctx);
+ if (subject)
+ strbuf_addstr(buf, subject);
+ else if (commit)
+ format_commit_message(commit, "%f", buf, &ctx);
+
if (max_len < buf->len)
strbuf_setlen(buf, max_len);
strbuf_addstr(buf, suffix);
@@ -384,8 +387,8 @@ void log_write_email_headers(struct rev_info *opt, struct commit *commit,
mime_boundary_leader, opt->mime_boundary);
extra_headers = subject_buffer;
- get_patch_filename(opt->numbered_files ? NULL : commit, opt->nr,
- opt->patch_suffix, &filename);
+ get_patch_filename(opt->numbered_files ? NULL : commit, NULL,
+ opt->nr, opt->patch_suffix, &filename);
snprintf(buffer, sizeof(buffer) - 1,
"\n--%s%s\n"
"Content-Type: text/x-patch;"
diff --git a/log-tree.h b/log-tree.h
index 5c4cf7c..f5ac238 100644
--- a/log-tree.h
+++ b/log-tree.h
@@ -21,7 +21,7 @@ void log_write_email_headers(struct rev_info *opt, struct commit *commit,
void load_ref_decorations(int flags);
#define FORMAT_PATCH_NAME_MAX 64
-void get_patch_filename(struct commit *commit, int nr, const char *suffix,
- struct strbuf *buf);
+void get_patch_filename(struct commit *commit, const char *subject, int nr,
+ const char *suffix, struct strbuf *buf);
#endif
--
1.7.10.1.16.g53a707b
next prev parent reply other threads:[~2012-05-18 23:25 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-10 19:06 [PATCH 1/2] Change error messages in ident.c Make error messages caused by failed reads of the /etc/passwd file easier to understand. Signed-off-by: Angus Hammond <angusgh@gmail.com> Angus Hammond
2012-05-10 19:06 ` [PATCH 2/2] Remove diagnostics section from commit-tree and var man pages New error messages shouldn't need explaining like the old ones did so just delete the diagnostics section of the man pages. " Angus Hammond
2012-05-10 19:21 ` Angus Hammond
2012-05-10 19:23 ` [PATCH 1/2] Change error messages in ident.c Jeff King
2012-05-10 19:56 ` Jeff King
2012-05-11 22:53 ` Junio C Hamano
2012-05-11 23:13 ` Jeff King
2012-05-14 16:28 ` [PATCH 1/2] drop length limitations on gecos-derived names and emails Jeff King
2012-05-14 17:05 ` Jeff King
2012-05-14 21:02 ` Jeff King
2012-05-14 21:13 ` Jeff King
2012-05-15 1:54 ` Jeff King
2012-05-15 2:32 ` Jeff King
2012-05-15 15:03 ` Junio C Hamano
2012-05-15 17:47 ` Jeff King
2012-05-15 18:10 ` Junio C Hamano
2012-05-18 23:05 ` [PATCH 0/13] ident cleanups and bugfixes Jeff King
2012-05-18 23:07 ` [PATCH 01/13] ident: split setup_ident into separate functions Jeff King
2012-05-18 23:09 ` [PATCH 02/13] http-push: do not access git_default_email directly Jeff King
2012-05-18 23:10 ` [PATCH 03/13] fmt-merge-msg: don't use static buffer in record_person Jeff King
2012-05-18 23:11 ` [PATCH 04/13] move identity config parsing to ident.c Jeff King
2012-05-18 23:11 ` [PATCH 05/13] move git_default_* variables " Jeff King
2012-05-21 4:07 ` Junio C Hamano
2012-05-21 5:41 ` Jeff King
2012-05-21 6:41 ` Jeff King
2012-05-18 23:13 ` [PATCH 06/13] format-patch: use default email for generating message ids Jeff King
2012-05-21 2:58 ` Junio C Hamano
2012-05-21 6:36 ` Jeff King
2012-05-18 23:14 ` [PATCH 07/13] fmt_ident: drop IDENT_WARN_ON_NO_NAME code Jeff King
2012-05-18 23:19 ` [PATCH 08/13] ident: don't write fallback username into git_default_name Jeff King
2012-05-21 2:54 ` Junio C Hamano
2012-05-21 6:31 ` Jeff King
2012-05-21 9:11 ` Junio C Hamano
2012-05-21 23:09 ` [PATCHv2 0/15] ident cleanups git_default_name Jeff King
2012-05-21 23:09 ` [PATCHv2 01/15] ident: split setup_ident into separate functions Jeff King
2012-05-21 23:09 ` [PATCHv2 02/15] http-push: do not access git_default_email directly Jeff King
2012-05-21 23:09 ` [PATCHv2 03/15] fmt-merge-msg: don't use static buffer in record_person Jeff King
2012-05-21 23:09 ` [PATCHv2 04/15] move identity config parsing to ident.c Jeff King
2012-05-21 23:09 ` [PATCHv2 05/15] move git_default_* variables " Jeff King
2012-05-21 23:10 ` [PATCHv2 06/15] ident: trim trailing newline from /etc/mailname Jeff King
2012-05-21 23:10 ` [PATCHv2 07/15] format-patch: use default email for generating message ids Jeff King
2012-05-21 23:10 ` [PATCHv2 08/15] fmt_ident: drop IDENT_WARN_ON_NO_NAME code Jeff King
2012-05-21 23:10 ` [PATCHv2 09/15] ident: don't write fallback username into git_default_name Jeff King
2012-05-21 23:10 ` [PATCHv2 10/15] drop length limitations on gecos-derived names and emails Jeff King
2013-01-24 23:21 ` [regression] " Jonathan Nieder
2013-01-25 1:05 ` Jeff King
2013-01-25 18:46 ` Junio C Hamano
2013-01-25 22:10 ` Jeff King
2012-05-21 23:10 ` [PATCHv2 11/15] ident: report passwd errors with a more friendly message Jeff King
2012-05-21 23:10 ` [PATCHv2 12/15] ident: use full dns names to generate email addresses Jeff King
2012-05-21 23:10 ` [PATCHv2 13/15] ident: use a dynamic strbuf in fmt_ident Jeff King
2012-05-21 23:10 ` [PATCHv2 14/15] ident: trim whitespace from default name/email Jeff King
2012-05-22 16:55 ` Junio C Hamano
2012-05-22 17:12 ` Jeff King
2012-05-22 17:21 ` Junio C Hamano
2012-05-21 23:10 ` [PATCHv2 15/15] format-patch: refactor get_patch_filename Jeff King
2012-05-18 23:20 ` [PATCH 09/13] drop length limitations on gecos-derived names and emails Jeff King
2012-05-18 23:21 ` [PATCH 10/13] ident: report passwd errors with a more friendly message Jeff King
2012-05-18 23:22 ` [PATCH 11/13] ident: use full dns names to generate email addresses Jeff King
2012-05-18 23:23 ` [PATCH 12/13] ident: use a dynamic strbuf in fmt_ident Jeff King
2012-05-18 23:24 ` Jeff King [this message]
2012-05-14 16:36 ` [PATCH 2/2] ident: report passwd errors with a more friendly message Jeff King
2012-05-10 20:04 ` [PATCH 1/2] Change error messages in ident.c Junio C Hamano
2012-05-10 20:22 ` Jeff King
2012-05-10 20:28 ` Junio C Hamano
2012-05-10 19:43 ` [PATCH 1/2] Change error messages in ident.c Make error messages caused by failed reads of the /etc/passwd file easier to understand. Signed-off-by: Angus Hammond <angusgh@gmail.com> Junio C Hamano
2012-05-10 19:57 ` Angus Hammond
2012-05-11 11:35 ` Nguyen Thai Ngoc Duy
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120518232449.GM30031@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=angusgh@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/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.
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 NNTP newsgroup(s).