(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)})
  ]
)