| #!/bin/sh | 
 |  | 
 | test_description=gitattributes | 
 |  | 
 | . ./test-lib.sh | 
 |  | 
 | attr_check () { | 
 |  | 
 | 	path="$1" | 
 | 	expect="$2" | 
 |  | 
 | 	git check-attr test -- "$path" >actual && | 
 | 	echo "$path: test: $2" >expect && | 
 | 	test_cmp expect actual | 
 |  | 
 | } | 
 |  | 
 |  | 
 | test_expect_success 'setup' ' | 
 |  | 
 | 	mkdir -p a/b/d a/c && | 
 | 	( | 
 | 		echo "f	test=f" | 
 | 		echo "a/i test=a/i" | 
 | 	) >.gitattributes && | 
 | 	( | 
 | 		echo "g test=a/g" && | 
 | 		echo "b/g test=a/b/g" | 
 | 	) >a/.gitattributes && | 
 | 	( | 
 | 		echo "h test=a/b/h" && | 
 | 		echo "d/* test=a/b/d/*" | 
 | 	) >a/b/.gitattributes | 
 |  | 
 | ' | 
 |  | 
 | test_expect_success 'attribute test' ' | 
 |  | 
 | 	attr_check f f && | 
 | 	attr_check a/f f && | 
 | 	attr_check a/c/f f && | 
 | 	attr_check a/g a/g && | 
 | 	attr_check a/b/g a/b/g && | 
 | 	attr_check b/g unspecified && | 
 | 	attr_check a/b/h a/b/h && | 
 | 	attr_check a/b/d/g "a/b/d/*" | 
 |  | 
 | ' | 
 |  | 
 | test_expect_success 'root subdir attribute test' ' | 
 |  | 
 | 	attr_check a/i a/i && | 
 | 	attr_check subdir/a/i unspecified | 
 |  | 
 | ' | 
 |  | 
 | test_expect_success 'setup bare' ' | 
 |  | 
 | 	git clone --bare . bare.git && | 
 | 	cd bare.git | 
 |  | 
 | ' | 
 |  | 
 | test_expect_success 'bare repository: check that .gitattribute is ignored' ' | 
 |  | 
 | 	( | 
 | 		echo "f	test=f" | 
 | 		echo "a/i test=a/i" | 
 | 	) >.gitattributes && | 
 | 	attr_check f unspecified && | 
 | 	attr_check a/f unspecified && | 
 | 	attr_check a/c/f unspecified && | 
 | 	attr_check a/i unspecified && | 
 | 	attr_check subdir/a/i unspecified | 
 |  | 
 | ' | 
 |  | 
 | test_expect_success 'bare repository: test info/attributes' ' | 
 |  | 
 | 	( | 
 | 		echo "f	test=f" | 
 | 		echo "a/i test=a/i" | 
 | 	) >info/attributes && | 
 | 	attr_check f f && | 
 | 	attr_check a/f f && | 
 | 	attr_check a/c/f f && | 
 | 	attr_check a/i a/i && | 
 | 	attr_check subdir/a/i unspecified | 
 |  | 
 | ' | 
 |  | 
 | test_done |