1#!/bin/sh 2 3test_description='setup taking and sanitizing funny paths' 4 5. ./test-lib.sh 6 7test_expect_success setup ' 8 9 mkdir -p a/b/c a/e && 10 D=$(pwd) && 11 >a/b/c/d && 12 >a/e/f 13 14' 15 16test_expect_success 'git add (absolute)' ' 17 18 git add "$D/a/b/c/d" && 19 git ls-files >current && 20 echo a/b/c/d >expect && 21 test_cmp expect current 22 23' 24 25 26test_expect_success 'git add (funny relative)' ' 27 28 rm -f .git/index && 29 ( 30 cd a/b && 31 git add "../e/./f" 32 ) && 33 git ls-files >current && 34 echo a/e/f >expect && 35 test_cmp expect current 36 37' 38 39test_expect_success 'git rm (absolute)' ' 40 41 rm -f .git/index && 42 git add a && 43 git rm -f --cached "$D/a/b/c/d" && 44 git ls-files >current && 45 echo a/e/f >expect && 46 test_cmp expect current 47 48' 49 50test_expect_success 'git rm (funny relative)' ' 51 52 rm -f .git/index && 53 git add a && 54 ( 55 cd a/b && 56 git rm -f --cached "../e/./f" 57 ) && 58 git ls-files >current && 59 echo a/b/c/d >expect && 60 test_cmp expect current 61 62' 63 64test_expect_success 'git ls-files (absolute)' ' 65 66 rm -f .git/index && 67 git add a && 68 git ls-files "$D/a/e/../b" >current && 69 echo a/b/c/d >expect && 70 test_cmp expect current 71 72' 73 74test_expect_success 'git ls-files (relative #1)' ' 75 76 rm -f .git/index && 77 git add a && 78 ( 79 cd a/b && 80 git ls-files "../b/c" 81 ) >current && 82 echo c/d >expect && 83 test_cmp expect current 84 85' 86 87test_expect_success 'git ls-files (relative #2)' ' 88 89 rm -f .git/index && 90 git add a && 91 ( 92 cd a/b && 93 git ls-files --full-name "../e/f" 94 ) >current && 95 echo a/e/f >expect && 96 test_cmp expect current 97 98' 99 100test_expect_success 'git ls-files (relative #3)' ' 101 102 rm -f .git/index && 103 git add a && 104 ( 105 cd a/b && 106 git ls-files "../e/f" 107 ) >current && 108 echo ../e/f >expect && 109 test_cmp expect current 110 111' 112 113test_expect_success 'commit using absolute path names' ' 114 git commit -m "foo" && 115 echo aa >>a/b/c/d && 116 git commit -m "aa" "$(pwd)/a/b/c/d" 117' 118 119test_expect_success 'log using absolute path names' ' 120 echo bb >>a/b/c/d && 121 git commit -m "bb" "$(pwd)/a/b/c/d" && 122 123 git log a/b/c/d >f1.txt && 124 git log "$(pwd)/a/b/c/d" >f2.txt && 125 test_cmp f1.txt f2.txt 126' 127 128test_expect_success 'blame using absolute path names' ' 129 git blame a/b/c/d >f1.txt && 130 git blame "$(pwd)/a/b/c/d" >f2.txt && 131 test_cmp f1.txt f2.txt 132' 133 134test_expect_success 'setup deeper work tree' ' 135 test_create_repo tester 136' 137 138test_expect_success 'add a directory outside the work tree' '( 139 cd tester && 140 d1="$(cd .. ; pwd)" && 141 test_must_fail git add "$d1" 142)' 143 144 145test_expect_success 'add a file outside the work tree, nasty case 1' '( 146 cd tester && 147 f="$(pwd)x" && 148 echo "$f" && 149 touch "$f" && 150 test_must_fail git add "$f" 151)' 152 153test_expect_success 'add a file outside the work tree, nasty case 2' '( 154 cd tester && 155 f="$(pwd | sed "s/.$//")x" && 156 echo "$f" && 157 touch "$f" && 158 test_must_fail git add "$f" 159)' 160 161test_done 162