(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'giving ignored paths to git add'>)}
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (C {<test_expect_success>} {<setup>} 
      {
        (SQ <'\n'> <'\tmkdir sub dir dir/sub &&\n'> <'\techo sub >.gitignore &&\n'> 
          <'\techo ign >>.gitignore &&\n'> <'\tfor p in . sub dir dir/sub\n'> <'\tdo\n'> <'\t\t>"$p/ign" &&\n'> <'\t\t>"$p/file" || exit 1\n'> 
          <'\tdone\n'>
        )
      }
    )
    (command.ForEach
      iter_names: [i]
      iterable: (for_iter.Words words:[{<file>} {<'dir/file'>} {<dir>} {(SQ <'d*'>)}])
      body: 
        (command.DoGroup
          children: [
            (C {<test_expect_success>} 
              {(DQ <'no complaints for unignored '> ($ Id.VSub_DollarName '$i'))} 
              {
                (SQ <'\n'> <'\t\trm -f .git/index &&\n'> <'\t\tgit add "$i" &&\n'> 
                  <'\t\tgit ls-files "$i" >out &&\n'> <'\t\ttest -s out\n'> <'\t'>
                )
              }
            )
          ]
        )
    )
    (command.ForEach
      iter_names: [i]
      iterable: 
        (for_iter.Words
          words: [
            {<ign>}
            {<'dir/ign'>}
            {<'dir/sub'>}
            {<'dir/sub/'> <Id.Lit_Star '*'> <ign>}
            {<'sub/file'>}
            {<sub>}
            {<'sub/'> <Id.Lit_Star '*'>}
          ]
        )
      body: 
        (command.DoGroup
          children: [
            (C {<test_expect_success>} {(DQ <'complaints for ignored '> ($ Id.VSub_DollarName '$i'))} 
              {
                (SQ <'\n'> <'\t\trm -f .git/index &&\n'> <'\t\ttest_must_fail git add "$i" 2>err &&\n'> 
                  <'\t\tgit ls-files "$i" >out &&\n'> <'\t\t! test -s out\n'> <'\t'>
                )
              }
            )
            (C {<test_expect_success>} 
              {(DQ <'complaints for ignored '> ($ Id.VSub_DollarName '$i') <' output'>)} {(SQ <'\n'> <'\t\ttest_i18ngrep -e "Use -f if" err\n'> <'\t'>)}
            )
            (C {<test_expect_success>} 
              {(DQ <'complaints for ignored '> ($ Id.VSub_DollarName '$i') <' with unignored file'>)} 
              {
                (SQ <'\n'> <'\t\trm -f .git/index &&\n'> 
                  <'\t\ttest_must_fail git add "$i" file 2>err &&\n'> <'\t\tgit ls-files "$i" >out &&\n'> <'\t\t! test -s out\n'> <'\t'>
                )
              }
            )
            (C {<test_expect_success>} 
              {
                (DQ <'complaints for ignored '> ($ Id.VSub_DollarName '$i') 
                  <' with unignored file output'>
                )
              } {(SQ <'\n'> <'\t\ttest_i18ngrep -e "Use -f if" err\n'> <'\t'>)}
            )
          ]
        )
    )
    (command.ForEach
      iter_names: [i]
      iterable: (for_iter.Words words:[{<sub>} {<'sub/'> <Id.Lit_Star '*'>}])
      body: 
        (command.DoGroup
          children: [
            (C {<test_expect_success>} 
              {(DQ <'complaints for ignored '> ($ Id.VSub_DollarName '$i') <' in dir'>)} 
              {
                (SQ <'\n'> <'\t\trm -f .git/index &&\n'> <'\t\t(\n'> <'\t\t\tcd dir &&\n'> 
                  <'\t\t\ttest_must_fail git add "$i" 2>err &&\n'> <'\t\t\tgit ls-files "$i" >out &&\n'> <'\t\t\t! test -s out\n'> <'\t\t)\n'> <'\t'>
                )
              }
            )
            (C {<test_expect_success>} 
              {(DQ <'complaints for ignored '> ($ Id.VSub_DollarName '$i') <' in dir output'>)} 
              {
                (SQ <'\n'> <'\t\t(\n'> <'\t\t\tcd dir &&\n'> 
                  <'\t\t\ttest_i18ngrep -e "Use -f if" err\n'> <'\t\t)\n'> <'\t'>
                )
              }
            )
          ]
        )
    )
    (command.ForEach
      iter_names: [i]
      iterable: (for_iter.Words words:[{<ign>} {<file>}])
      body: 
        (command.DoGroup
          children: [
            (C {<test_expect_success>} 
              {(DQ <'complaints for ignored '> ($ Id.VSub_DollarName '$i') <' in sub'>)} 
              {
                (SQ <'\n'> <'\t\trm -f .git/index &&\n'> <'\t\t(\n'> <'\t\t\tcd sub &&\n'> 
                  <'\t\t\ttest_must_fail git add "$i" 2>err &&\n'> <'\t\t\tgit ls-files "$i" >out &&\n'> <'\t\t\t! test -s out\n'> <'\t\t)\n'> <'\t'>
                )
              }
            )
            (C {<test_expect_success>} 
              {(DQ <'complaints for ignored '> ($ Id.VSub_DollarName '$i') <' in sub output'>)} 
              {
                (SQ <'\n'> <'\t\t(\n'> <'\t\t\tcd sub &&\n'> 
                  <'\t\t\ttest_i18ngrep -e "Use -f if" err\n'> <'\t\t)\n'> <'\t'>
                )
              }
            )
          ]
        )
    )
    (C {<test_done>})
  ]
)