Many scripts compare actual and expected output using "diff -u". This is nicer than "cmp" because the output shows how the two differ. However, not all versions of diff understand -u, leading to unnecessary test failure. This adds a test_cmp function to the test scripts and switches all "diff -u" invocations to use it. The function uses the contents of "$GIT_TEST_CMP" to compare its arguments; the default is "diff -u". On systems with a less-capable diff, you can do: GIT_TEST_CMP=cmp make test Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			158 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
test_description='common tail optimization'
 | 
						|
 | 
						|
. ./test-lib.sh
 | 
						|
 | 
						|
z=zzzzzzzz ;# 8
 | 
						|
z="$z$z$z$z$z$z$z$z" ;# 64
 | 
						|
z="$z$z$z$z$z$z$z$z" ;# 512
 | 
						|
z="$z$z$z$z" ;# 2048
 | 
						|
z2047=$(expr "$z" : '.\(.*\)') ; #2047
 | 
						|
 | 
						|
x=zzzzzzzzzz			;# 10
 | 
						|
y="$x$x$x$x$x$x$x$x$x$x"	;# 100
 | 
						|
z="$y$y$y$y$y$y$y$y$y$y"	;# 1000
 | 
						|
z1000=$z
 | 
						|
z100=$y
 | 
						|
z10=$x
 | 
						|
 | 
						|
zs() {
 | 
						|
	count="$1"
 | 
						|
	while test "$count" -ge 1000
 | 
						|
	do
 | 
						|
		count=$(($count - 1000))
 | 
						|
		printf "%s" $z1000
 | 
						|
	done
 | 
						|
	while test "$count" -ge 100
 | 
						|
	do
 | 
						|
		count=$(($count - 100))
 | 
						|
		printf "%s" $z100
 | 
						|
	done
 | 
						|
	while test "$count" -ge 10
 | 
						|
	do
 | 
						|
		count=$(($count - 10))
 | 
						|
		printf "%s" $z10
 | 
						|
	done
 | 
						|
	while test "$count" -ge 1
 | 
						|
	do
 | 
						|
		count=$(($count - 1))
 | 
						|
		printf "z"
 | 
						|
	done
 | 
						|
}
 | 
						|
 | 
						|
zc () {
 | 
						|
	sed -e "/^index/d" \
 | 
						|
		-e "s/$z1000/Q/g" \
 | 
						|
		-e "s/QQQQQQQQQ/Z9000/g" \
 | 
						|
		-e "s/QQQQQQQQ/Z8000/g" \
 | 
						|
		-e "s/QQQQQQQ/Z7000/g" \
 | 
						|
		-e "s/QQQQQQ/Z6000/g" \
 | 
						|
		-e "s/QQQQQ/Z5000/g" \
 | 
						|
		-e "s/QQQQ/Z4000/g" \
 | 
						|
		-e "s/QQQ/Z3000/g" \
 | 
						|
		-e "s/QQ/Z2000/g" \
 | 
						|
		-e "s/Q/Z1000/g" \
 | 
						|
		-e "s/$z100/Q/g" \
 | 
						|
		-e "s/QQQQQQQQQ/Z900/g" \
 | 
						|
		-e "s/QQQQQQQQ/Z800/g" \
 | 
						|
		-e "s/QQQQQQQ/Z700/g" \
 | 
						|
		-e "s/QQQQQQ/Z600/g" \
 | 
						|
		-e "s/QQQQQ/Z500/g" \
 | 
						|
		-e "s/QQQQ/Z400/g" \
 | 
						|
		-e "s/QQQ/Z300/g" \
 | 
						|
		-e "s/QQ/Z200/g" \
 | 
						|
		-e "s/Q/Z100/g" \
 | 
						|
		-e "s/000Z//g" \
 | 
						|
		-e "s/$z10/Q/g" \
 | 
						|
		-e "s/QQQQQQQQQ/Z90/g" \
 | 
						|
		-e "s/QQQQQQQQ/Z80/g" \
 | 
						|
		-e "s/QQQQQQQ/Z70/g" \
 | 
						|
		-e "s/QQQQQQ/Z60/g" \
 | 
						|
		-e "s/QQQQQ/Z50/g" \
 | 
						|
		-e "s/QQQQ/Z40/g" \
 | 
						|
		-e "s/QQQ/Z30/g" \
 | 
						|
		-e "s/QQ/Z20/g" \
 | 
						|
		-e "s/Q/Z10/g" \
 | 
						|
		-e "s/00Z//g" \
 | 
						|
		-e "s/z/Q/g" \
 | 
						|
		-e "s/QQQQQQQQQ/Z9/g" \
 | 
						|
		-e "s/QQQQQQQQ/Z8/g" \
 | 
						|
		-e "s/QQQQQQQ/Z7/g" \
 | 
						|
		-e "s/QQQQQQ/Z6/g" \
 | 
						|
		-e "s/QQQQQ/Z5/g" \
 | 
						|
		-e "s/QQQQ/Z4/g" \
 | 
						|
		-e "s/QQQ/Z3/g" \
 | 
						|
		-e "s/QQ/Z2/g" \
 | 
						|
		-e "s/Q/Z1/g" \
 | 
						|
		-e "s/0Z//g" \
 | 
						|
	;
 | 
						|
}
 | 
						|
 | 
						|
expect_pattern () {
 | 
						|
	cnt="$1"
 | 
						|
	cat <<EOF
 | 
						|
diff --git a/file-a$cnt b/file-a$cnt
 | 
						|
--- a/file-a$cnt
 | 
						|
+++ b/file-a$cnt
 | 
						|
@@ -1 +1 @@
 | 
						|
-Z${cnt}a
 | 
						|
+Z${cnt}A
 | 
						|
diff --git a/file-b$cnt b/file-b$cnt
 | 
						|
--- a/file-b$cnt
 | 
						|
+++ b/file-b$cnt
 | 
						|
@@ -1 +1 @@
 | 
						|
-b
 | 
						|
+B
 | 
						|
diff --git a/file-c$cnt b/file-c$cnt
 | 
						|
--- a/file-c$cnt
 | 
						|
+++ b/file-c$cnt
 | 
						|
@@ -1 +1 @@
 | 
						|
-cZ$cnt
 | 
						|
\ No newline at end of file
 | 
						|
+CZ$cnt
 | 
						|
\ No newline at end of file
 | 
						|
diff --git a/file-d$cnt b/file-d$cnt
 | 
						|
--- a/file-d$cnt
 | 
						|
+++ b/file-d$cnt
 | 
						|
@@ -1 +1 @@
 | 
						|
-d
 | 
						|
+D
 | 
						|
EOF
 | 
						|
}
 | 
						|
 | 
						|
sample='1023 1024 1025 2047 4095'
 | 
						|
 | 
						|
test_expect_success setup '
 | 
						|
 | 
						|
	for n in $sample
 | 
						|
	do
 | 
						|
		( zs $n ; echo a ) >file-a$n &&
 | 
						|
		( echo b; zs $n; echo ) >file-b$n &&
 | 
						|
		( printf c; zs $n ) >file-c$n &&
 | 
						|
		( echo d; zs $n ) >file-d$n &&
 | 
						|
 | 
						|
		git add file-a$n file-b$n file-c$n file-d$n &&
 | 
						|
 | 
						|
		( zs $n ; echo A ) >file-a$n &&
 | 
						|
		( echo B; zs $n; echo ) >file-b$n &&
 | 
						|
		( printf C; zs $n ) >file-c$n &&
 | 
						|
		( echo D; zs $n ) >file-d$n &&
 | 
						|
 | 
						|
		expect_pattern $n || break
 | 
						|
 | 
						|
	done >expect
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'diff -U0' '
 | 
						|
 | 
						|
	for n in $sample
 | 
						|
	do
 | 
						|
		git diff -U0 file-?$n
 | 
						|
	done | zc >actual &&
 | 
						|
	test_cmp expect actual
 | 
						|
 | 
						|
'
 | 
						|
 | 
						|
test_done
 |