diff options
author | Junio C Hamano <junkio@cox.net> | 2006-04-18 09:53:03 +0400 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-04-18 09:53:03 +0400 |
commit | 965f803c323bb72a9dedbbc8f7ba00bbadb6cf58 (patch) | |
tree | 241b39df8e4290621181ebdadc950c45410fa63f | |
parent | b073f26b256cded6252bafd34982eb6f69d2a4b6 (diff) |
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>
-rw-r--r-- | combine-diff.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/combine-diff.c b/combine-diff.c index aef9006443..27f6f57f3a 100644 --- a/combine-diff.c +++ b/combine-diff.c @@ -831,10 +831,11 @@ void show_combined_diff(struct combine_diff_path *p, case DIFF_FORMAT_NAME: show_raw_diff(p, num_parent, rev); return; - - default: case DIFF_FORMAT_PATCH: 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 combine_diff_path *p, *paths = NULL; int num_parent, i, num_paths; + int do_diffstat; + do_diffstat = (opt->output_format == DIFF_FORMAT_DIFFSTAT || + opt->with_stat); diffopts = *opt; - diffopts.output_format = DIFF_FORMAT_NO_OUTPUT; diffopts.with_raw = 0; + diffopts.with_stat = 0; diffopts.recursive = 1; /* count parents */ @@ -864,14 +868,24 @@ void diff_tree_combined_merge(const unsigned char *sha1, parents; parents = parents->next, i++) { 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, "", &diffopts); diffcore_std(&diffopts); paths = intersect_paths(paths, i, num_parent); - if (diffopts.with_stat && rev->loginfo) - show_log(rev, rev->loginfo, "---\n"); + if (do_diffstat && rev->loginfo) + show_log(rev, rev->loginfo, + opt->with_stat ? "---\n" : "\n"); diff_flush(&diffopts); + if (opt->with_stat) + putchar('\n'); } /* find out surviving paths */ |