summaryrefslogtreecommitdiff
path: root/combine-diff.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-04-18 05:53:03 (GMT)
committerJunio C Hamano <junkio@cox.net>2006-04-18 05:53:03 (GMT)
commit965f803c323bb72a9dedbbc8f7ba00bbadb6cf58 (patch)
tree241b39df8e4290621181ebdadc950c45410fa63f /combine-diff.c
parentb073f26b256cded6252bafd34982eb6f69d2a4b6 (diff)
downloadgit-965f803c323bb72a9dedbbc8f7ba00bbadb6cf58.zip
git-965f803c323bb72a9dedbbc8f7ba00bbadb6cf58.tar.gz
git-965f803c323bb72a9dedbbc8f7ba00bbadb6cf58.tar.bz2
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>
Diffstat (limited to 'combine-diff.c')
-rw-r--r--combine-diff.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/combine-diff.c b/combine-diff.c
index aef9006..27f6f57 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 */