3 # Copyright (c) 2007 David Symonds
5 test_description
='git checkout from subdirectories'
9 test_expect_success setup
'
11 echo "base" > file0 &&
14 echo "hello" > dir1/file1 &&
17 echo "bonjour" > dir2/file2 &&
20 git commit -m "populate tree"
24 test_expect_success
'remove and restore with relative path' '
29 git checkout HEAD -- ../file0 &&
30 test "base" = "$(cat ../file0)" &&
32 git checkout HEAD -- ../dir2/file2 &&
33 test "bonjour" = "$(cat ../dir2/file2)" &&
34 rm ../file0 ./file1 &&
35 git checkout HEAD -- .. &&
36 test "base" = "$(cat ../file0)" &&
37 test "hello" = "$(cat file1)"
42 test_expect_success
'checkout with empty prefix' '
45 git checkout HEAD -- file0 &&
46 test "base" = "$(cat file0)"
50 test_expect_success
'checkout with simple prefix' '
53 git checkout HEAD -- dir1 &&
54 test "hello" = "$(cat dir1/file1)" &&
56 git checkout HEAD -- dir1/file1 &&
57 test "hello" = "$(cat dir1/file1)"
61 # This is not expected to work as ls-files was not designed
62 # to deal with such. Enable it when ls-files is updated.
63 : test_expect_success
'checkout with complex relative path' '
66 git checkout HEAD -- ../dir1/../dir1/file1 && test -f ./file1
70 test_expect_success
'relative path outside tree should fail' \
71 '! git checkout HEAD -- ../../Makefile'
73 test_expect_success
'incorrect relative path to file should fail (1)' \
74 '! git checkout HEAD -- ../file0'
76 test_expect_success
'incorrect relative path should fail (2)' \
77 '( cd dir1 && ! git checkout HEAD -- ./file0 )'
79 test_expect_success
'incorrect relative path should fail (3)' \
80 '( cd dir1 && ! git checkout HEAD -- ../../file0 )'