(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'giving ignored paths to git add' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:20) 
          (Token id:Id.Lit_Chars val:'\tmkdir sub dir dir/sub &&\n' span_id:21) (Token id:Id.Lit_Chars val:'\techo sub >.gitignore &&\n' span_id:22) 
          (Token id:Id.Lit_Chars val:'\techo ign >>.gitignore &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\tfor p in . sub dir dir/sub\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:25) (Token id:Id.Lit_Chars val:'\t\t>"$p/ign" &&\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\t\t>"$p/file" || exit 1\n' span_id:27) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:28)
        )
      }
    )
    (command.ForEach
      iter_name: i
      iter_words: [{(file)} {(dir/file)} {(dir)} {(SQ (Token id:Id.Lit_Chars val:'d*' span_id:45))}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {(test_expect_success)} 
              {(DQ ('no complaints for unignored ') ($ Id.VSub_DollarName '$i'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:59) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\trm -f .git/index &&\n'
                    span_id: 60
                  ) (Token id:Id.Lit_Chars val:'\t\tgit add "$i" &&\n' span_id:61) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit ls-files "$i" >out &&\n'
                    span_id: 62
                  ) (Token id:Id.Lit_Chars val:'\t\ttest -s out\n' span_id:63) (Token id:Id.Lit_Chars val:'\t' span_id:64)
                )
              }
            )
          ]
        )
    )
    (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 (Token id:Id.Lit_Chars val:'\n' span_id:104) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\trm -f .git/index &&\n'
                    span_id: 105
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git add "$i" 2>err &&\n' span_id:106) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit ls-files "$i" >out &&\n'
                    span_id: 107
                  ) (Token id:Id.Lit_Chars val:'\t\t! test -s out\n' span_id:108) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:109)
                )
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('complaints for ignored ') ($ Id.VSub_DollarName '$i') (' output'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:123) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest_i18ngrep -e "Use -f if" err\n'
                    span_id: 124
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:125)
                )
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('complaints for ignored ') ($ Id.VSub_DollarName '$i') (' with unignored file'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:139) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\trm -f .git/index &&\n'
                    span_id: 140
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git add "$i" file 2>err &&\n' span_id:141) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit ls-files "$i" >out &&\n'
                    span_id: 142
                  ) (Token id:Id.Lit_Chars val:'\t\t! test -s out\n' span_id:143) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:144)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('complaints for ignored ') ($ Id.VSub_DollarName '$i') 
                  (' with unignored file output')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:157) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest_i18ngrep -e "Use -f if" err\n'
                    span_id: 158
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:159)
                )
              }
            )
          ]
        )
    )
    (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 (Token id:Id.Lit_Chars val:'\n' span_id:188) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\trm -f .git/index &&\n'
                    span_id: 189
                  ) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:190) 
                  (Token id:Id.Lit_Chars val:'\t\t\tcd dir &&\n' span_id:191) (Token id:Id.Lit_Chars val:'\t\t\ttest_must_fail git add "$i" 2>err &&\n' span_id:192) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit ls-files "$i" >out &&\n'
                    span_id: 193
                  ) (Token id:Id.Lit_Chars val:'\t\t\t! test -s out\n' span_id:194) 
                  (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:195) (Token id:Id.Lit_Chars val:'\t' span_id:196)
                )
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('complaints for ignored ') ($ Id.VSub_DollarName '$i') (' in dir output'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:210) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:211) (Token id:Id.Lit_Chars val:'\t\t\tcd dir &&\n' span_id:212) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_i18ngrep -e "Use -f if" err\n'
                    span_id: 213
                  ) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:214) (Token id:Id.Lit_Chars val:'\t' span_id:215)
                )
              }
            )
          ]
        )
    )
    (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 (Token id:Id.Lit_Chars val:'\n' span_id:243) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\trm -f .git/index &&\n'
                    span_id: 244
                  ) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:245) 
                  (Token id:Id.Lit_Chars val:'\t\t\tcd sub &&\n' span_id:246) (Token id:Id.Lit_Chars val:'\t\t\ttest_must_fail git add "$i" 2>err &&\n' span_id:247) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit ls-files "$i" >out &&\n'
                    span_id: 248
                  ) (Token id:Id.Lit_Chars val:'\t\t\t! test -s out\n' span_id:249) 
                  (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:250) (Token id:Id.Lit_Chars val:'\t' span_id:251)
                )
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('complaints for ignored ') ($ Id.VSub_DollarName '$i') (' in sub output'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:265) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:266) (Token id:Id.Lit_Chars val:'\t\t\tcd sub &&\n' span_id:267) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_i18ngrep -e "Use -f if" err\n'
                    span_id: 268
                  ) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:269) (Token id:Id.Lit_Chars val:'\t' span_id:270)
                )
              }
            )
          ]
        )
    )
    (C {(test_done)})
  ]
)