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

[PATCH v7a 1/9] diff --stat: tests for long filenames and big change counts

From
Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Date
Mar 1, 2012, 12:26 UTC
Message-ID
<1330604806-30288-1-git-send-email-zbyszek@in.waw.pl>
In-Reply-To
<7vfwdts6wj.fsf@alter.siamese.dyndns.org>
From: Junio C Hamano <gitster@pobox.com>

In preparation for updates to the "diff --stat" that updates the logic to split the allotted columns into the name part and the graph part to make the output more readable, add a handful of tests to document the corner case behaviour in which long filenames and big changes are shown.

When a pathname is so long that it cannot fit on the column, the current code truncates it to make sure that the graph part has enough room to show a meaningful graph. If the actual change is small (e.g. only one line changed), this results in the final output that is shorter than the width we aim for.

Signed-off-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
v7a:

De-decuplicate new tests added in t4014 and t4052. Test descriptions are taken from t4014, but the tests are all added in t4052.

This patch is a merge of 't4014: addtional format-patch test vectors' from Junio C Hamano and v7 of my 'diff --stat: tests for long filenames and big change counts'.

The rest of the series is only updated to apply cleanly after the changes to tests.

[This patch series does not include the additional patches to minimize the number of columns used for the change count number.]

 t/t4052-stat-output.sh |  182 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 182 insertions(+)
 create mode 100755 t/t4052-stat-output.sh
diff --git a/t/t4052-stat-output.sh b/t/t4052-stat-output.sh
new file mode 100755
index 0000000..f766c47
--- /dev/null
+++ b/t/t4052-stat-output.sh
@@ -0,0 +1,182 @@
+#!/bin/sh
+#
+# Copyright (c) 2012 Zbigniew Jędrzejewski-Szmek
+#
+
+test_description='test --stat output of various commands'
+
+. ./test-lib.sh
+. "$TEST_DIRECTORY"/lib-terminal.sh
+
+# 120 character name
+name=aaaaaaaaaa
+name=$name$name$name$name$name$name$name$name$name$name$name$name
+test_expect_success 'preparation' '
+	>"$name" &&
+	git add "$name" &&
+	git commit -m message &&
+	echo a >"$name" &&
+	git commit -m message "$name"
+'
+
+while read cmd args
+do
+	cat >expect <<-'EOF'
+	 ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |    1 +
+	EOF
+	test_expect_success "$cmd: a short graph bar does not extend to the full width" '
+		git $cmd $args >output &&
+		grep " | " output >actual &&
+		test_cmp expect actual
+	'
+
+	cat >expect <<-'EOF'
+	 ...aaaaaaaaaaaaaaaaaaaaaa |    1 +
+	EOF
+	test_expect_success "$cmd --stat=width: name is chopped to leave room to the right of a short bar" '
+		git $cmd $args --stat=40 >output &&
+		grep " | " output >actual &&
+		test_cmp expect actual
+	'
+
+	test_expect_success "$cmd --stat-width=width with long name" '
+		git $cmd $args --stat-width=40 >output &&
+		grep " | " output >actual &&
+		test_cmp expect actual
+	'
+
+	cat >expect <<-'EOF'
+	 ...aaaaaaaaaaaaaaaaaaaaaaaaaaa |    1 +
+	EOF
+	test_expect_success "$cmd --stat=...,name-width with long name" '
+		git $cmd $args --stat=60,30 >output &&
+		grep " | " output >actual &&
+		test_cmp expect actual
+	'
+
+	test_expect_success "$cmd --stat-name-width with long name" '
+		git $cmd $args --stat-name-width=30 >output &&
+		grep " | " output >actual &&
+		test_cmp expect actual
+	'
+done <<\EOF
+format-patch -1 --stdout
+diff HEAD^ HEAD --stat
+show --stat
+log -1 --stat
+EOF
+
+
+test_expect_success 'preparation for big change tests' '
+	>abcd &&
+	git add abcd &&
+	git commit -m message &&
+	i=0 &&
+	while test $i -lt 1000
+	do
+		echo $i && i=$(($i + 1))
+	done >abcd &&
+	git commit -m message abcd
+'
+
+cat >expect80 <<'EOF'
+ abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+EOF
+
+while read verb expect cmd args
+do
+	test_expect_success "$cmd $verb COLUMNS (big change)" '
+		COLUMNS=200 git $cmd $args >output
+		grep " | " output >actual &&
+		test_cmp "$expect" actual
+	'
+done <<\EOF
+ignores expect80 format-patch -1 --stdout
+ignores expect80 diff HEAD^ HEAD --stat
+ignores expect80 show --stat
+ignores expect80 log -1 --stat
+EOF
+
+cat >expect <<'EOF'
+ abcd | 1000 ++++++++++++++++++++++++++
+EOF
+while read cmd args
+do
+	test_expect_success "$cmd --stat=width with big change" '
+		git $cmd $args --stat=40 >output
+		grep " | " output >actual &&
+		test_cmp expect actual
+	'
+
+	test_expect_success "$cmd --stat-width=width with big change" '
+		git $cmd $args --stat-width=40 >output
+		grep " | " output >actual &&
+		test_cmp expect actual
+	'
+done <<\EOF
+format-patch -1 --stdout
+diff HEAD^ HEAD --stat
+show --stat
+log -1 --stat
+EOF
+
+test_expect_success 'preparation for long filename tests' '
+	cp abcd aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
+	git add aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
+	git commit -m message
+'
+
+cat >expect <<'EOF'
+ ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++
+EOF
+while read cmd args
+do
+	test_expect_success "$cmd --stat=width with big change and long name favors name part" '
+		git $cmd $args --stat-width=60 >output &&
+		grep " | " output >actual &&
+		test_cmp expect actual
+	'
+done <<\EOF
+format-patch -1 --stdout
+diff HEAD^ HEAD --stat
+show --stat
+log -1 --stat
+EOF
+
+cat >expect80 <<'EOF'
+ ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++++++++++
+EOF
+while read verb expect cmd args
+do
+	test_expect_success "$cmd $verb COLUMNS (long filename)" '
+		COLUMNS=200 git $cmd $args >output
+		grep " | " output >actual &&
+		test_cmp "$expect" actual
+	'
+done <<\EOF
+ignores expect80 format-patch -1 --stdout
+ignores expect80 diff HEAD^ HEAD --stat
+ignores expect80 show --stat
+ignores expect80 log -1 --stat
+EOF
+
+cat >expect <<'EOF'
+ abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+EOF
+test_expect_success 'merge --stat ignores COLUMNS (big change)' '
+	git checkout -b branch HEAD^^ &&
+	COLUMNS=100 git merge --stat --no-ff master^ >output &&
+	grep " | " output >actual
+	test_cmp expect actual
+'
+
+cat >expect <<'EOF'
+ ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++++++++++
+EOF
+test_expect_success 'merge --stat ignores COLUMNS (long filename)' '
+	COLUMNS=100 git merge --stat --no-ff master >output &&
+	grep " | " output >actual
+	test_cmp expect actual
+'
+
+test_done
-- 
1.7.9.2.399.gdf4d.dirty
Previous: Junio C HamanoNext: Zbigniew Jędrzejewski-Szmek
Message 8 of 23 in “Incremental updates to What's cooking”
  1. Junio C HamanoFeb 28, 2012
  2. Zbigniew Jędrzejewski-SzmekFeb 29, 2012
  3. Junio C HamanoFeb 29, 2012
  4. Zbigniew Jędrzejewski-SzmekFeb 29, 2012
  5. Junio C HamanoFeb 29, 2012
  6. Zbigniew Jędrzejewski-SzmekFeb 29, 2012
  7. Junio C HamanoFeb 29, 2012
  8. 1/9 diff --stat: tests for long filenames and big change countsZbigniew Jędrzejewski-Szmek, Mar 1, 2012
  9. 2/9 diff --stat: use the full terminal widthZbigniew Jędrzejewski-Szmek, Mar 1, 2012
  10. 3/9 show --stat: use the full terminal widthZbigniew Jędrzejewski-Szmek, Mar 1, 2012
  11. 4/9 log --stat: use the full terminal widthZbigniew Jędrzejewski-Szmek, Mar 1, 2012
  12. 5/9 merge --stat: use the full terminal widthZbigniew Jędrzejewski-Szmek, Mar 1, 2012
  13. 6/9 diff --stat: use a maximum of 5/8 for the filename partZbigniew Jędrzejewski-Szmek, Mar 1, 2012
  14. Junio C HamanoMar 1, 2012
  15. Jeff KingMar 26, 2012
  16. t4052: unset $COLUMNS inherited from environmentZbigniew Jędrzejewski-Szmek, Mar 27, 2012
  17. Jeff KingMar 27, 2012
  18. tests: unset COLUMNS inherited from environmentZbigniew Jędrzejewski-Szmek, Mar 27, 2012
  19. Jeff KingMar 27, 2012
  20. Johannes SixtMar 27, 2012
  21. 7/9 diff --stat: add a test for output with COLUMNS=40Zbigniew Jędrzejewski-Szmek, Mar 1, 2012
  22. 8/9 diff --stat: enable limiting of the graph partZbigniew Jędrzejewski-Szmek, Mar 1, 2012
  23. 9/9 diff --stat: add config option to limit graph widthZbigniew Jędrzejewski-Szmek, Mar 1, 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.