diff options
author | Junio C Hamano <gitster@pobox.com> | 2012-12-22 10:06:01 +0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-12-22 11:55:40 +0400 |
commit | d28b5d47ab72a91d5090748f8f8baaf6ffa084fc (patch) | |
tree | d2b9f6170568471be7d27e0b86c528d1ea388eff /log-tree.c | |
parent | 38ec23ac893e96a9027c1cf8112b3d97a0384d39 (diff) |
get_patch_filename(): split into two functions
The function switched between two operating modes depending on the
NULL-ness of its two parameters, as a hacky way to share small part
of implementation, sacrificing cleanliness of the API.
Implement "fmt_output_subject()" function that takes a subject
string and gives the name for the output file, and on top of it,
implement "fmt_output_commit()" function that takes a commit and
gives the name for the output file.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'log-tree.c')
-rw-r--r-- | log-tree.c | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/log-tree.c b/log-tree.c index d9f86ce624e..670beaebf9b 100644 --- a/log-tree.c +++ b/log-tree.c @@ -299,26 +299,32 @@ static unsigned int digits_in_number(unsigned int number) return result; } -void get_patch_filename(struct strbuf *buf, - struct commit *commit, const char *subject, +void fmt_output_subject(struct strbuf *filename, + const char *subject, struct rev_info *info) { const char *suffix = info->patch_suffix; int nr = info->nr; - int suffix_len = strlen(suffix) + 1; - int start_len = buf->len; - int max_len = start_len + FORMAT_PATCH_NAME_MAX - suffix_len; - - strbuf_addf(buf, "%04d-", nr); - if (subject) - strbuf_addstr(buf, subject); - else if (commit) { - struct pretty_print_context ctx = {0}; - format_commit_message(commit, "%f", buf, &ctx); - } - if (max_len < buf->len) - strbuf_setlen(buf, max_len); - strbuf_addstr(buf, suffix); + int start_len = filename->len; + int max_len = start_len + FORMAT_PATCH_NAME_MAX - (strlen(suffix) + 1); + + strbuf_addf(filename, "%04d-%s", nr, subject); + + if (max_len < filename->len) + strbuf_setlen(filename, max_len); + strbuf_addstr(filename, suffix); +} + +void fmt_output_commit(struct strbuf *filename, + struct commit *commit, + struct rev_info *info) +{ + struct pretty_print_context ctx = {0}; + struct strbuf subject = STRBUF_INIT; + + format_commit_message(commit, "%f", &subject, &ctx); + fmt_output_subject(filename, subject.buf, info); + strbuf_release(&subject); } void log_write_email_headers(struct rev_info *opt, struct commit *commit, @@ -390,8 +396,7 @@ void log_write_email_headers(struct rev_info *opt, struct commit *commit, if (opt->numbered_files) strbuf_addf(&filename, "%d", opt->nr); else - get_patch_filename(&filename, commit, NULL, - opt); + fmt_output_commit(&filename, commit, opt); snprintf(buffer, sizeof(buffer) - 1, "\n--%s%s\n" "Content-Type: text/x-patch;" |