combine-diff: show diffstat with the first parent.

Asking for stat (either with --stat or --patch-with-stat) gives
you diffstat for the first parent, even under combine-diff.

While the combined patch is useful to highlight the complexity
and interaction of the parts touched by all branches when
reviewing a merge commit, diffstat is a tool to assess the
extent of damage the merge brings in, and showing stat with the
first parent is more sensible than clever per-parent diffstat.

Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Junio C Hamano 2006-04-17 22:53:03 -07:00
Родитель b073f26b25
Коммит 965f803c32
1 изменённых файлов: 19 добавлений и 5 удалений

Просмотреть файл

@ -831,10 +831,11 @@ void show_combined_diff(struct combine_diff_path *p,
case DIFF_FORMAT_NAME: case DIFF_FORMAT_NAME:
show_raw_diff(p, num_parent, rev); show_raw_diff(p, num_parent, rev);
return; return;
default:
case DIFF_FORMAT_PATCH: case DIFF_FORMAT_PATCH:
show_patch_diff(p, num_parent, dense, rev); show_patch_diff(p, num_parent, dense, rev);
return;
default:
return;
} }
} }
@ -847,10 +848,13 @@ void diff_tree_combined_merge(const unsigned char *sha1,
struct commit_list *parents; struct commit_list *parents;
struct combine_diff_path *p, *paths = NULL; struct combine_diff_path *p, *paths = NULL;
int num_parent, i, num_paths; int num_parent, i, num_paths;
int do_diffstat;
do_diffstat = (opt->output_format == DIFF_FORMAT_DIFFSTAT ||
opt->with_stat);
diffopts = *opt; diffopts = *opt;
diffopts.output_format = DIFF_FORMAT_NO_OUTPUT;
diffopts.with_raw = 0; diffopts.with_raw = 0;
diffopts.with_stat = 0;
diffopts.recursive = 1; diffopts.recursive = 1;
/* count parents */ /* count parents */
@ -864,14 +868,24 @@ void diff_tree_combined_merge(const unsigned char *sha1,
parents; parents;
parents = parents->next, i++) { parents = parents->next, i++) {
struct commit *parent = parents->item; struct commit *parent = parents->item;
/* show stat against the first parent even
* when doing combined diff.
*/
if (i == 0 && do_diffstat)
diffopts.output_format = DIFF_FORMAT_DIFFSTAT;
else
diffopts.output_format = DIFF_FORMAT_NO_OUTPUT;
diff_tree_sha1(parent->object.sha1, commit->object.sha1, "", diff_tree_sha1(parent->object.sha1, commit->object.sha1, "",
&diffopts); &diffopts);
diffcore_std(&diffopts); diffcore_std(&diffopts);
paths = intersect_paths(paths, i, num_parent); paths = intersect_paths(paths, i, num_parent);
if (diffopts.with_stat && rev->loginfo) if (do_diffstat && rev->loginfo)
show_log(rev, rev->loginfo, "---\n"); show_log(rev, rev->loginfo,
opt->with_stat ? "---\n" : "\n");
diff_flush(&diffopts); diff_flush(&diffopts);
if (opt->with_stat)
putchar('\n');
} }
/* find out surviving paths */ /* find out surviving paths */