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 <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
be641abdb5
commit
a21c2f94fb
19
log-tree.c
19
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;"
|
||||
|
Reference in New Issue
Block a user