| #!/bin/sh | 
 | # | 
 | # Copyright (c) 2007 Junio C Hamano | 
 | # | 
 |  | 
 | test_description='git apply --whitespace=strip and configuration file. | 
 |  | 
 | ' | 
 |  | 
 | . ./test-lib.sh | 
 |  | 
 | test_expect_success setup ' | 
 | 	mkdir sub && | 
 | 	echo A >sub/file1 && | 
 | 	cp sub/file1 saved && | 
 | 	git add sub/file1 && | 
 | 	echo "B " >sub/file1 && | 
 | 	git diff >patch.file | 
 | ' | 
 |  | 
 | # Also handcraft GNU diff output; note this has trailing whitespace. | 
 | tr '_' ' ' >gpatch.file <<\EOF && | 
 | --- file1	2007-02-21 01:04:24.000000000 -0800 | 
 | +++ file1+	2007-02-21 01:07:44.000000000 -0800 | 
 | @@ -1 +1 @@ | 
 | -A | 
 | +B_ | 
 | EOF | 
 |  | 
 | sed -e 's|file1|sub/&|' gpatch.file >gpatch-sub.file && | 
 | sed -e ' | 
 | 	/^--- /s|file1|a/sub/&| | 
 | 	/^+++ /s|file1|b/sub/&| | 
 | ' gpatch.file >gpatch-ab-sub.file && | 
 |  | 
 | check_result () { | 
 | 	if grep " " "$1" | 
 | 	then | 
 | 		echo "Eh?" | 
 | 		false | 
 | 	elif grep B "$1" | 
 | 	then | 
 | 		echo Happy | 
 | 	else | 
 | 		echo "Huh?" | 
 | 		false | 
 | 	fi | 
 | } | 
 |  | 
 | test_expect_success 'apply --whitespace=strip' ' | 
 |  | 
 | 	rm -f sub/file1 && | 
 | 	cp saved sub/file1 && | 
 | 	git update-index --refresh && | 
 |  | 
 | 	git apply --whitespace=strip patch.file && | 
 | 	check_result sub/file1 | 
 | ' | 
 |  | 
 | test_expect_success 'apply --whitespace=strip from config' ' | 
 |  | 
 | 	rm -f sub/file1 && | 
 | 	cp saved sub/file1 && | 
 | 	git update-index --refresh && | 
 |  | 
 | 	git config apply.whitespace strip && | 
 | 	git apply patch.file && | 
 | 	check_result sub/file1 | 
 | ' | 
 |  | 
 | D=$(pwd) | 
 |  | 
 | test_expect_success 'apply --whitespace=strip in subdir' ' | 
 |  | 
 | 	cd "$D" && | 
 | 	git config --unset-all apply.whitespace && | 
 | 	rm -f sub/file1 && | 
 | 	cp saved sub/file1 && | 
 | 	git update-index --refresh && | 
 |  | 
 | 	cd sub && | 
 | 	git apply --whitespace=strip ../patch.file && | 
 | 	check_result file1 | 
 | ' | 
 |  | 
 | test_expect_success 'apply --whitespace=strip from config in subdir' ' | 
 |  | 
 | 	cd "$D" && | 
 | 	git config apply.whitespace strip && | 
 | 	rm -f sub/file1 && | 
 | 	cp saved sub/file1 && | 
 | 	git update-index --refresh && | 
 |  | 
 | 	cd sub && | 
 | 	git apply ../patch.file && | 
 | 	check_result file1 | 
 | ' | 
 |  | 
 | test_expect_success 'same in subdir but with traditional patch input' ' | 
 |  | 
 | 	cd "$D" && | 
 | 	git config apply.whitespace strip && | 
 | 	rm -f sub/file1 && | 
 | 	cp saved sub/file1 && | 
 | 	git update-index --refresh && | 
 |  | 
 | 	cd sub && | 
 | 	git apply ../gpatch.file && | 
 | 	check_result file1 | 
 | ' | 
 |  | 
 | test_expect_success 'same but with traditional patch input of depth 1' ' | 
 |  | 
 | 	cd "$D" && | 
 | 	git config apply.whitespace strip && | 
 | 	rm -f sub/file1 && | 
 | 	cp saved sub/file1 && | 
 | 	git update-index --refresh && | 
 |  | 
 | 	cd sub && | 
 | 	git apply ../gpatch-sub.file && | 
 | 	check_result file1 | 
 | ' | 
 |  | 
 | test_expect_success 'same but with traditional patch input of depth 2' ' | 
 |  | 
 | 	cd "$D" && | 
 | 	git config apply.whitespace strip && | 
 | 	rm -f sub/file1 && | 
 | 	cp saved sub/file1 && | 
 | 	git update-index --refresh && | 
 |  | 
 | 	cd sub && | 
 | 	git apply ../gpatch-ab-sub.file && | 
 | 	check_result file1 | 
 | ' | 
 |  | 
 | test_expect_success 'same but with traditional patch input of depth 1' ' | 
 |  | 
 | 	cd "$D" && | 
 | 	git config apply.whitespace strip && | 
 | 	rm -f sub/file1 && | 
 | 	cp saved sub/file1 && | 
 | 	git update-index --refresh && | 
 |  | 
 | 	git apply -p0 gpatch-sub.file && | 
 | 	check_result sub/file1 | 
 | ' | 
 |  | 
 | test_expect_success 'same but with traditional patch input of depth 2' ' | 
 |  | 
 | 	cd "$D" && | 
 | 	git config apply.whitespace strip && | 
 | 	rm -f sub/file1 && | 
 | 	cp saved sub/file1 && | 
 | 	git update-index --refresh && | 
 |  | 
 | 	git apply gpatch-ab-sub.file && | 
 | 	check_result sub/file1 | 
 | ' | 
 |  | 
 | test_expect_success 'in subdir with traditional patch input' ' | 
 | 	cd "$D" && | 
 | 	git config apply.whitespace strip && | 
 | 	cat >.gitattributes <<-EOF && | 
 | 	/* whitespace=blank-at-eol | 
 | 	sub/* whitespace=-blank-at-eol | 
 | 	EOF | 
 | 	rm -f sub/file1 && | 
 | 	cp saved sub/file1 && | 
 | 	git update-index --refresh && | 
 |  | 
 | 	cd sub && | 
 | 	git apply ../gpatch.file && | 
 | 	echo "B " >expect && | 
 | 	test_cmp expect file1 | 
 | ' | 
 |  | 
 | test_done |