git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Log message printout cleanups

From
Junio C Hamano <junkio@cox.net>
Date
Apr 18, 2006, 05:52 UTC
Message-ID
<7vd5ffig70.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<Pine.LNX.4.64.0604171751540.3701@g5.osdl.org>
Linus Torvalds <torvalds@osdl.org> writes:
Show 8 quoted lines
> There's actually something _wrong_ with "git log --stat". 
>
> What happens is that "git log" will enable "rev.combine_merges" by 
> default, and that means that together with "--stat" ignoring merges by 
> default, it will _instead_ generate a "--cc" diff for that merge.
>
> I'll leave that up to you, I'm getting pretty fed up with "git log" right 
> now ;)

The primary problem is that the code in "next" was before the "fancy diffstat for combined" work by Johannes; it punts and always shows the patch output even when stat is asked for.

I think this does what both of us want. One thing I noticed is that log-tree-diff-flush does "---\n" under --patch-with-stat but not under --stat; I matched that here.

-- >8 -- combine-diff: show diffstat with the first parent.

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

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>
---
 combine-diff.c |   24 +++++++++++++++++++-----
 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_d
 	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 unsi
 	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 unsi
 	     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 */
Previous: Linus TorvaldsNext: Linus Torvalds
Message 13 of 18 in “Fixes for option parsing”
  1. Linus TorvaldsApr 16, 2006
  2. Junio C HamanoApr 17, 2006
  3. Linus TorvaldsApr 17, 2006
  4. Linus TorvaldsApr 17, 2006
  5. Junio C HamanoApr 17, 2006
  6. Linus TorvaldsApr 17, 2006
  7. Log message printout cleanupsLinus Torvalds, Apr 17, 2006
  8. Junio C HamanoApr 17, 2006
  9. Linus TorvaldsApr 17, 2006
  10. Junio C HamanoApr 18, 2006
  11. Junio C HamanoApr 18, 2006
  12. Linus TorvaldsApr 18, 2006
  13. Junio C HamanoApr 18, 2006
  14. Linus TorvaldsApr 18, 2006
  15. Linus TorvaldsApr 18, 2006
  16. Junio C HamanoApr 18, 2006
  17. diff --stat: make sure to set recursive.Junio C Hamano, Apr 18, 2006
  18. Linus TorvaldsApr 18, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.