(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"git checkout from subdirectories">)} spids: [10] ) ] spids: [10] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(setup)} { (SQ <"\n"> <"\n"> <"\techo \"base\" > file0 &&\n"> <"\tgit add file0 &&\n"> <"\tmkdir dir1 &&\n"> <"\techo \"hello\" > dir1/file1 &&\n"> <"\tgit add dir1/file1 &&\n"> <"\tmkdir dir2 &&\n"> <"\techo \"bonjour\" > dir2/file2 &&\n"> <"\tgit add dir2/file2 &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m \"populate tree\"\n"> <"\n"> ) } ) (C {(test_expect_success)} {(SQ <"remove and restore with relative path">)} { (SQ <"\n"> <"\n"> <"\t(\n"> <"\t\tcd dir1 &&\n"> <"\t\trm ../file0 &&\n"> <"\t\tgit checkout HEAD -- ../file0 &&\n"> <"\t\ttest \"base\" = \"$(cat ../file0)\" &&\n"> <"\t\trm ../dir2/file2 &&\n"> <"\t\tgit checkout HEAD -- ../dir2/file2 &&\n"> <"\t\ttest \"bonjour\" = \"$(cat ../dir2/file2)\" &&\n"> <"\t\trm ../file0 ./file1 &&\n"> <"\t\tgit checkout HEAD -- .. &&\n"> <"\t\ttest \"base\" = \"$(cat ../file0)\" &&\n"> <"\t\ttest \"hello\" = \"$(cat file1)\"\n"> <"\t)\n"> <"\n"> ) } ) (C {(test_expect_success)} {(SQ <"checkout with empty prefix">)} { (SQ <"\n"> <"\n"> <"\trm file0 &&\n"> <"\tgit checkout HEAD -- file0 &&\n"> <"\ttest \"base\" = \"$(cat file0)\"\n"> <"\n"> ) } ) (C {(test_expect_success)} {(SQ <"checkout with simple prefix">)} { (SQ <"\n"> <"\n"> <"\trm dir1/file1 &&\n"> <"\tgit checkout HEAD -- dir1 &&\n"> <"\ttest \"hello\" = \"$(cat dir1/file1)\" &&\n"> <"\trm dir1/file1 &&\n"> <"\tgit checkout HEAD -- dir1/file1 &&\n"> <"\ttest \"hello\" = \"$(cat dir1/file1)\"\n"> <"\n"> ) } ) (C {(test_expect_success)} {(SQ <"checkout with complex relative path">)} { (SQ <"\n"> <"\t(\n"> <"\t\tcd dir1 &&\n"> <"\t\trm file1 &&\n"> <"\t\tgit checkout HEAD -- ../dir1/../dir1/file1 &&\n"> <"\t\ttest \"hello\" = \"$(cat file1)\"\n"> <"\t)\n"> ) } ) (C {(test_expect_success)} {(SQ <"relative path outside tree should fail">)} {(SQ <"test_must_fail git checkout HEAD -- ../../Makefile">)} ) (C {(test_expect_success)} {(SQ <"incorrect relative path to file should fail (1)">)} {(SQ <"test_must_fail git checkout HEAD -- ../file0">)} ) (C {(test_expect_success)} {(SQ <"incorrect relative path should fail (2)">)} {(SQ <"( cd dir1 && test_must_fail git checkout HEAD -- ./file0 )">)} ) (C {(test_expect_success)} {(SQ <"incorrect relative path should fail (3)">)} {(SQ <"( cd dir1 && test_must_fail git checkout HEAD -- ../../file0 )">)} ) (C {(test_done)}) ] )