зеркало из https://github.com/microsoft/git.git
format-patch: allow additional generated content in make_cover_letter()
make_cover_letter() returns early when it lacks sufficient state to emit a diffstat, which makes it difficult to extend the function to reliably emit additional generated content. Work around this shortcoming by factoring diffstat-printing logic out to its own function and calling it as needed without otherwise inhibiting normal control flow. Signed-off-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
b7bd9486b0
Коммит
fa5b7ea670
|
@ -997,6 +997,26 @@ static char *find_branch_name(struct rev_info *rev)
|
|||
return branch;
|
||||
}
|
||||
|
||||
static void show_diffstat(struct rev_info *rev,
|
||||
struct commit *origin, struct commit *head)
|
||||
{
|
||||
struct diff_options opts;
|
||||
|
||||
memcpy(&opts, &rev->diffopt, sizeof(opts));
|
||||
opts.output_format = DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT;
|
||||
opts.stat_width = MAIL_DEFAULT_WRAP;
|
||||
|
||||
diff_setup_done(&opts);
|
||||
|
||||
diff_tree_oid(get_commit_tree_oid(origin),
|
||||
get_commit_tree_oid(head),
|
||||
"", &opts);
|
||||
diffcore_std(&opts);
|
||||
diff_flush(&opts);
|
||||
|
||||
fprintf(rev->diffopt.file, "\n");
|
||||
}
|
||||
|
||||
static void make_cover_letter(struct rev_info *rev, int use_stdout,
|
||||
struct commit *origin,
|
||||
int nr, struct commit **list,
|
||||
|
@ -1010,7 +1030,6 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
|
|||
struct strbuf sb = STRBUF_INIT;
|
||||
int i;
|
||||
const char *encoding = "UTF-8";
|
||||
struct diff_options opts;
|
||||
int need_8bit_cte = 0;
|
||||
struct pretty_print_context pp = {0};
|
||||
struct commit *head = list[0];
|
||||
|
@ -1060,25 +1079,9 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
|
|||
|
||||
shortlog_output(&log);
|
||||
|
||||
/*
|
||||
* We can only do diffstat with a unique reference point
|
||||
*/
|
||||
if (!origin)
|
||||
return;
|
||||
|
||||
memcpy(&opts, &rev->diffopt, sizeof(opts));
|
||||
opts.output_format = DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT;
|
||||
opts.stat_width = MAIL_DEFAULT_WRAP;
|
||||
|
||||
diff_setup_done(&opts);
|
||||
|
||||
diff_tree_oid(get_commit_tree_oid(origin),
|
||||
get_commit_tree_oid(head),
|
||||
"", &opts);
|
||||
diffcore_std(&opts);
|
||||
diff_flush(&opts);
|
||||
|
||||
fprintf(rev->diffopt.file, "\n");
|
||||
/* We can only do diffstat with a unique reference point */
|
||||
if (origin)
|
||||
show_diffstat(rev, origin, head);
|
||||
}
|
||||
|
||||
static const char *clean_message_id(const char *msg_id)
|
||||
|
|
Загрузка…
Ссылка в новой задаче