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

[PATCH 7.3/8] diff --stat: limit graph part to 40 columns

From
Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Date
Feb 22, 2012, 11:51 UTC
Message-ID
<1329911507-10587-3-git-send-email-zbyszek@in.waw.pl>
In-Reply-To
<1329911507-10587-1-git-send-email-zbyszek@in.waw.pl>

The way that available columns are divided between the filename part and the graph part is modified to use as many columns as necessary for the filenames and up to 40 columns for the graph.

If commits changing a lot of lines are displayed in a wide terminal window (200 or more columns), and the +- graph would use the full width, the output would look bad. Messages wrapped to about 80 columns would be interspersed with very long +- lines. It makes sense to limit the width of the graph part to a fixed value, even if more columns are available. This fixed value is subjectively hard-coded to be 40 columns, which seems to work well for git.git and linux-2.6.git and some other repositories.

Signed-off-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
---
 Documentation/diff-options.txt |  2 +-
 diff.c                         |  8 ++++++--
 t/t4052-stat-output.sh         | 16 ++++++----------
 3 files changed, 13 insertions(+), 13 deletions(-)
diff --git Documentation/diff-options.txt Documentation/diff-options.txt
index 29647e5..e4d0e3e 100644
--- Documentation/diff-options.txt
+++ Documentation/diff-options.txt
@@ -54,7 +54,7 @@ endif::git-format-patch[]
 
 --stat[=<width>[,<name-width>[,<count>]]]::
 	Generate a diffstat. By default, as much space as necessary
-	will be used for the filename part, and the rest for
+	will be used for the filename part, and up to 40 columns for
 	the graph part. Maximum width defaults to terminal width,
 	or 80 columns if not connected to a terminal, and can be
 	overriden by `<width>`. The width of the filename part can be
diff --git diff.c diff.c
index f1c278f..8a9a387 100644
--- diff.c
+++ diff.c
@@ -1421,13 +1421,15 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options)
 	/*
 	 * We have width = stat_width or term_columns() columns total.
 	 * We want a maximum of min(max_len, stat_name_width) for the name part.
+	 * We want a maximum of min(max_change, 40) for the +- part.
 	 * We also need 1 for " " and 4 + decimal_width(max_change)
 	 * for " | NNNN " and one the empty column at the end, altogether
 	 * 6 + decimal_width(max_change).
 	 *
 	 * If there's not enough space, we will use the smaller of
 	 * stat_name_width (if set) and 5/8*width for the filename,
-	 * and the rest for constant elements + graph part.
+	 * and the rest for constant elements + graph part, but no more
+	 * than 40 for the graph part.
 	 * (5/8 gives 50 for filename and 30 for the constant parts + graph
 	 * for the standard terminal size).
 	 *
@@ -1452,7 +1454,7 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options)
 	/*
 	 * First assign sizes that are wanted, ignoring available width.
 	 */
-	graph_width = max_change;
+	graph_width = max_change < 40 ? max_change : 40;
 	name_width = (options->stat_name_width > 0 &&
 		      options->stat_name_width < max_len) ?
 		options->stat_name_width : max_len;
@@ -1463,6 +1465,8 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options)
 	if (name_width + number_width + 6 + graph_width > width) {
 		if (graph_width > width * 3/8 - number_width - 6)
 			graph_width = width * 3/8 - number_width - 6;
+		if (graph_width > 40)
+			graph_width =  40;
 		if (name_width > width - number_width - 6 - graph_width)
 			name_width = width - number_width - 6 - graph_width;
 		else
diff --git t/t4052-stat-output.sh t/t4052-stat-output.sh
index 84be8bd..1b237b7 100755
--- t/t4052-stat-output.sh
+++ t/t4052-stat-output.sh
@@ -78,11 +78,7 @@ test_expect_success 'preparation for big change tests' '
 '
 
 cat >expect80 <<'EOF'
- abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-EOF
-
-cat >expect200 <<'EOF'
- abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ abcd | 1000 ++++++++++++++++++++++++++++++++++++++++
 EOF
 
 while read verb expect cmd args
@@ -94,9 +90,9 @@ do
 	'
 done <<\EOF
 ignores expect80 format-patch -1 --stdout
-respects expect200 diff HEAD^ HEAD --stat
-respects expect200 show --stat
-respects expect200 log -1 --stat
+respects expect80 diff HEAD^ HEAD --stat
+respects expect80 show --stat
+respects expect80 log -1 --stat
 EOF
 
 cat >expect40 <<'EOF'
@@ -170,7 +166,7 @@ cat >expect80 <<'EOF'
  ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++++++++++
 EOF
 cat >expect200 <<'EOF'
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++++++++++++++++++++++++++++++
 EOF
 while read verb expect cmd args
 do
@@ -187,7 +183,7 @@ respects expect200 log -1 --stat
 EOF
 
 cat >expect <<'EOF'
- abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ abcd | 1000 ++++++++++++++++++++++++++++++++++++++++
 EOF
 test_expect_success 'merge --stat respects COLUMNS (big change)' '
 	git checkout -b branch HEAD^^ &&
-- 
1.7.9.1.355.ge8a9f
Previous: Zbigniew Jędrzejewski-SzmekNext: Junio C Hamano
Message 18 of 35 in “diff --stat: use the full terminal width”
  1. 0/8 diff --stat: use the full terminal widthZbigniew Jędrzejewski-Szmek, Feb 20, 2012
  2. 1/8 make lineno_width() from blame reusable for othersZbigniew Jędrzejewski-Szmek, Feb 20, 2012
  3. 2/8 diff --stat: tests for long filenames and big change countsZbigniew Jędrzejewski-Szmek, Feb 20, 2012
  4. 3/8 diff --stat: use the full terminal widthZbigniew Jędrzejewski-Szmek, Feb 20, 2012
  5. 4/8 show --stat: use the full terminal widthZbigniew Jędrzejewski-Szmek, Feb 20, 2012
  6. 5/8 log --stat: use the full terminal widthZbigniew Jędrzejewski-Szmek, Feb 20, 2012
  7. 6/8 merge --stat: use the full terminal widthZbigniew Jędrzejewski-Szmek, Feb 20, 2012
  8. 7/8 diff --stat: limit graph part to 40 columnsZbigniew Jędrzejewski-Szmek, Feb 20, 2012
  9. 8/8 diff --stat: use less columns for change countsZbigniew Jędrzejewski-Szmek, Feb 20, 2012
  10. Junio C HamanoFeb 20, 2012
  11. Zbigniew Jędrzejewski-SzmekFeb 21, 2012
  12. Junio C HamanoFeb 21, 2012
  13. Zbigniew Jędrzejewski-SzmekFeb 21, 2012
  14. Junio C HamanoFeb 21, 2012
  15. Zbigniew Jędrzejewski-SzmekFeb 22, 2012
  16. 1/8 diff --stat: use a maximum of 5/8 for the filename partZbigniew Jędrzejewski-Szmek, Feb 22, 2012
  17. 2/8 diff --stat: add a test for output with COLUMNS=40Zbigniew Jędrzejewski-Szmek, Feb 22, 2012
  18. 3/8 diff --stat: limit graph part to 40 columnsZbigniew Jędrzejewski-Szmek, Feb 22, 2012
  19. Junio C HamanoFeb 22, 2012
  20. 0/11 diff --stat: use the full terminal widthZbigniew Jędrzejewski-Szmek, Feb 24, 2012
  21. 01/11 make lineno_width() from blame reusable for othersZbigniew Jędrzejewski-Szmek, Feb 24, 2012
  22. 02/11 diff --stat: tests for long filenames and big change countsZbigniew Jędrzejewski-Szmek, Feb 24, 2012
  23. 03/11 diff --stat: use the full terminal widthZbigniew Jędrzejewski-Szmek, Feb 24, 2012
  24. 04/11 show --stat: use the full terminal widthZbigniew Jędrzejewski-Szmek, Feb 24, 2012
  25. 05/11 log --stat: use the full terminal widthZbigniew Jędrzejewski-Szmek, Feb 24, 2012
  26. 06/11 merge --stat: use the full terminal widthZbigniew Jędrzejewski-Szmek, Feb 24, 2012
  27. 07/11 diff --stat: use a maximum of 5/8 for the filename partZbigniew Jędrzejewski-Szmek, Feb 24, 2012
  28. 08/11 diff --stat: add a test for output with COLUMNS=40Zbigniew Jędrzejewski-Szmek, Feb 24, 2012
  29. 09/11 diff --stat: enable limiting of the graph partZbigniew Jędrzejewski-Szmek, Feb 24, 2012
  30. 10/11 diff --stat: add config option to limit graph widthZbigniew Jędrzejewski-Szmek, Feb 24, 2012
  31. 11/11 diff --stat: use less columns for change countsZbigniew Jędrzejewski-Szmek, Feb 24, 2012
  32. Nguyen Thai Ngoc DuyFeb 21, 2012
  33. Zbigniew Jędrzejewski-SzmekFeb 21, 2012
  34. Miles BaderFeb 23, 2012
  35. Junio C HamanoFeb 23, 2012

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.