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>maint
parent
b7bd9486b0
commit
fa5b7ea670
|
@ -997,6 +997,26 @@ static char *find_branch_name(struct rev_info *rev)
|
||||||
return branch;
|
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,
|
static void make_cover_letter(struct rev_info *rev, int use_stdout,
|
||||||
struct commit *origin,
|
struct commit *origin,
|
||||||
int nr, struct commit **list,
|
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;
|
struct strbuf sb = STRBUF_INIT;
|
||||||
int i;
|
int i;
|
||||||
const char *encoding = "UTF-8";
|
const char *encoding = "UTF-8";
|
||||||
struct diff_options opts;
|
|
||||||
int need_8bit_cte = 0;
|
int need_8bit_cte = 0;
|
||||||
struct pretty_print_context pp = {0};
|
struct pretty_print_context pp = {0};
|
||||||
struct commit *head = list[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);
|
shortlog_output(&log);
|
||||||
|
|
||||||
/*
|
/* We can only do diffstat with a unique reference point */
|
||||||
* We can only do diffstat with a unique reference point
|
if (origin)
|
||||||
*/
|
show_diffstat(rev, origin, head);
|
||||||
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");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *clean_message_id(const char *msg_id)
|
static const char *clean_message_id(const char *msg_id)
|
||||||
|
|
Loading…
Reference in New Issue