#!/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)" ' test_expect_success 'checkout with complex relative path' ' ( cd dir1 && rm file1 && git checkout HEAD -- ../dir1/../dir1/file1 && test "hello" = "$(cat 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