From a21c2f94fb6e74ebddb5c78cf6b5f68983646530 Mon Sep 17 00:00:00 2001 From: Jeff King Date: Mon, 21 May 2012 19:10:32 -0400 Subject: format-patch: refactor get_patch_filename 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 Signed-off-by: Junio C Hamano --- log-tree.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'log-tree.c') diff --git a/log-tree.c b/log-tree.c index 376d973176..c894930c18 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;" -- cgit v1.2.1