#!/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 && git ls-files "../e/f" ) >current && echo ../e/f >expect && test_cmp expect current ' 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