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