(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: { (SQ (Token id: Id.Lit_Chars val: 'Try various core-level commands in subdirectory.\n' span_id: 15 ) ) } spids: [13] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/lib-read-tree.sh)}) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:36) (Token id: Id.Lit_Chars val: '\tlong="a b c d e f g h i j k l m n o p q r s t u v w x y z" &&\n' span_id: 37 ) (Token id:Id.Lit_Chars val:'\tfor c in $long; do echo $c; done >one &&\n' span_id:38) (Token id:Id.Lit_Chars val:'\tmkdir dir &&\n' span_id:39) (Token id:Id.Lit_Chars val:'\tfor c in x y z $long a b c; do echo $c; done >dir/two &&\n' span_id:40) (Token id:Id.Lit_Chars val:'\tcp one original.one &&\n' span_id:41) (Token id:Id.Lit_Chars val:'\tcp dir/two original.two\n' span_id:42) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'update-index and ls-files' span_id:49))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:53) (Token id:Id.Lit_Chars val:'\tgit update-index --add one &&\n' span_id:54) (Token id:Id.Lit_Chars val:'\tcase "$(git ls-files)" in\n' span_id:55) (Token id:Id.Lit_Chars val:'\tone) echo pass one ;;\n' span_id:56) (Token id:Id.Lit_Chars val:'\t*) echo bad one; exit 1 ;;\n' span_id:57) (Token id:Id.Lit_Chars val:'\tesac &&\n' span_id:58) (Token id:Id.Lit_Chars val:'\t(\n' span_id:59) (Token id:Id.Lit_Chars val:'\t\tcd dir &&\n' span_id:60) (Token id:Id.Lit_Chars val:'\t\tgit update-index --add two &&\n' span_id:61) (Token id:Id.Lit_Chars val:'\t\tcase "$(git ls-files)" in\n' span_id:62) (Token id:Id.Lit_Chars val:'\t\ttwo) echo pass two ;;\n' span_id:63) (Token id:Id.Lit_Chars val:'\t\t*) echo bad two; exit 1 ;;\n' span_id:64) (Token id:Id.Lit_Chars val:'\t\tesac\n' span_id:65) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:66) (Token id:Id.Lit_Chars val:'\tcase "$(git ls-files)" in\n' span_id:67) (Token id:Id.Lit_Chars val:'\tdir/two"$LF"one) echo pass both ;;\n' span_id:68) (Token id:Id.Lit_Chars val:'\t*) echo bad; exit 1 ;;\n' span_id:69) (Token id:Id.Lit_Chars val:'\tesac\n' span_id:70) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:cat-file span_id:77))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:81) (Token id:Id.Lit_Chars val:'\ttwo=$(git ls-files -s dir/two) &&\n' span_id:82) (Token id:Id.Lit_Chars val:'\ttwo=$(expr "$two" : "[0-7]* \\\\([0-9a-f]*\\\\)") &&\n' span_id:83) (Token id:Id.Lit_Chars val:'\techo "$two" &&\n' span_id:84) (Token id:Id.Lit_Chars val:'\tgit cat-file -p "$two" >actual &&\n' span_id:85) (Token id:Id.Lit_Chars val:'\tcmp dir/two actual &&\n' span_id:86) (Token id:Id.Lit_Chars val:'\t(\n' span_id:87) (Token id:Id.Lit_Chars val:'\t\tcd dir &&\n' span_id:88) (Token id:Id.Lit_Chars val:'\t\tgit cat-file -p "$two" >actual &&\n' span_id:89) (Token id:Id.Lit_Chars val:'\t\tcmp two actual\n' span_id:90) (Token id:Id.Lit_Chars val:'\t)\n' span_id:91) ) } ) (C {(rm)} {(-f)} {(actual)} {(dir/actual)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:diff-files span_id:106))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:110) (Token id:Id.Lit_Chars val:'\techo a >>one &&\n' span_id:111) (Token id:Id.Lit_Chars val:'\techo d >>dir/two &&\n' span_id:112) (Token id: Id.Lit_Chars val: '\tcase "$(git diff-files --name-only)" in\n' span_id: 113 ) (Token id:Id.Lit_Chars val:'\tdir/two"$LF"one) echo pass top ;;\n' span_id:114) (Token id:Id.Lit_Chars val:'\t*) echo bad top; exit 1 ;;\n' span_id:115) (Token id:Id.Lit_Chars val:'\tesac &&\n' span_id:116) (Token id: Id.Lit_Chars val: '\t# diff should not omit leading paths\n' span_id: 117 ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:118) (Token id:Id.Lit_Chars val:'\t\tcd dir &&\n' span_id:119) (Token id:Id.Lit_Chars val:'\t\tcase "$(git diff-files --name-only)" in\n' span_id:120) (Token id: Id.Lit_Chars val: '\t\tdir/two"$LF"one) echo pass subdir ;;\n' span_id: 121 ) (Token id:Id.Lit_Chars val:'\t\t*) echo bad subdir; exit 1 ;;\n' span_id:122) (Token id:Id.Lit_Chars val:'\t\tesac &&\n' span_id:123) (Token id:Id.Lit_Chars val:'\t\tcase "$(git diff-files --name-only .)" in\n' span_id:124) (Token id: Id.Lit_Chars val: '\t\tdir/two) echo pass subdir limited ;;\n' span_id: 125 ) (Token id:Id.Lit_Chars val:'\t\t*) echo bad subdir limited; exit 1 ;;\n' span_id:126) (Token id:Id.Lit_Chars val:'\t\tesac\n' span_id:127) (Token id:Id.Lit_Chars val:'\t)\n' span_id:128) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:write-tree span_id:135))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:139) (Token id:Id.Lit_Chars val:'\ttop=$(git write-tree) &&\n' span_id:140) (Token id:Id.Lit_Chars val:'\techo $top &&\n' span_id:141) (Token id:Id.Lit_Chars val:'\t(\n' span_id:142) (Token id:Id.Lit_Chars val:'\t\tcd dir &&\n' span_id:143) (Token id:Id.Lit_Chars val:'\t\tsub=$(git write-tree) &&\n' span_id:144) (Token id:Id.Lit_Chars val:'\t\techo $sub &&\n' span_id:145) (Token id:Id.Lit_Chars val:'\t\ttest "z$top" = "z$sub"\n' span_id:146) (Token id:Id.Lit_Chars val:'\t)\n' span_id:147) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:checkout-index span_id:154))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:158) (Token id:Id.Lit_Chars val:'\tgit checkout-index -f -u one &&\n' span_id:159) (Token id:Id.Lit_Chars val:'\tcmp one original.one &&\n' span_id:160) (Token id:Id.Lit_Chars val:'\t(\n' span_id:161) (Token id:Id.Lit_Chars val:'\t\tcd dir &&\n' span_id:162) (Token id:Id.Lit_Chars val:'\t\tgit checkout-index -f -u two &&\n' span_id:163) (Token id:Id.Lit_Chars val:'\t\tcmp two ../original.two\n' span_id:164) (Token id:Id.Lit_Chars val:'\t)\n' span_id:165) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:read-tree span_id:172))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:176) (Token id:Id.Lit_Chars val:'\trm -f one dir/two &&\n' span_id:177) (Token id:Id.Lit_Chars val:'\ttree=$(git write-tree) &&\n' span_id:178) (Token id: Id.Lit_Chars val: '\tread_tree_u_must_succeed --reset -u "$tree" &&\n' span_id: 179 ) (Token id:Id.Lit_Chars val:'\tcmp one original.one &&\n' span_id:180) (Token id:Id.Lit_Chars val:'\tcmp dir/two original.two &&\n' span_id:181) (Token id:Id.Lit_Chars val:'\t(\n' span_id:182) (Token id:Id.Lit_Chars val:'\t\tcd dir &&\n' span_id:183) (Token id:Id.Lit_Chars val:'\t\trm -f two &&\n' span_id:184) (Token id: Id.Lit_Chars val: '\t\tread_tree_u_must_succeed --reset -u "$tree" &&\n' span_id: 185 ) (Token id:Id.Lit_Chars val:'\t\tcmp two ../original.two &&\n' span_id:186) (Token id:Id.Lit_Chars val:'\t\tcmp ../one ../original.one\n' span_id:187) (Token id:Id.Lit_Chars val:'\t)\n' span_id:188) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'alias expansion' span_id:195))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:199) (Token id:Id.Lit_Chars val:'\t(\n' span_id:200) (Token id:Id.Lit_Chars val:'\t\tgit config alias.test-status-alias status &&\n' span_id:201) (Token id:Id.Lit_Chars val:'\t\tcd dir &&\n' span_id:202) (Token id:Id.Lit_Chars val:'\t\tgit status &&\n' span_id:203) (Token id:Id.Lit_Chars val:'\t\tgit test-status-alias\n' span_id:204) (Token id:Id.Lit_Chars val:'\t)\n' span_id:205) ) } ) (C {(test_expect_success)} {(Id.KW_Bang '!') (MINGW)} {(SQ (Token id:Id.Lit_Chars val:'!alias expansion' span_id:215))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:219) (Token id:Id.Lit_Chars val:'\tpwd >expect &&\n' span_id:220) (Token id:Id.Lit_Chars val:'\t(\n' span_id:221) (Token id: Id.Lit_Chars val: '\t\tgit config alias.test-alias-directory !pwd &&\n' span_id: 222 ) (Token id:Id.Lit_Chars val:'\t\tcd dir &&\n' span_id:223) (Token id: Id.Lit_Chars val: '\t\tgit test-alias-directory >../actual\n' span_id: 224 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:225) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:226) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'GIT_PREFIX for !alias' span_id:233))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:237) (Token id:Id.Lit_Chars val:'\tprintf "dir/" >expect &&\n' span_id:238) (Token id:Id.Lit_Chars val:'\t(\n' span_id:239) (Token id: Id.Lit_Chars val: '\t\tgit config alias.test-alias-directory "!sh -c \\"printf \\$GIT_PREFIX\\"" &&\n' span_id: 240 ) (Token id:Id.Lit_Chars val:'\t\tcd dir &&\n' span_id:241) (Token id: Id.Lit_Chars val: '\t\tgit test-alias-directory >../actual\n' span_id: 242 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:243) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:244) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'GIT_PREFIX for built-ins' span_id:251))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:255) (Token id: Id.Lit_Chars val: '\t# Use GIT_EXTERNAL_DIFF to test that the "diff" built-in\n' span_id: 256 ) (Token id:Id.Lit_Chars val:'\t# receives the GIT_PREFIX variable.\n' span_id:257) (Token id:Id.Lit_Chars val:'\techo "dir/" >expect &&\n' span_id:258) (Token id:Id.Lit_Chars val:'\twrite_script diff <<-\\EOF &&\n' span_id:259) (Token id:Id.Lit_Chars val:'\tprintf "%s\\n" "$GIT_PREFIX"\n' span_id:260) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:261) (Token id:Id.Lit_Chars val:'\t(\n' span_id:262) (Token id:Id.Lit_Chars val:'\t\tcd dir &&\n' span_id:263) (Token id:Id.Lit_Chars val:'\t\techo "change" >two &&\n' span_id:264) (Token id: Id.Lit_Chars val: '\t\tGIT_EXTERNAL_DIFF=./diff git diff >../actual\n' span_id: 265 ) (Token id:Id.Lit_Chars val:'\t\tgit checkout -- two\n' span_id:266) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:267) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:268) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'no file/rev ambiguity check inside .git' span_id:275))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:279) (Token id:Id.Lit_Chars val:'\tgit commit -a -m 1 &&\n' span_id:280) (Token id:Id.Lit_Chars val:'\t(\n' span_id:281) (Token id:Id.Lit_Chars val:'\t\tcd .git &&\n' span_id:282) (Token id:Id.Lit_Chars val:'\t\tgit show -s HEAD\n' span_id:283) (Token id:Id.Lit_Chars val:'\t)\n' span_id:284) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'no file/rev ambiguity check inside a bare repo (explicit GIT_DIR)' span_id: 291 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:295) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -fr foo.git" &&\n' span_id: 296 ) (Token id:Id.Lit_Chars val:'\tgit clone -s --bare .git foo.git &&\n' span_id:297) (Token id:Id.Lit_Chars val:'\t(\n' span_id:298) (Token id:Id.Lit_Chars val:'\t\tcd foo.git &&\n' span_id:299) (Token id: Id.Lit_Chars val: '\t\t# older Git needed help by exporting GIT_DIR=.\n' span_id: 300 ) (Token id:Id.Lit_Chars val:'\t\t# to realize that it is inside a bare repository.\n' span_id:301) (Token id: Id.Lit_Chars val: '\t\t# We keep this test around for regression testing.\n' span_id: 302 ) (Token id:Id.Lit_Chars val:'\t\tGIT_DIR=. git show -s HEAD\n' span_id:303) (Token id:Id.Lit_Chars val:'\t)\n' span_id:304) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'no file/rev ambiguity check inside a bare repo' span_id:311))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:315) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -fr foo.git" &&\n' span_id: 316 ) (Token id:Id.Lit_Chars val:'\tgit clone -s --bare .git foo.git &&\n' span_id:317) (Token id:Id.Lit_Chars val:'\t(\n' span_id:318) (Token id:Id.Lit_Chars val:'\t\tcd foo.git &&\n' span_id:319) (Token id:Id.Lit_Chars val:'\t\tgit show -s HEAD\n' span_id:320) (Token id:Id.Lit_Chars val:'\t)\n' span_id:321) ) } ) (C {(test_expect_success)} {(SYMLINKS)} {(SQ (Token id:Id.Lit_Chars val:'detection should not be fooled by a symlink' span_id:330))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:334) (Token id:Id.Lit_Chars val:'\tgit clone -s .git another &&\n' span_id:335) (Token id:Id.Lit_Chars val:'\tln -s another yetanother &&\n' span_id:336) (Token id:Id.Lit_Chars val:'\t(\n' span_id:337) (Token id:Id.Lit_Chars val:'\t\tcd yetanother/.git &&\n' span_id:338) (Token id:Id.Lit_Chars val:'\t\tgit show -s HEAD\n' span_id:339) (Token id:Id.Lit_Chars val:'\t)\n' span_id:340) ) } ) (C {(test_done)}) ] )