| #!/bin/sh | 
 |  | 
 | test_description='diff --relative tests' | 
 | . ./test-lib.sh | 
 |  | 
 | test_expect_success 'setup' ' | 
 | 	git commit --allow-empty -m empty && | 
 | 	echo content >file1 && | 
 | 	mkdir subdir && | 
 | 	echo other content >subdir/file2 && | 
 | 	blob=$(git hash-object subdir/file2) && | 
 | 	git add . && | 
 | 	git commit -m one | 
 | ' | 
 |  | 
 | check_diff () { | 
 | 	dir=$1 | 
 | 	shift | 
 | 	expect=$1 | 
 | 	shift | 
 | 	short_blob=$(git rev-parse --short $blob) | 
 | 	cat >expected <<-EOF | 
 | 	diff --git a/$expect b/$expect | 
 | 	new file mode 100644 | 
 | 	index 0000000..$short_blob | 
 | 	--- /dev/null | 
 | 	+++ b/$expect | 
 | 	@@ -0,0 +1 @@ | 
 | 	+other content | 
 | 	EOF | 
 | 	test_expect_success "-p $*" " | 
 | 		git -C '$dir' diff -p $* HEAD^ >actual && | 
 | 		test_cmp expected actual | 
 | 	" | 
 | } | 
 |  | 
 | check_numstat () { | 
 | 	dir=$1 | 
 | 	shift | 
 | 	expect=$1 | 
 | 	shift | 
 | 	cat >expected <<-EOF | 
 | 	1	0	$expect | 
 | 	EOF | 
 | 	test_expect_success "--numstat $*" " | 
 | 		echo '1	0	$expect' >expected && | 
 | 		git -C '$dir' diff --numstat $* HEAD^ >actual && | 
 | 		test_cmp expected actual | 
 | 	" | 
 | } | 
 |  | 
 | check_stat () { | 
 | 	dir=$1 | 
 | 	shift | 
 | 	expect=$1 | 
 | 	shift | 
 | 	cat >expected <<-EOF | 
 | 	 $expect | 1 + | 
 | 	 1 file changed, 1 insertion(+) | 
 | 	EOF | 
 | 	test_expect_success "--stat $*" " | 
 | 		git -C '$dir' diff --stat $* HEAD^ >actual && | 
 | 		test_i18ncmp expected actual | 
 | 	" | 
 | } | 
 |  | 
 | check_raw () { | 
 | 	dir=$1 | 
 | 	shift | 
 | 	expect=$1 | 
 | 	shift | 
 | 	cat >expected <<-EOF | 
 | 	:000000 100644 0000000000000000000000000000000000000000 $blob A	$expect | 
 | 	EOF | 
 | 	test_expect_success "--raw $*" " | 
 | 		git -C '$dir' diff --no-abbrev --raw $* HEAD^ >actual && | 
 | 		test_cmp expected actual | 
 | 	" | 
 | } | 
 |  | 
 | for type in diff numstat stat raw | 
 | do | 
 | 	check_$type . file2 --relative=subdir/ | 
 | 	check_$type . file2 --relative=subdir | 
 | 	check_$type subdir file2 --relative | 
 | 	check_$type . dir/file2 --relative=sub | 
 | done | 
 |  | 
 | test_done |