(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: 
            {
              (SQ <"Test ls-files recurse-submodules feature\n"> <"\n"> 
                <"This test verifies the recurse-submodules feature correctly lists files from\n"> <"submodules.\n">
              )
            }
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <"setup directory structure and submodules">)} 
      {
        (SQ <"\n"> <"\techo a >a &&\n"> <"\tmkdir b &&\n"> <"\techo b >b/b &&\n"> <"\tgit add a b &&\n"> 
          <"\tgit commit -m \"add a and b\" &&\n"> <"\tgit init submodule &&\n"> <"\techo c >submodule/c &&\n"> <"\tgit -C submodule add c &&\n"> 
          <"\tgit -C submodule commit -m \"add c\" &&\n"> <"\tgit submodule add ./submodule &&\n"> <"\tgit commit -m \"added submodule\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"ls-files correctly outputs files in submodule">)} 
      {
        (SQ <"\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\t.gitmodules\n"> <"\ta\n"> <"\tb/b\n"> 
          <"\tsubmodule/c\n"> <"\tEOF\n"> <"\n"> <"\tgit ls-files --recurse-submodules >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"ls-files correctly outputs files in submodule with -z">)} 
      {
        (SQ <"\n"> <"\tlf_to_nul >expect <<-\\EOF &&\n"> <"\t.gitmodules\n"> <"\ta\n"> <"\tb/b\n"> 
          <"\tsubmodule/c\n"> <"\tEOF\n"> <"\n"> <"\tgit ls-files --recurse-submodules -z >actual &&\n"> 
          <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"ls-files does not output files not added to a repo">)} 
      {
        (SQ <"\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\t.gitmodules\n"> <"\ta\n"> <"\tb/b\n"> 
          <"\tsubmodule/c\n"> <"\tEOF\n"> <"\n"> <"\techo a >not_added &&\n"> <"\techo b >b/not_added &&\n"> 
          <"\techo c >submodule/not_added &&\n"> <"\tgit ls-files --recurse-submodules >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"ls-files recurses more than 1 level">)} 
      {
        (SQ <"\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\t.gitmodules\n"> <"\ta\n"> <"\tb/b\n"> 
          <"\tsubmodule/.gitmodules\n"> <"\tsubmodule/c\n"> <"\tsubmodule/subsub/d\n"> <"\tEOF\n"> <"\n"> <"\tgit init submodule/subsub &&\n"> 
          <"\techo d >submodule/subsub/d &&\n"> <"\tgit -C submodule/subsub add d &&\n"> <"\tgit -C submodule/subsub commit -m \"add d\" &&\n"> 
          <"\tgit -C submodule submodule add ./subsub &&\n"> <"\tgit -C submodule commit -m \"added subsub\" &&\n"> 
          <"\tgit ls-files --recurse-submodules >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"--recurse-submodules and pathspecs setup">)} 
      {
        (SQ <"\n"> <"\techo e >submodule/subsub/e.txt &&\n"> 
          <"\tgit -C submodule/subsub add e.txt &&\n"> <"\tgit -C submodule/subsub commit -m \"adding e.txt\" &&\n"> <"\techo f >submodule/f.TXT &&\n"> 
          <"\techo g >submodule/g.txt &&\n"> <"\tgit -C submodule add f.TXT g.txt &&\n"> <"\tgit -C submodule commit -m \"add f and g\" &&\n"> 
          <"\techo h >h.txt &&\n"> <"\tmkdir sib &&\n"> <"\techo sib >sib/file &&\n"> <"\tgit add h.txt sib/file &&\n"> 
          <"\tgit commit -m \"add h and sib/file\" &&\n"> <"\tgit init sub &&\n"> <"\techo sub >sub/file &&\n"> <"\tgit -C sub add file &&\n"> 
          <"\tgit -C sub commit -m \"add file\" &&\n"> <"\tgit submodule add ./sub &&\n"> <"\tgit commit -m \"added sub\" &&\n"> <"\n"> 
          <"\tcat >expect <<-\\EOF &&\n"> <"\t.gitmodules\n"> <"\ta\n"> <"\tb/b\n"> <"\th.txt\n"> <"\tsib/file\n"> <"\tsub/file\n"> 
          <"\tsubmodule/.gitmodules\n"> <"\tsubmodule/c\n"> <"\tsubmodule/f.TXT\n"> <"\tsubmodule/g.txt\n"> <"\tsubmodule/subsub/d\n"> 
          <"\tsubmodule/subsub/e.txt\n"> <"\tEOF\n"> <"\n"> <"\tgit ls-files --recurse-submodules >actual &&\n"> 
          <"\ttest_cmp expect actual &&\n"> <"\tcat actual &&\n"> <"\tgit ls-files --recurse-submodules \"*\" >actual &&\n"> 
          <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"--recurse-submodules and pathspecs">)} 
      {
        (SQ <"\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\th.txt\n"> <"\tsubmodule/g.txt\n"> 
          <"\tsubmodule/subsub/e.txt\n"> <"\tEOF\n"> <"\n"> <"\tgit ls-files --recurse-submodules \"*.txt\" >actual &&\n"> 
          <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"--recurse-submodules and pathspecs">)} 
      {
        (SQ <"\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\th.txt\n"> <"\tsubmodule/f.TXT\n"> 
          <"\tsubmodule/g.txt\n"> <"\tsubmodule/subsub/e.txt\n"> <"\tEOF\n"> <"\n"> 
          <"\tgit ls-files --recurse-submodules \":(icase)*.txt\" >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"--recurse-submodules and pathspecs">)} 
      {
        (SQ <"\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\th.txt\n"> <"\tsubmodule/f.TXT\n"> 
          <"\tsubmodule/g.txt\n"> <"\tEOF\n"> <"\n"> 
          <
"\tgit ls-files --recurse-submodules \":(icase)*.txt\" \":(exclude)submodule/subsub/*\" >actual &&\n"
          > <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"--recurse-submodules and pathspecs">)} 
      {
        (SQ <"\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\tsub/file\n"> <"\tEOF\n"> <"\n"> 
          <"\tgit ls-files --recurse-submodules \"sub\" >actual &&\n"> <"\ttest_cmp expect actual &&\n"> <"\tgit ls-files --recurse-submodules \"sub/\" >actual &&\n"> 
          <"\ttest_cmp expect actual &&\n"> <"\tgit ls-files --recurse-submodules \"sub/file\" >actual &&\n"> <"\ttest_cmp expect actual &&\n"> 
          <"\tgit ls-files --recurse-submodules \"su*/file\" >actual &&\n"> <"\ttest_cmp expect actual &&\n"> <"\tgit ls-files --recurse-submodules \"su?/file\" >actual &&\n"> 
          <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"--recurse-submodules and pathspecs">)} 
      {
        (SQ <"\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\tsib/file\n"> <"\tsub/file\n"> <"\tEOF\n"> <"\n"> 
          <"\tgit ls-files --recurse-submodules \"s??/file\" >actual &&\n"> <"\ttest_cmp expect actual &&\n"> <"\tgit ls-files --recurse-submodules \"s???file\" >actual &&\n"> 
          <"\ttest_cmp expect actual &&\n"> <"\tgit ls-files --recurse-submodules \"s*file\" >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"--recurse-submodules does not support --error-unmatch">)} 
      {
        (SQ <"\n"> 
          <"\ttest_must_fail git ls-files --recurse-submodules --error-unmatch 2>actual &&\n"> <"\ttest_i18ngrep \"does not support --error-unmatch\" actual\n">
        )
      }
    )
    (FuncDef
      name: test_incompatible_with_recurse_submodules
      body: 
        (BraceGroup
          children: [
            (C {(test_expect_success)} 
              {(DQ ("--recurse-submodules and ") ($ VSub_Number "$1") (" are incompatible"))} 
              {
                (DQ ("\n") ("\t\ttest_must_fail git ls-files --recurse-submodules ") 
                  ($ VSub_Number "$1") (" 2>actual &&\n") ("\t\ttest_i18ngrep 'unsupported mode' actual\n") ("\t")
                )
              }
            )
          ]
          spids: [304]
        )
      spids: [299 303]
    )
    (C {(test_incompatible_with_recurse_submodules)} {(--deleted)})
    (C {(test_incompatible_with_recurse_submodules)} {(--modified)})
    (C {(test_incompatible_with_recurse_submodules)} {(--others)})
    (C {(test_incompatible_with_recurse_submodules)} {(--stage)})
    (C {(test_incompatible_with_recurse_submodules)} {(--killed)})
    (C {(test_incompatible_with_recurse_submodules)} {(--unmerged)})
    (C {(test_done)})
  ]
)