| #!/bin/sh | 
 |  | 
 | test_description='setup taking and sanitizing funny paths' | 
 |  | 
 | . ./test-lib.sh | 
 |  | 
 | test_expect_success setup ' | 
 |  | 
 | 	mkdir -p a/b/c a/e && | 
 | 	D=$(pwd) && | 
 | 	>a/b/c/d && | 
 | 	>a/e/f | 
 |  | 
 | ' | 
 |  | 
 | test_expect_success 'git add (absolute)' ' | 
 |  | 
 | 	git add "$D/a/b/c/d" && | 
 | 	git ls-files >current && | 
 | 	echo a/b/c/d >expect && | 
 | 	test_cmp expect current | 
 |  | 
 | ' | 
 |  | 
 |  | 
 | test_expect_success 'git add (funny relative)' ' | 
 |  | 
 | 	rm -f .git/index && | 
 | 	( | 
 | 		cd a/b && | 
 | 		git add "../e/./f" | 
 | 	) && | 
 | 	git ls-files >current && | 
 | 	echo a/e/f >expect && | 
 | 	test_cmp expect current | 
 |  | 
 | ' | 
 |  | 
 | test_expect_success 'git rm (absolute)' ' | 
 |  | 
 | 	rm -f .git/index && | 
 | 	git add a && | 
 | 	git rm -f --cached "$D/a/b/c/d" && | 
 | 	git ls-files >current && | 
 | 	echo a/e/f >expect && | 
 | 	test_cmp expect current | 
 |  | 
 | ' | 
 |  | 
 | test_expect_success 'git rm (funny relative)' ' | 
 |  | 
 | 	rm -f .git/index && | 
 | 	git add a && | 
 | 	( | 
 | 		cd a/b && | 
 | 		git rm -f --cached "../e/./f" | 
 | 	) && | 
 | 	git ls-files >current && | 
 | 	echo a/b/c/d >expect && | 
 | 	test_cmp expect current | 
 |  | 
 | ' | 
 |  | 
 | test_expect_success 'git ls-files (absolute)' ' | 
 |  | 
 | 	rm -f .git/index && | 
 | 	git add a && | 
 | 	git ls-files "$D/a/e/../b" >current && | 
 | 	echo a/b/c/d >expect && | 
 | 	test_cmp expect current | 
 |  | 
 | ' | 
 |  | 
 | test_expect_success 'git ls-files (relative #1)' ' | 
 |  | 
 | 	rm -f .git/index && | 
 | 	git add a && | 
 | 	( | 
 | 		cd a/b && | 
 | 		git ls-files "../b/c" | 
 | 	)  >current && | 
 | 	echo c/d >expect && | 
 | 	test_cmp expect current | 
 |  | 
 | ' | 
 |  | 
 | test_expect_success 'git ls-files (relative #2)' ' | 
 |  | 
 | 	rm -f .git/index && | 
 | 	git add a && | 
 | 	( | 
 | 		cd a/b && | 
 | 		git ls-files --full-name "../e/f" | 
 | 	)  >current && | 
 | 	echo a/e/f >expect && | 
 | 	test_cmp expect current | 
 |  | 
 | ' | 
 |  | 
 | test_expect_success 'git ls-files (relative #3)' ' | 
 |  | 
 | 	rm -f .git/index && | 
 | 	git add a && | 
 | 	( | 
 | 		cd a/b && | 
 | 		if git ls-files "../e/f" | 
 | 		then | 
 | 			echo Gaah, should have failed | 
 | 			exit 1 | 
 | 		else | 
 | 			: happy | 
 | 		fi | 
 | 	) | 
 |  | 
 | ' | 
 |  | 
 | test_expect_success 'commit using absolute path names' ' | 
 | 	git commit -m "foo" && | 
 | 	echo aa >>a/b/c/d && | 
 | 	git commit -m "aa" "$(pwd)/a/b/c/d" | 
 | ' | 
 |  | 
 | test_expect_success 'log using absolute path names' ' | 
 | 	echo bb >>a/b/c/d && | 
 | 	git commit -m "bb" "$(pwd)/a/b/c/d" && | 
 |  | 
 | 	git log a/b/c/d >f1.txt && | 
 | 	git log "$(pwd)/a/b/c/d" >f2.txt && | 
 | 	test_cmp f1.txt f2.txt | 
 | ' | 
 |  | 
 | test_expect_success 'blame using absolute path names' ' | 
 | 	git blame a/b/c/d >f1.txt && | 
 | 	git blame "$(pwd)/a/b/c/d" >f2.txt && | 
 | 	test_cmp f1.txt f2.txt | 
 | ' | 
 |  | 
 | test_expect_success 'setup deeper work tree' ' | 
 | 	test_create_repo tester | 
 | ' | 
 |  | 
 | test_expect_success 'add a directory outside the work tree' '( | 
 | 	cd tester && | 
 | 	d1="$(cd .. ; pwd)" && | 
 | 	test_must_fail git add "$d1" | 
 | )' | 
 |  | 
 |  | 
 | test_expect_success 'add a file outside the work tree, nasty case 1' '( | 
 | 	cd tester && | 
 | 	f="$(pwd)x" && | 
 | 	echo "$f" && | 
 | 	touch "$f" && | 
 | 	test_must_fail git add "$f" | 
 | )' | 
 |  | 
 | test_expect_success 'add a file outside the work tree, nasty case 2' '( | 
 | 	cd tester && | 
 | 	f="$(pwd | sed "s/.$//")x" && | 
 | 	echo "$f" && | 
 | 	touch "$f" && | 
 | 	test_must_fail git add "$f" | 
 | )' | 
 |  | 
 | test_done |