(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:'setup taking and sanitizing funny paths' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:20) (Token id:Id.Lit_Chars val:'\n' span_id:21) 
          (Token id:Id.Lit_Chars val:'\tmkdir -p a/b/c a/e &&\n' span_id:22) (Token id:Id.Lit_Chars val:'\tD=$(pwd) &&\n' span_id:23) 
          (Token id:Id.Lit_Chars val:'\t>a/b/c/d &&\n' span_id:24) (Token id:Id.Lit_Chars val:'\t>a/e/f\n' span_id:25) (Token id:Id.Lit_Chars val:'\n' span_id:26)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git add (absolute)' span_id:33))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:37) (Token id:Id.Lit_Chars val:'\n' span_id:38) 
          (Token id:Id.Lit_Chars val:'\tgit add "$D/a/b/c/d" &&\n' span_id:39) (Token id:Id.Lit_Chars val:'\tgit ls-files >current &&\n' span_id:40) 
          (Token id:Id.Lit_Chars val:'\techo a/b/c/d >expect &&\n' span_id:41) (Token id:Id.Lit_Chars val:'\ttest_cmp expect current\n' span_id:42) 
          (Token id:Id.Lit_Chars val:'\n' span_id:43)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git add (funny relative)' span_id:51))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:55) (Token id:Id.Lit_Chars val:'\n' span_id:56) 
          (Token id:Id.Lit_Chars val:'\trm -f .git/index &&\n' span_id:57) (Token id:Id.Lit_Chars val:'\t(\n' span_id:58) 
          (Token id:Id.Lit_Chars val:'\t\tcd a/b &&\n' span_id:59) (Token id:Id.Lit_Chars val:'\t\tgit add "../e/./f"\n' span_id:60) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:61) (Token id:Id.Lit_Chars val:'\tgit ls-files >current &&\n' span_id:62) 
          (Token id:Id.Lit_Chars val:'\techo a/e/f >expect &&\n' span_id:63) (Token id:Id.Lit_Chars val:'\ttest_cmp expect current\n' span_id:64) 
          (Token id:Id.Lit_Chars val:'\n' span_id:65)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git rm (absolute)' span_id:72))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:76) (Token id:Id.Lit_Chars val:'\n' span_id:77) 
          (Token id:Id.Lit_Chars val:'\trm -f .git/index &&\n' span_id:78) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:79) 
          (Token id:Id.Lit_Chars val:'\tgit rm -f --cached "$D/a/b/c/d" &&\n' span_id:80) (Token id:Id.Lit_Chars val:'\tgit ls-files >current &&\n' span_id:81) 
          (Token id:Id.Lit_Chars val:'\techo a/e/f >expect &&\n' span_id:82) (Token id:Id.Lit_Chars val:'\ttest_cmp expect current\n' span_id:83) 
          (Token id:Id.Lit_Chars val:'\n' span_id:84)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git rm (funny relative)' span_id:91))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:95) (Token id:Id.Lit_Chars val:'\n' span_id:96) 
          (Token id:Id.Lit_Chars val:'\trm -f .git/index &&\n' span_id:97) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:98) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:99) (Token id:Id.Lit_Chars val:'\t\tcd a/b &&\n' span_id:100) 
          (Token id:Id.Lit_Chars val:'\t\tgit rm -f --cached "../e/./f"\n' span_id:101) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:102) 
          (Token id:Id.Lit_Chars val:'\tgit ls-files >current &&\n' span_id:103) (Token id:Id.Lit_Chars val:'\techo a/b/c/d >expect &&\n' span_id:104) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect current\n' span_id:105) (Token id:Id.Lit_Chars val:'\n' span_id:106)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git ls-files (absolute)' span_id:113))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:117) (Token id:Id.Lit_Chars val:'\n' span_id:118) 
          (Token id:Id.Lit_Chars val:'\trm -f .git/index &&\n' span_id:119) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:120) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit ls-files "$D/a/e/../b" >current &&\n'
            span_id: 121
          ) (Token id:Id.Lit_Chars val:'\techo a/b/c/d >expect &&\n' span_id:122) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect current\n' span_id:123) (Token id:Id.Lit_Chars val:'\n' span_id:124)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git ls-files (relative #1)' span_id:131))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:135) (Token id:Id.Lit_Chars val:'\n' span_id:136) 
          (Token id:Id.Lit_Chars val:'\trm -f .git/index &&\n' span_id:137) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:138) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:139) (Token id:Id.Lit_Chars val:'\t\tcd a/b &&\n' span_id:140) 
          (Token id:Id.Lit_Chars val:'\t\tgit ls-files "../b/c"\n' span_id:141) (Token id:Id.Lit_Chars val:'\t)  >current &&\n' span_id:142) 
          (Token id:Id.Lit_Chars val:'\techo c/d >expect &&\n' span_id:143) (Token id:Id.Lit_Chars val:'\ttest_cmp expect current\n' span_id:144) 
          (Token id:Id.Lit_Chars val:'\n' span_id:145)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git ls-files (relative #2)' span_id:152))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:156) (Token id:Id.Lit_Chars val:'\n' span_id:157) 
          (Token id:Id.Lit_Chars val:'\trm -f .git/index &&\n' span_id:158) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:159) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:160) (Token id:Id.Lit_Chars val:'\t\tcd a/b &&\n' span_id:161) 
          (Token id:Id.Lit_Chars val:'\t\tgit ls-files --full-name "../e/f"\n' span_id:162) (Token id:Id.Lit_Chars val:'\t)  >current &&\n' span_id:163) 
          (Token id:Id.Lit_Chars val:'\techo a/e/f >expect &&\n' span_id:164) (Token id:Id.Lit_Chars val:'\ttest_cmp expect current\n' span_id:165) 
          (Token id:Id.Lit_Chars val:'\n' span_id:166)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git ls-files (relative #3)' span_id:173))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:177) (Token id:Id.Lit_Chars val:'\n' span_id:178) 
          (Token id:Id.Lit_Chars val:'\trm -f .git/index &&\n' span_id:179) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:180) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:181) (Token id:Id.Lit_Chars val:'\t\tcd a/b &&\n' span_id:182) 
          (Token id:Id.Lit_Chars val:'\t\tgit ls-files "../e/f"\n' span_id:183) (Token id:Id.Lit_Chars val:'\t)  >current &&\n' span_id:184) 
          (Token id:Id.Lit_Chars val:'\techo ../e/f >expect &&\n' span_id:185) (Token id:Id.Lit_Chars val:'\ttest_cmp expect current\n' span_id:186) 
          (Token id:Id.Lit_Chars val:'\n' span_id:187)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'commit using absolute path names' span_id:194))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:198) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "foo" &&\n' span_id:199) (Token id:Id.Lit_Chars val:'\techo aa >>a/b/c/d &&\n' span_id:200) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "aa" "$(pwd)/a/b/c/d"\n' span_id:201)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'log using absolute path names' span_id:208))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:212) 
          (Token id:Id.Lit_Chars val:'\techo bb >>a/b/c/d &&\n' span_id:213) (Token id:Id.Lit_Chars val:'\tgit commit -m "bb" "$(pwd)/a/b/c/d" &&\n' span_id:214) 
          (Token id:Id.Lit_Chars val:'\n' span_id:215) (Token id:Id.Lit_Chars val:'\tgit log a/b/c/d >f1.txt &&\n' span_id:216) 
          (Token id:Id.Lit_Chars val:'\tgit log "$(pwd)/a/b/c/d" >f2.txt &&\n' span_id:217) (Token id:Id.Lit_Chars val:'\ttest_cmp f1.txt f2.txt\n' span_id:218)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'blame using absolute path names' span_id:225))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:229) 
          (Token id:Id.Lit_Chars val:'\tgit blame a/b/c/d >f1.txt &&\n' span_id:230) (Token id:Id.Lit_Chars val:'\tgit blame "$(pwd)/a/b/c/d" >f2.txt &&\n' span_id:231) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp f1.txt f2.txt\n' span_id:232)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup deeper work tree' span_id:239))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:243) 
          (Token id:Id.Lit_Chars val:'\ttest_create_repo tester\n' span_id:244)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'add a directory outside the work tree' span_id:251))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'(\n' span_id:255) 
          (Token id:Id.Lit_Chars val:'\tcd tester &&\n' span_id:256) (Token id:Id.Lit_Chars val:'\td1="$(cd .. ; pwd)" &&\n' span_id:257) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git add "$d1"\n' span_id:258) (Token id:Id.Lit_Chars val:')' span_id:259)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'add a file outside the work tree, nasty case 1' span_id:267))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'(\n' span_id:271) 
          (Token id:Id.Lit_Chars val:'\tcd tester &&\n' span_id:272) (Token id:Id.Lit_Chars val:'\tf="$(pwd)x" &&\n' span_id:273) 
          (Token id:Id.Lit_Chars val:'\techo "$f" &&\n' span_id:274) (Token id:Id.Lit_Chars val:'\ttouch "$f" &&\n' span_id:275) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git add "$f"\n' span_id:276) (Token id:Id.Lit_Chars val:')' span_id:277)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'add a file outside the work tree, nasty case 2' span_id:284))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'(\n' span_id:288) 
          (Token id:Id.Lit_Chars val:'\tcd tester &&\n' span_id:289) (Token id:Id.Lit_Chars val:'\tf="$(pwd | sed "s/.$//")x" &&\n' span_id:290) 
          (Token id:Id.Lit_Chars val:'\techo "$f" &&\n' span_id:291) (Token id:Id.Lit_Chars val:'\ttouch "$f" &&\n' span_id:292) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git add "$f"\n' span_id:293) (Token id:Id.Lit_Chars val:')' span_id:294)
        )
      }
    )
    (C {(test_done)})
  ]
)