(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:'git ls-files -k and -m flags test.\n' span_id:15) 
                (Token id:Id.Lit_Chars val:'\n' span_id:16) (Token id:Id.Lit_Chars val:'This test prepares the following in the cache:\n' span_id:17) 
                (Token id:Id.Lit_Chars val:'\n' span_id:18) (Token id:Id.Lit_Chars val:'    path0       - a file\n' span_id:19) 
                (Token
                  id: Id.Lit_Chars
                  val: '    path1       - a symlink\n'
                  span_id: 20
                ) (Token id:Id.Lit_Chars val:'    path2/file2 - a file in a directory\n' span_id:21) 
                (Token
                  id: Id.Lit_Chars
                  val: '    path3/file3 - a file in a directory\n'
                  span_id: 22
                ) (Token id:Id.Lit_Chars val:'    pathx/ju    - a file in a directory\n' span_id:23) 
                (Token
                  id: Id.Lit_Chars
                  val: '    submod1/\t- a submodule\n'
                  span_id: 24
                ) (Token id:Id.Lit_Chars val:'    submod2/\t- another submodule\n' span_id:25) 
                (Token id:Id.Lit_Chars val:'\n' span_id:26) (Token id:Id.Lit_Chars val:'and the following on the filesystem:\n' span_id:27) 
                (Token id:Id.Lit_Chars val:'\n' span_id:28) (Token id:Id.Lit_Chars val:'    path0/file0 - a file in a directory\n' span_id:29) 
                (Token
                  id: Id.Lit_Chars
                  val: '    path1/file1 - a file in a directory\n'
                  span_id: 30
                ) (Token id:Id.Lit_Chars val:'    path2       - a file\n' span_id:31) 
                (Token
                  id: Id.Lit_Chars
                  val: '    path3       - a symlink\n'
                  span_id: 32
                ) (Token id:Id.Lit_Chars val:'    path4\t- a file\n' span_id:33) 
                (Token id:Id.Lit_Chars val:'    path5\t- a symlink\n' span_id:34) (Token id:Id.Lit_Chars val:'    path6/file6 - a file in a directory\n' span_id:35) 
                (Token
                  id: Id.Lit_Chars
                  val: '    pathx/ju/nk - a file in a directory to be killed\n'
                  span_id: 36
                ) (Token id:Id.Lit_Chars val:'    submod1/\t- a submodule (modified from the cache)\n' span_id:37) 
                (Token
                  id: Id.Lit_Chars
                  val: '    submod2/\t- a submodule (matches the cache)\n'
                  span_id: 38
                ) (Token id:Id.Lit_Chars val:'\n' span_id:39) 
                (Token
                  id: Id.Lit_Chars
                  val: 'git ls-files -k should report that existing filesystem objects\n'
                  span_id: 40
                ) (Token id:Id.Lit_Chars val:'path0/*, path1/*, path2 and path3 to be killed.\n' span_id:41) 
                (Token id:Id.Lit_Chars val:'\n' span_id:42) 
                (Token
                  id: Id.Lit_Chars
                  val: 'Also for modification test, the cache and working tree have:\n'
                  span_id: 43
                ) (Token id:Id.Lit_Chars val:'\n' span_id:44) 
                (Token
                  id: Id.Lit_Chars
                  val: '    path7       - an empty file, modified to a non-empty file.\n'
                  span_id: 45
                ) 
                (Token
                  id: Id.Lit_Chars
                  val: '    path8       - a non-empty file, modified to an empty file.\n'
                  span_id: 46
                ) (Token id:Id.Lit_Chars val:'    path9\t- an empty file, cache dirtied.\n' span_id:47) 
                (Token
                  id: Id.Lit_Chars
                  val: '    path10\t- a non-empty file, cache dirtied.\n'
                  span_id: 48
                ) (Token id:Id.Lit_Chars val:'\n' span_id:49) 
                (Token
                  id: Id.Lit_Chars
                  val: 'We should report path0, path1, path2/file2, path3/file3, path7 and path8\n'
                  span_id: 50
                ) 
                (Token
                  id: Id.Lit_Chars
                  val: 'modified without reporting path9 and path10.  submod1 is also modified.\n'
                  span_id: 51
                )
              )
            }
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git update-index --add to add various paths.' span_id:62))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:66) 
          (Token id:Id.Lit_Chars val:'\tdate >path0 &&\n' span_id:67) (Token id:Id.Lit_Chars val:'\ttest_ln_s_add xyzzy path1 &&\n' span_id:68) 
          (Token id:Id.Lit_Chars val:'\tmkdir path2 path3 pathx &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\tdate >path2/file2 &&\n' span_id:70) 
          (Token id:Id.Lit_Chars val:'\tdate >path3/file3 &&\n' span_id:71) (Token id:Id.Lit_Chars val:'\t>pathx/ju &&\n' span_id:72) 
          (Token id:Id.Lit_Chars val:'\t: >path7 &&\n' span_id:73) (Token id:Id.Lit_Chars val:'\tdate >path8 &&\n' span_id:74) 
          (Token id:Id.Lit_Chars val:'\t: >path9 &&\n' span_id:75) (Token id:Id.Lit_Chars val:'\tdate >path10 &&\n' span_id:76) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit update-index --add -- path0 path?/file? pathx/ju path7 path8 path9 path10 &&\n'
            span_id: 77
          ) (Token id:Id.Lit_Chars val:'\tgit init submod1 &&\n' span_id:78) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -C submod1 commit --allow-empty -m "empty 1" &&\n'
            span_id: 79
          ) (Token id:Id.Lit_Chars val:'\tgit init submod2 &&\n' span_id:80) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -C submod2 commit --allow-empty -m "empty 2" &&\n'
            span_id: 81
          ) (Token id:Id.Lit_Chars val:'\tgit update-index --add submod[12] &&\n' span_id:82) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:83) (Token id:Id.Lit_Chars val:'\t\tcd submod1 &&\n' span_id:84) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit --allow-empty -m "empty 1 (updated)"\n'
            span_id: 85
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:86) 
          (Token id:Id.Lit_Chars val:'\trm -fr path?\t# leave path10 alone\n' span_id:87)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git ls-files -k to show killed files.' span_id:94))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:98) 
          (Token id:Id.Lit_Chars val:'\tdate >path2 &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\tif test_have_prereq SYMLINKS\n' span_id:100) 
          (Token id:Id.Lit_Chars val:'\tthen\n' span_id:101) (Token id:Id.Lit_Chars val:'\t\tln -s frotz path3 &&\n' span_id:102) 
          (Token id:Id.Lit_Chars val:'\t\tln -s nitfol path5\n' span_id:103) (Token id:Id.Lit_Chars val:'\telse\n' span_id:104) 
          (Token id:Id.Lit_Chars val:'\t\tdate >path3 &&\n' span_id:105) (Token id:Id.Lit_Chars val:'\t\tdate >path5\n' span_id:106) 
          (Token id:Id.Lit_Chars val:'\tfi &&\n' span_id:107) (Token id:Id.Lit_Chars val:'\tmkdir -p path0 path1 path6 pathx/ju &&\n' span_id:108) 
          (Token id:Id.Lit_Chars val:'\tdate >path0/file0 &&\n' span_id:109) (Token id:Id.Lit_Chars val:'\tdate >path1/file1 &&\n' span_id:110) 
          (Token id:Id.Lit_Chars val:'\tdate >path6/file6 &&\n' span_id:111) (Token id:Id.Lit_Chars val:'\tdate >path7 &&\n' span_id:112) 
          (Token id:Id.Lit_Chars val:'\t: >path8 &&\n' span_id:113) (Token id:Id.Lit_Chars val:'\t: >path9 &&\n' span_id:114) 
          (Token id:Id.Lit_Chars val:'\ttouch path10 &&\n' span_id:115) (Token id:Id.Lit_Chars val:'\t>pathx/ju/nk &&\n' span_id:116) 
          (Token id:Id.Lit_Chars val:'\tcat >.expected <<-\\EOF\n' span_id:117) (Token id:Id.Lit_Chars val:'\tpath0/file0\n' span_id:118) 
          (Token id:Id.Lit_Chars val:'\tpath1/file1\n' span_id:119) (Token id:Id.Lit_Chars val:'\tpath2\n' span_id:120) 
          (Token id:Id.Lit_Chars val:'\tpath3\n' span_id:121) (Token id:Id.Lit_Chars val:'\tpathx/ju/nk\n' span_id:122) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:123)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git ls-files -k output (w/o icase)' span_id:130))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:134) 
          (Token id:Id.Lit_Chars val:'\tgit ls-files -k >.output &&\n' span_id:135) (Token id:Id.Lit_Chars val:'\ttest_cmp .expected .output\n' span_id:136)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git ls-files -k output (w/ icase)' span_id:143))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:147) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -c core.ignorecase=true ls-files -k >.output &&\n'
            span_id: 148
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp .expected .output\n' span_id:149)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git ls-files -m to show modified files.' span_id:156))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:160) 
          (Token id:Id.Lit_Chars val:'\tgit ls-files -m >.output\n' span_id:161)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'validate git ls-files -m output.' span_id:168))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:172) 
          (Token id:Id.Lit_Chars val:'\tcat >.expected <<-\\EOF &&\n' span_id:173) (Token id:Id.Lit_Chars val:'\tpath0\n' span_id:174) 
          (Token id:Id.Lit_Chars val:'\tpath1\n' span_id:175) (Token id:Id.Lit_Chars val:'\tpath2/file2\n' span_id:176) 
          (Token id:Id.Lit_Chars val:'\tpath3/file3\n' span_id:177) (Token id:Id.Lit_Chars val:'\tpath7\n' span_id:178) 
          (Token id:Id.Lit_Chars val:'\tpath8\n' span_id:179) (Token id:Id.Lit_Chars val:'\tpathx/ju\n' span_id:180) 
          (Token id:Id.Lit_Chars val:'\tsubmod1\n' span_id:181) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:182) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp .expected .output\n' span_id:183)
        )
      }
    )
    (C {(test_done)})
  ]
)