(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_name: i
      iter_words: [{<file>} {<'dir/file'>} {<dir>} {(SQ <'d*'>)}]
      do_arg_iter: F
      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_name: i
      iter_words: [
        {<ign>}
        {<'dir/ign'>}
        {<'dir/sub'>}
        {<'dir/sub/'> <Id.Lit_Star '*'> <ign>}
        {<'sub/file'>}
        {<sub>}
        {<'sub/'> <Id.Lit_Star '*'>}
      ]
      do_arg_iter: F
      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_name: i
      iter_words: [{<sub>} {<'sub/'> <Id.Lit_Star '*'>}]
      do_arg_iter: F
      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_name: i
      iter_words: [{<ign>} {<file>}]
      do_arg_iter: F
      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>})
  ]
)