(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: 
            {
              (SQ <'git ls-files -k and -m flags test.\n'> <'\n'> 
                <'This test prepares the following in the cache:\n'> <'\n'> <'    path0       - a file\n'> <'    path1       - a symlink\n'> 
                <'    path2/file2 - a file in a directory\n'> <'    path3/file3 - a file in a directory\n'> <'    pathx/ju    - a file in a directory\n'> 
                <'    submod1/\t- a submodule\n'> <'    submod2/\t- another submodule\n'> <'\n'> <'and the following on the filesystem:\n'> <'\n'> 
                <'    path0/file0 - a file in a directory\n'> <'    path1/file1 - a file in a directory\n'> <'    path2       - a file\n'> 
                <'    path3       - a symlink\n'> <'    path4\t- a file\n'> <'    path5\t- a symlink\n'> <'    path6/file6 - a file in a directory\n'> 
                <'    pathx/ju/nk - a file in a directory to be killed\n'> <'    submod1/\t- a submodule (modified from the cache)\n'> 
                <'    submod2/\t- a submodule (matches the cache)\n'> <'\n'> <'git ls-files -k should report that existing filesystem objects\n'> 
                <'path0/*, path1/*, path2 and path3 to be killed.\n'> <'\n'> <'Also for modification test, the cache and working tree have:\n'> <'\n'> 
                <'    path7       - an empty file, modified to a non-empty file.\n'> <'    path8       - a non-empty file, modified to an empty file.\n'> 
                <'    path9\t- an empty file, cache dirtied.\n'> <'    path10\t- a non-empty file, cache dirtied.\n'> <'\n'> 
                <'We should report path0, path1, path2/file2, path3/file3, path7 and path8\n'> <'modified without reporting path9 and path10.  submod1 is also modified.\n'>
              )
            }
          spids: [13]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (C {<test_expect_success>} {(SQ <'git update-index --add to add various paths.'>)} 
      {
        (SQ <'\n'> <'\tdate >path0 &&\n'> <'\ttest_ln_s_add xyzzy path1 &&\n'> 
          <'\tmkdir path2 path3 pathx &&\n'> <'\tdate >path2/file2 &&\n'> <'\tdate >path3/file3 &&\n'> <'\t>pathx/ju &&\n'> <'\t: >path7 &&\n'> 
          <'\tdate >path8 &&\n'> <'\t: >path9 &&\n'> <'\tdate >path10 &&\n'> 
          <'\tgit update-index --add -- path0 path?/file? pathx/ju path7 path8 path9 path10 &&\n'> <'\tgit init submod1 &&\n'> <'\tgit -C submod1 commit --allow-empty -m "empty 1" &&\n'> 
          <'\tgit init submod2 &&\n'> <'\tgit -C submod2 commit --allow-empty -m "empty 2" &&\n'> 
          <'\tgit update-index --add submod[12] &&\n'> <'\t(\n'> <'\t\tcd submod1 &&\n'> <'\t\tgit commit --allow-empty -m "empty 1 (updated)"\n'> <'\t) &&\n'> 
          <'\trm -fr path?\t# leave path10 alone\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'git ls-files -k to show killed files.'>)} 
      {
        (SQ <'\n'> <'\tdate >path2 &&\n'> <'\tif test_have_prereq SYMLINKS\n'> <'\tthen\n'> 
          <'\t\tln -s frotz path3 &&\n'> <'\t\tln -s nitfol path5\n'> <'\telse\n'> <'\t\tdate >path3 &&\n'> <'\t\tdate >path5\n'> <'\tfi &&\n'> 
          <'\tmkdir -p path0 path1 path6 pathx/ju &&\n'> <'\tdate >path0/file0 &&\n'> <'\tdate >path1/file1 &&\n'> <'\tdate >path6/file6 &&\n'> 
          <'\tdate >path7 &&\n'> <'\t: >path8 &&\n'> <'\t: >path9 &&\n'> <'\ttouch path10 &&\n'> <'\t>pathx/ju/nk &&\n'> 
          <'\tcat >.expected <<-\\EOF\n'> <'\tpath0/file0\n'> <'\tpath1/file1\n'> <'\tpath2\n'> <'\tpath3\n'> <'\tpathx/ju/nk\n'> <'\tEOF\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'git ls-files -k output (w/o icase)'>)} 
      {(SQ <'\n'> <'\tgit ls-files -k >.output &&\n'> <'\ttest_cmp .expected .output\n'>)}
    )
    (C {<test_expect_success>} {(SQ <'git ls-files -k output (w/ icase)'>)} 
      {
        (SQ <'\n'> <'\tgit -c core.ignorecase=true ls-files -k >.output &&\n'> 
          <'\ttest_cmp .expected .output\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'git ls-files -m to show modified files.'>)} 
      {(SQ <'\n'> <'\tgit ls-files -m >.output\n'>)}
    )
    (C {<test_expect_success>} {(SQ <'validate git ls-files -m output.'>)} 
      {
        (SQ <'\n'> <'\tcat >.expected <<-\\EOF &&\n'> <'\tpath0\n'> <'\tpath1\n'> <'\tpath2/file2\n'> 
          <'\tpath3/file3\n'> <'\tpath7\n'> <'\tpath8\n'> <'\tpathx/ju\n'> <'\tsubmod1\n'> <'\tEOF\n'> 
          <'\ttest_cmp .expected .output\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)