You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
1.9 KiB
82 lines
1.9 KiB
#!/bin/sh |
|
# |
|
# Copyright (c) 2007 David Symonds |
|
|
|
test_description='git checkout from subdirectories' |
|
|
|
. ./test-lib.sh |
|
|
|
test_expect_success setup ' |
|
|
|
echo "base" > file0 && |
|
git add file0 && |
|
mkdir dir1 && |
|
echo "hello" > dir1/file1 && |
|
git add dir1/file1 && |
|
mkdir dir2 && |
|
echo "bonjour" > dir2/file2 && |
|
git add dir2/file2 && |
|
test_tick && |
|
git commit -m "populate tree" |
|
|
|
' |
|
|
|
test_expect_success 'remove and restore with relative path' ' |
|
|
|
( |
|
cd dir1 && |
|
rm ../file0 && |
|
git checkout HEAD -- ../file0 && |
|
test "base" = "$(cat ../file0)" && |
|
rm ../dir2/file2 && |
|
git checkout HEAD -- ../dir2/file2 && |
|
test "bonjour" = "$(cat ../dir2/file2)" && |
|
rm ../file0 ./file1 && |
|
git checkout HEAD -- .. && |
|
test "base" = "$(cat ../file0)" && |
|
test "hello" = "$(cat file1)" |
|
) |
|
|
|
' |
|
|
|
test_expect_success 'checkout with empty prefix' ' |
|
|
|
rm file0 && |
|
git checkout HEAD -- file0 && |
|
test "base" = "$(cat file0)" |
|
|
|
' |
|
|
|
test_expect_success 'checkout with simple prefix' ' |
|
|
|
rm dir1/file1 && |
|
git checkout HEAD -- dir1 && |
|
test "hello" = "$(cat dir1/file1)" && |
|
rm dir1/file1 && |
|
git checkout HEAD -- dir1/file1 && |
|
test "hello" = "$(cat dir1/file1)" |
|
|
|
' |
|
|
|
# This is not expected to work as ls-files was not designed |
|
# to deal with such. Enable it when ls-files is updated. |
|
: test_expect_success 'checkout with complex relative path' ' |
|
|
|
rm file1 && |
|
git checkout HEAD -- ../dir1/../dir1/file1 && test -f ./file1 |
|
|
|
' |
|
|
|
test_expect_success 'relative path outside tree should fail' \ |
|
'test_must_fail git checkout HEAD -- ../../Makefile' |
|
|
|
test_expect_success 'incorrect relative path to file should fail (1)' \ |
|
'test_must_fail git checkout HEAD -- ../file0' |
|
|
|
test_expect_success 'incorrect relative path should fail (2)' \ |
|
'( cd dir1 && test_must_fail git checkout HEAD -- ./file0 )' |
|
|
|
test_expect_success 'incorrect relative path should fail (3)' \ |
|
'( cd dir1 && test_must_fail git checkout HEAD -- ../../file0 )' |
|
|
|
test_done
|
|
|