diff options
author | Junio C Hamano <gitster@pobox.com> | 2012-12-21 22:06:01 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-12-21 23:55:40 -0800 |
commit | d28b5d47ab72a91d5090748f8f8baaf6ffa084fc (patch) | |
tree | d2b9f6170568471be7d27e0b86c528d1ea388eff | |
parent | get_patch_filename(): drop "just-numbers" hack (diff) | |
download | tgif-d28b5d47ab72a91d5090748f8f8baaf6ffa084fc.tar.xz |
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>
-rw-r--r-- | builtin/log.c | 4 | ||||
-rw-r--r-- | log-tree.c | 41 | ||||
-rw-r--r-- | log-tree.h | 5 |
3 files changed, 28 insertions, 22 deletions
diff --git a/builtin/log.c b/builtin/log.c index 3c6f20a235..8cfb4da662 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -686,8 +686,10 @@ static int reopen_stdout(struct commit *commit, const char *subject, if (rev->numbered_files) strbuf_addf(&filename, "%d", rev->nr); + else if (commit) + fmt_output_commit(&filename, commit, rev); else - get_patch_filename(&filename, commit, subject, rev); + fmt_output_subject(&filename, subject, rev); if (!quiet) fprintf(realstdout, "%s\n", filename.buf + outdir_offset); diff --git a/log-tree.c b/log-tree.c index d9f86ce624..670beaebf9 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;" diff --git a/log-tree.h b/log-tree.h index c6a944a838..9140f48216 100644 --- a/log-tree.h +++ b/log-tree.h @@ -21,8 +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 strbuf *buf, - struct commit *commit, const char *subject, - struct rev_info *); +void fmt_output_commit(struct strbuf *, struct commit *, struct rev_info *); +void fmt_output_subject(struct strbuf *, const char *subject, struct rev_info *); #endif |