(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(check-ignore)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (FuncDef
      name: init_vars
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:global_excludes)
                  op: Equal
                  rhs: {(DQ (global-excludes))}
                  spids: [21]
                )
              ]
              spids: [21]
            )
          ]
          spids: [18]
        )
      spids: [13 17]
    )
    (FuncDef
      name: enable_global_excludes
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(init_vars)})
                (C {(git)} {(config)} {(core.excludesfile)} {(DQ ($ VSub_Name '$global_excludes'))})
              ]
            )
          ]
          spids: [34]
        )
      spids: [29 33]
    )
    (FuncDef
      name: expect_in
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dest)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$HOME') (/expected-) ($ VSub_Number '$1'))}
                  spids: [63]
                )
                (assign_pair
                  lhs: (LhsName name:text)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$2'))}
                  spids: [70]
                )
              ]
              spids: [63]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name '$text'))})]
                  action: [
                    (SimpleCommand
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: 16777215
                          arg_word: {(DQ ($ VSub_Name '$dest'))}
                          spids: [90]
                        )
                      ]
                    )
                  ]
                  spids: [16777215 87]
                )
              ]
              else_action: [
                (SimpleCommand
                  words: [{(echo)} {(DQ ($ VSub_Name '$text'))}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {(DQ ($ VSub_Name '$dest'))}
                      spids: [108]
                    )
                  ]
                )
              ]
              spids: [99 114]
            )
          ]
          spids: [60]
        )
      spids: [55 59]
    )
    (FuncDef
      name: expect
      body: 
        (BraceGroup
          children: [(C {(expect_in)} {(stdout)} {(DQ ($ VSub_Number '$1'))})]
          spids: [124]
        )
      spids: [119 123]
    )
    (FuncDef
      name: expect_from_stdin
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(DQ ($ VSub_Name '$HOME') (/expected-stdout))}
                  spids: [148]
                )
              ]
            )
          ]
          spids: [143]
        )
      spids: [138 142]
    )
    (FuncDef
      name: test_stderr
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:expected)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [165]
                )
              ]
              spids: [165]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(expect_in)} {(stderr)} {(DQ ($ VSub_Number '$1'))})
                (C {(test_i18ncmp)} {(DQ ($ VSub_Name '$HOME') (/expected-stderr))} 
                  {(DQ ($ VSub_Name '$HOME') (/stderr))}
                )
              ]
            )
          ]
          spids: [162]
        )
      spids: [157 161]
    )
    (FuncDef
      name: broken_c_unquote
      body: 
        (BraceGroup
          children: [
            (C {(DQ ($ VSub_Name '$PERL_PATH'))} {(-pe)} {(SQ <'s/^"//; s/\\\\//; s/"$//; tr/\\n/\\0/'>)} 
              {(DQ ($ VSub_At '$@'))}
            )
          ]
          spids: [202]
        )
      spids: [197 201]
    )
    (FuncDef
      name: broken_c_unquote_verbose
      body: 
        (BraceGroup
          children: [
            (C {(DQ ($ VSub_Name '$PERL_PATH'))} {(-pe)} 
              {(SQ <'s/\t"/\t/; s/\\\\//; s/"$//; tr/:\\t\\n/\\0/'>)} {(DQ ($ VSub_At '$@'))}
            )
          ]
          spids: [227]
        )
      spids: [222 226]
    )
    (FuncDef
      name: stderr_contains
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:regexp)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [255]
                )
              ]
              spids: [255]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (C {(test_i18ngrep)} {(DQ ($ VSub_Name '$regexp'))} 
                      {(DQ ($ VSub_Name '$HOME') (/stderr))}
                    )
                  ]
                  action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                  spids: [16777215 275]
                )
              ]
              else_action: [
                (C {(echo)} 
                  {
                    (DQ ("didn't find /") ($ VSub_Name '$regexp') ('/ in ') ($ VSub_Name '$HOME') 
                      (/stderr)
                    )
                  }
                )
                (C {(cat)} {(DQ ($ VSub_Name '$HOME') (/stderr))})
                (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
              ]
              spids: [283 310]
            )
          ]
          spids: [252]
        )
      spids: [247 251]
    )
    (FuncDef
      name: stderr_empty_on_success
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:expect_code)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [323]
                )
              ]
              spids: [323]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {($ VSub_Name '$expect_code')} {(Lit_Other '=')} {(0)})]
                  action: [(C {(test_stderr)} {(DQ )})]
                  spids: [16777215 340]
                )
              ]
              else_action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
              spids: [349 365]
            )
          ]
          spids: [320]
        )
      spids: [315 319]
    )
    (FuncDef
      name: test_check_ignore
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:args)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [378]
                )
                (assign_pair
                  lhs: (LhsName name:expect_code)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Number 2>
                          suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(0)})
                          spids: [385 389]
                        )
                      )
                    }
                  spids: [383]
                )
                (assign_pair
                  lhs: (LhsName name:global_args)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$3'))}
                  spids: [392]
                )
              ]
              spids: [378]
            )
            (AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (C {(init_vars)})
                (C {(rm)} {(-f)} {(DQ ($ VSub_Name '$HOME') (/stdout))} 
                  {(DQ ($ VSub_Name '$HOME') (/stderr))} {(DQ ($ VSub_Name '$HOME') (/cmd))}
                )
                (SimpleCommand
                  words: [
                    {(echo)}
                    {(git)}
                    {($ VSub_Name '$global_args')}
                    {(check-ignore)}
                    {($ VSub_Name '$quiet_opt')}
                    {($ VSub_Name '$verbose_opt')}
                    {($ VSub_Name '$non_matching_opt')}
                    {($ VSub_Name '$no_index_opt')}
                    {($ VSub_Name '$args')}
                  ]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {(DQ ($ VSub_Name '$HOME') (/cmd))}
                      spids: [446]
                    )
                  ]
                )
                (SimpleCommand
                  words: [{(echo)} {(DQ ($ VSub_Name '$expect_code'))}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {(DQ ($ VSub_Name '$HOME') (/expected-exit-code))}
                      spids: [461]
                    )
                  ]
                )
                (SimpleCommand
                  words: [
                    {(test_expect_code)}
                    {(DQ ($ VSub_Name '$expect_code'))}
                    {(git)}
                    {($ VSub_Name '$global_args')}
                    {(check-ignore)}
                    {($ VSub_Name '$quiet_opt')}
                    {($ VSub_Name '$verbose_opt')}
                    {($ VSub_Name '$non_matching_opt')}
                    {($ VSub_Name '$no_index_opt')}
                    {($ VSub_Name '$args')}
                  ]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {(DQ ($ VSub_Name '$HOME') (/stdout))}
                      spids: [496]
                    )
                    (Redir
                      op_id: Redir_Great
                      fd: 2
                      arg_word: {(DQ ($ VSub_Name '$HOME') (/stderr))}
                      spids: [502]
                    )
                  ]
                )
                (C {(test_cmp)} {(DQ ($ VSub_Name '$HOME') (/expected-stdout))} 
                  {(DQ ($ VSub_Name '$HOME') (/stdout))}
                )
                (C {(stderr_empty_on_success)} {(DQ ($ VSub_Name '$expect_code'))})
              ]
            )
          ]
          spids: [375]
        )
      spids: [370 374]
    )
    (FuncDef
      name: test_expect_success_multiple
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:prereq) op:Equal rhs:{(EmptyPart)} spids:[609])]
              spids: [609]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {($ VSub_Pound '$#')} {(-eq)} {(5)})]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:prereq)
                          op: Equal
                          rhs: {($ VSub_Number '$1')}
                          spids: [626]
                        )
                      ]
                      spids: [626]
                    )
                    (C {(shift)})
                  ]
                  spids: [16777215 623]
                )
              ]
              spids: [16777215 633]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(DQ ($ VSub_Number '$4'))} {(Lit_Other '=')} {(DQ (--index))})]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:no_index_opt)
                          op: Equal
                          rhs: {(EmptyPart)}
                          spids: [654]
                        )
                      ]
                      spids: [654]
                    )
                  ]
                  spids: [16777215 651]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:no_index_opt)
                      op: Equal
                      rhs: {($ VSub_Number '$4')}
                      spids: [660]
                    )
                  ]
                  spids: [660]
                )
              ]
              spids: [657 664]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:testname)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [667]
                )
                (assign_pair
                  lhs: (LhsName name:expect_all)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$2'))}
                  spids: [672]
                )
                (assign_pair
                  lhs: (LhsName name:code)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$3'))}
                  spids: [677]
                )
              ]
              spids: [667]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:expect_verbose)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {(echo)} {(DQ ($ VSub_Name '$expect_all'))})
                                  (C {(grep)} {(-v)} {(SQ <'^::\t'>)})
                                ]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [685 703]
                      )
                    }
                  spids: [684]
                )
              ]
              spids: [684]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:expect)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {(echo)} {(DQ ($ VSub_Name '$expect_verbose'))})
                                  (C {(sed)} {(-e)} {(SQ <'s/.*\t//'>)})
                                ]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [707 725]
                      )
                    }
                  spids: [706]
                )
              ]
              spids: [706]
            )
            (C {(test_expect_success)} {($ VSub_Name '$prereq')} 
              {
                (DQ ($ VSub_Name '$testname') 
                  (BracedVarSub
                    token: <VSub_Name no_index_opt>
                    suffix_op: 
                      (StringUnary
                        op_id: VTest_ColonPlus
                        arg_word: {(' with ') ($ VSub_Name '$no_index_opt')}
                      )
                    spids: [735 740]
                  )
                )
              } {(SQ <'\n'> <'\t\texpect "$expect" &&\n'> <'\t\teval "$code"\n'> <'\t'>)}
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (C {(test)} 
                      {
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (Pipeline
                                  children: [
                                    (C {(echo)} {(DQ ($ VSub_Name '$expect_all'))})
                                    (C {(wc)} {(-l)})
                                  ]
                                  negated: F
                                )
                              ]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [760 774]
                        )
                      } {(Lit_Other '=')} {(1)}
                    )
                  ]
                  action: [
                    (ForEach
                      iter_name: quiet_opt
                      iter_words: [{(SQ <-q>)} {(SQ <--quiet>)}]
                      do_arg_iter: F
                      body: 
                        (DoGroup
                          children: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:opts)
                                  op: Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (BracedVarSub
                                          token: <VSub_Name no_index_opt>
                                          suffix_op: 
                                            (StringUnary
                                              op_id: VTest_ColonPlus
                                              arg_word: {($ VSub_Name '$no_index_opt') (' ')}
                                            )
                                          spids: [804 809]
                                        ) ($ VSub_Name '$quiet_opt')
                                      )
                                    }
                                  spids: [802]
                                )
                              ]
                              spids: [802]
                            )
                            (C {(test_expect_success)} {($ VSub_Name '$prereq')} 
                              {
                                (DQ ($ VSub_Name '$testname') 
                                  (BracedVarSub
                                    token: <VSub_Name opts>
                                    suffix_op: 
                                      (StringUnary
                                        op_id: VTest_ColonPlus
                                        arg_word: {(' with ') ($ VSub_Name '$opts')}
                                      )
                                    spids: [820 825]
                                  )
                                )
                              } {(DQ ('\n') ("\t\t\texpect '' &&\n") ('\t\t\t') ($ VSub_Name '$code') ('\n') ('\t\t'))}
                            )
                          ]
                          spids: [799 838]
                        )
                      spids: [789 16777215]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:quiet_opt)
                          op: Equal
                          rhs: {(EmptyPart)}
                          spids: [841]
                        )
                      ]
                      spids: [841]
                    )
                  ]
                  spids: [16777215 781]
                )
              ]
              spids: [16777215 844]
            )
            (ForEach
              iter_name: verbose_opt
              iter_words: [{(SQ <-v>)} {(SQ <--verbose>)}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (ForEach
                      iter_name: non_matching_opt
                      iter_words: [{(SQ )} {(SQ <-n>)} {(SQ <--non-matching>)}]
                      do_arg_iter: F
                      body: 
                        (DoGroup
                          children: [
                            (If
                              arms: [
                                (if_arm
                                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name '$non_matching_opt'))})]
                                  action: [
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:my_expect)
                                          op: Equal
                                          rhs: {(DQ ($ VSub_Name '$expect_all'))}
                                          spids: [901]
                                        )
                                      ]
                                      spids: [901]
                                    )
                                  ]
                                  spids: [16777215 898]
                                )
                              ]
                              else_action: [
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:my_expect)
                                      op: Equal
                                      rhs: {(DQ ($ VSub_Name '$expect_verbose'))}
                                      spids: [910]
                                    )
                                  ]
                                  spids: [910]
                                )
                              ]
                              spids: [907 916]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:test_code)
                                  op: Equal
                                  rhs: 
                                    {
                                      (DQ ('\n') ("\t\t\t\texpect '") ($ VSub_Name '$my_expect') 
                                        ("' &&\n") ('\t\t\t\t') ($ VSub_Name '$code') ('\n') ('\t\t\t')
                                      )
                                    }
                                  spids: [920]
                                )
                              ]
                              spids: [920]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:opts)
                                  op: Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (BracedVarSub
                                          token: <VSub_Name no_index_opt>
                                          suffix_op: 
                                            (StringUnary
                                              op_id: VTest_ColonPlus
                                              arg_word: {($ VSub_Name '$no_index_opt') (' ')}
                                            )
                                          spids: [935 940]
                                        ) ($ VSub_Name '$verbose_opt') 
                                        (BracedVarSub
                                          token: <VSub_Name non_matching_opt>
                                          suffix_op: 
                                            (StringUnary
                                              op_id: VTest_ColonPlus
                                              arg_word: {(' ') ($ VSub_Name '$non_matching_opt')}
                                            )
                                          spids: [942 947]
                                        )
                                      )
                                    }
                                  spids: [933]
                                )
                              ]
                              spids: [933]
                            )
                            (C {(test_expect_success)} {($ VSub_Name '$prereq')} 
                              {
                                (DQ ($ VSub_Name '$testname') 
                                  (BracedVarSub
                                    token: <VSub_Name opts>
                                    suffix_op: 
                                      (StringUnary
                                        op_id: VTest_ColonPlus
                                        arg_word: {(' with ') ($ VSub_Name '$opts')}
                                      )
                                    spids: [957 962]
                                  )
                                )
                              } {(DQ ($ VSub_Name '$test_code'))}
                            )
                          ]
                          spids: [884 970]
                        )
                      spids: [871 16777215]
                    )
                  ]
                  spids: [863 973]
                )
              spids: [853 16777215]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:verbose_opt)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [976]
                )
              ]
              spids: [976]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:non_matching_opt)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [979]
                )
              ]
              spids: [979]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:no_index_opt)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [982]
                )
              ]
              spids: [982]
            )
          ]
          spids: [606]
        )
      spids: [601 605]
    )
    (FuncDef
      name: test_expect_success_multi
      body: 
        (BraceGroup
          children: [(C {(test_expect_success_multiple)} {(DQ ($ VSub_At '$@'))} {(DQ (--index))})]
          spids: [992]
        )
      spids: [987 991]
    )
    (FuncDef
      name: test_expect_success_no_index_multi
      body: 
        (BraceGroup
          children: [(C {(test_expect_success_multiple)} {(DQ ($ VSub_At '$@'))} {(DQ (--no-index))})]
          spids: [1013]
        )
      spids: [1008 1012]
    )
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <'\n'> <'\tinit_vars &&\n'> <'\tmkdir -p a/b/ignored-dir a/submodule b &&\n'> 
          <'\tif test_have_prereq SYMLINKS\n'> <'\tthen\n'> <'\t\tln -s b a/symlink\n'> <'\tfi &&\n'> <'\t(\n'> <'\t\tcd a/submodule &&\n'> 
          <'\t\tgit init &&\n'> <'\t\techo a >a &&\n'> <'\t\tgit add a &&\n'> <'\t\tgit commit -m"commit in submodule"\n'> <'\t) &&\n'> 
          <'\tgit add a/submodule &&\n'> <'\tcat <<-\\EOF >.gitignore &&\n'> <'\t\tone\n'> <'\t\tignored-*\n'> <'\t\ttop-level-dir/\n'> 
          <'\tEOF\n'> <'\tfor dir in . a\n'> <'\tdo\n'> <'\t\t: >$dir/not-ignored &&\n'> 
          <'\t\t: >$dir/ignored-and-untracked &&\n'> <'\t\t: >$dir/ignored-but-in-index\n'> <'\tdone &&\n'> 
          <'\tgit add -f ignored-but-in-index a/ignored-but-in-index &&\n'> <'\tcat <<-\\EOF >a/.gitignore &&\n'> <'\t\ttwo*\n'> <'\t\t*three\n'> <'\tEOF\n'> 
          <'\tcat <<-\\EOF >a/b/.gitignore &&\n'> <'\t\tfour\n'> <'\t\tfive\n'> <'\t\t# this comment should affect the line numbers\n'> <'\t\tsix\n'> 
          <'\t\tignored-dir/\n'> <'\t\t# and so should this blank line:\n'> <'\n'> <'\t\t!on*\n'> <'\t\t!two\n'> <'\tEOF\n'> 
          <'\techo "seven" >a/b/ignored-dir/.gitignore &&\n'> <'\ttest -n "$HOME" &&\n'> <'\tcat <<-\\EOF >"$global_excludes" &&\n'> <'\t\tglobalone\n'> 
          <'\t\t!globaltwo\n'> <'\t\tglobalthree\n'> <'\tEOF\n'> <'\tcat <<-\\EOF >>.git/info/exclude\n'> <'\t\tper-repo\n'> <'\tEOF\n'>
        )
      }
    )
    (C {(test_expect_success_multi)} {(SQ <'. corner-case'>)} {(SQ <'::\t.'>)} 
      {(SQ <'\n'> <'\ttest_check_ignore . 1\n'>)}
    )
    (C {(test_expect_success_multi)} {(SQ <'empty command line'>)} {(SQ )} 
      {
        (SQ <'\n'> <'\ttest_check_ignore "" 128 &&\n'> 
          <'\tstderr_contains "fatal: no path specified"\n'>
        )
      }
    )
    (C {(test_expect_success_multi)} {(SQ <'--stdin with empty STDIN'>)} {(SQ )} 
      {(SQ <'\n'> <'\ttest_check_ignore "--stdin" 1 </dev/null &&\n'> <'\ttest_stderr ""\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'-q with multiple args'>)} 
      {
        (SQ <'\n'> <'\texpect "" &&\n'> <'\ttest_check_ignore "-q one two" 128 &&\n'> 
          <'\tstderr_contains "fatal: --quiet is only valid with a single pathname"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'--quiet with multiple args'>)} 
      {
        (SQ <'\n'> <'\texpect "" &&\n'> <'\ttest_check_ignore "--quiet one two" 128 &&\n'> 
          <'\tstderr_contains "fatal: --quiet is only valid with a single pathname"\n'>
        )
      }
    )
    (ForEach
      iter_name: verbose_opt
      iter_words: [{(SQ <-v>)} {(SQ <--verbose>)}]
      do_arg_iter: F
      body: 
        (DoGroup
          children: [
            (ForEach
              iter_name: quiet_opt
              iter_words: [{(SQ <-q>)} {(SQ <--quiet>)}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (C {(test_expect_success)} 
                      {(DQ ($ VSub_Name '$quiet_opt') (' ') ($ VSub_Name '$verbose_opt'))} 
                      {
                        (DQ ('\n') ("\t\t\texpect '' &&\n") ("\t\t\ttest_check_ignore '") 
                          ($ VSub_Name '$quiet_opt') (' ') ($ VSub_Name '$verbose_opt') (" foo' 128 &&\n") 
                          (
"\t\t\tstderr_contains 'fatal: cannot have both --quiet and --verbose'\n"
                          ) ('\t\t')
                        )
                      }
                    )
                  ]
                  spids: [1209 1233]
                )
              spids: [1199 16777215]
            )
          ]
          spids: [1191 1235]
        )
      spids: [1182 16777215]
    )
    (C {(test_expect_success)} {(SQ <'--quiet with multiple args'>)} 
      {
        (SQ <'\n'> <'\texpect "" &&\n'> <'\ttest_check_ignore "--quiet one two" 128 &&\n'> 
          <'\tstderr_contains "fatal: --quiet is only valid with a single pathname"\n'>
        )
      }
    )
    (C {(test_expect_success_multi)} {(SQ <'erroneous use of --'>)} {(SQ )} 
      {
        (SQ <'\n'> <'\ttest_check_ignore "--" 128 &&\n'> 
          <'\tstderr_contains "fatal: no path specified"\n'>
        )
      }
    )
    (C {(test_expect_success_multi)} {(SQ <'--stdin with superfluous arg'>)} {(SQ )} 
      {
        (SQ <'\n'> <'\ttest_check_ignore "--stdin foo" 128 &&\n'> 
          <'\tstderr_contains "fatal: cannot specify pathnames with --stdin"\n'>
        )
      }
    )
    (C {(test_expect_success_multi)} {(SQ <'--stdin -z with superfluous arg'>)} {(SQ )} 
      {
        (SQ <'\n'> <'\ttest_check_ignore "--stdin -z foo" 128 &&\n'> 
          <'\tstderr_contains "fatal: cannot specify pathnames with --stdin"\n'>
        )
      }
    )
    (C {(test_expect_success_multi)} {(SQ <'-z without --stdin'>)} {(SQ )} 
      {
        (SQ <'\n'> <'\ttest_check_ignore "-z" 128 &&\n'> 
          <'\tstderr_contains "fatal: -z only makes sense with --stdin"\n'>
        )
      }
    )
    (C {(test_expect_success_multi)} {(SQ <'-z without --stdin and superfluous arg'>)} {(SQ )} 
      {
        (SQ <'\n'> <'\ttest_check_ignore "-z foo" 128 &&\n'> 
          <'\tstderr_contains "fatal: -z only makes sense with --stdin"\n'>
        )
      }
    )
    (C {(test_expect_success_multi)} {(SQ <'needs work tree'>)} {(SQ )} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd .git &&\n'> <'\t\ttest_check_ignore "foo" 128\n'> <'\t) &&\n'> 
          <'\tstderr_contains "fatal: This operation must be run in a work tree"\n'>
        )
      }
    )
    (ForEach
      iter_name: subdir
      iter_words: [{(SQ )} {(SQ <a/>)}]
      do_arg_iter: F
      body: 
        (DoGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name '$subdir'))})]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:where)
                          op: Equal
                          rhs: {(DQ ('at top-level'))}
                          spids: [1401]
                        )
                      ]
                      spids: [1401]
                    )
                  ]
                  spids: [16777215 1398]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:where)
                      op: Equal
                      rhs: {(DQ ('in subdir ') ($ VSub_Name '$subdir'))}
                      spids: [1410]
                    )
                  ]
                  spids: [1410]
                )
              ]
              spids: [1407 1417]
            )
            (C {(test_expect_success_multi)} 
              {(DQ ('non-existent file ') ($ VSub_Name '$where') (' not ignored'))} {(DQ ('::\t') (${ VSub_Name subdir) (non-existent))} 
              {(DQ ("test_check_ignore '") (${ VSub_Name subdir) ("non-existent' 1"))}
            )
            (C {(test_expect_success_no_index_multi)} 
              {(DQ ('non-existent file ') ($ VSub_Name '$where') (' not ignored'))} {(DQ ('::\t') (${ VSub_Name subdir) (non-existent))} 
              {(DQ ("test_check_ignore '") (${ VSub_Name subdir) ("non-existent' 1"))}
            )
            (C {(test_expect_success_multi)} 
              {(DQ ('non-existent file ') ($ VSub_Name '$where') (' ignored'))} {(DQ ('.gitignore:1:one\t') (${ VSub_Name subdir) (one))} 
              {(DQ ("test_check_ignore '") (${ VSub_Name subdir) ("one'"))}
            )
            (C {(test_expect_success_no_index_multi)} 
              {(DQ ('non-existent file ') ($ VSub_Name '$where') (' ignored'))} {(DQ ('.gitignore:1:one\t') (${ VSub_Name subdir) (one))} 
              {(DQ ("test_check_ignore '") (${ VSub_Name subdir) ("one'"))}
            )
            (C {(test_expect_success_multi)} 
              {(DQ ('existing untracked file ') ($ VSub_Name '$where') (' not ignored'))} {(DQ ('::\t') (${ VSub_Name subdir) (not-ignored))} 
              {(DQ ("test_check_ignore '") (${ VSub_Name subdir) ("not-ignored' 1"))}
            )
            (C {(test_expect_success_no_index_multi)} 
              {(DQ ('existing untracked file ') ($ VSub_Name '$where') (' not ignored'))} {(DQ ('::\t') (${ VSub_Name subdir) (not-ignored))} 
              {(DQ ("test_check_ignore '") (${ VSub_Name subdir) ("not-ignored' 1"))}
            )
            (C {(test_expect_success_multi)} 
              {(DQ ('existing tracked file ') ($ VSub_Name '$where') (' not ignored'))} {(DQ ('::\t') (${ VSub_Name subdir) (ignored-but-in-index))} 
              {(DQ ("test_check_ignore '") (${ VSub_Name subdir) ("ignored-but-in-index' 1"))}
            )
            (C {(test_expect_success_no_index_multi)} 
              {(DQ ('existing tracked file ') ($ VSub_Name '$where') (' shown as ignored'))} {(DQ ('.gitignore:2:ignored-*\t') (${ VSub_Name subdir) (ignored-but-in-index))} 
              {(DQ ("test_check_ignore '") (${ VSub_Name subdir) ("ignored-but-in-index'"))}
            )
            (C {(test_expect_success_multi)} 
              {(DQ ('existing untracked file ') ($ VSub_Name '$where') (' ignored'))} {(DQ ('.gitignore:2:ignored-*\t') (${ VSub_Name subdir) (ignored-and-untracked))} 
              {(DQ ("test_check_ignore '") (${ VSub_Name subdir) ("ignored-and-untracked'"))}
            )
            (C {(test_expect_success_no_index_multi)} 
              {(DQ ('existing untracked file ') ($ VSub_Name '$where') (' ignored'))} {(DQ ('.gitignore:2:ignored-*\t') (${ VSub_Name subdir) (ignored-and-untracked))} 
              {(DQ ("test_check_ignore '") (${ VSub_Name subdir) ("ignored-and-untracked'"))}
            )
            (C {(test_expect_success_multi)} {(DQ ('mix of file types ') ($ VSub_Name '$where'))} 
              {
                (DQ ('::\t') (${ VSub_Name subdir) ('non-existent\n') ('.gitignore:1:one\t') 
                  (${ VSub_Name subdir) ('one\n') ('::\t') (${ VSub_Name subdir) ('not-ignored\n') ('::\t') (${ VSub_Name subdir) 
                  ('ignored-but-in-index\n') ('.gitignore:2:ignored-*\t') (${ VSub_Name subdir) (ignored-and-untracked)
                )
              } 
              {
                (DQ ("test_check_ignore '\n") ('\t\t\t') (${ VSub_Name subdir) ('non-existent\n') 
                  ('\t\t\t') (${ VSub_Name subdir) ('one\n') ('\t\t\t') (${ VSub_Name subdir) ('not-ignored\n') ('\t\t\t') 
                  (${ VSub_Name subdir) ('ignored-but-in-index\n') ('\t\t\t') (${ VSub_Name subdir) ("ignored-and-untracked'\n") ('\t\t')
                )
              }
            )
            (C {(test_expect_success_no_index_multi)} 
              {(DQ ('mix of file types ') ($ VSub_Name '$where'))} 
              {
                (DQ ('::\t') (${ VSub_Name subdir) ('non-existent\n') ('.gitignore:1:one\t') 
                  (${ VSub_Name subdir) ('one\n') ('::\t') (${ VSub_Name subdir) ('not-ignored\n') ('.gitignore:2:ignored-*\t') 
                  (${ VSub_Name subdir) ('ignored-but-in-index\n') ('.gitignore:2:ignored-*\t') (${ VSub_Name subdir) (ignored-and-untracked)
                )
              } 
              {
                (DQ ("test_check_ignore '\n") ('\t\t\t') (${ VSub_Name subdir) ('non-existent\n') 
                  ('\t\t\t') (${ VSub_Name subdir) ('one\n') ('\t\t\t') (${ VSub_Name subdir) ('not-ignored\n') ('\t\t\t') 
                  (${ VSub_Name subdir) ('ignored-but-in-index\n') ('\t\t\t') (${ VSub_Name subdir) ("ignored-and-untracked'\n") ('\t\t')
                )
              }
            )
          ]
          spids: [1384 1859]
        )
      spids: [1376 16777215]
    )
    (C {(test_expect_success)} {(SQ <'sub-directory local ignore'>)} 
      {
        (SQ <'\n'> <'\texpect "a/3-three" &&\n'> 
          <'\ttest_check_ignore "a/3-three a/three-not-this-one"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'sub-directory local ignore with --verbose'>)} 
      {
        (SQ <'\n'> <'\texpect "a/.gitignore:2:*three\ta/3-three" &&\n'> 
          <'\ttest_check_ignore "--verbose a/3-three a/three-not-this-one"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'local ignore inside a sub-directory'>)} 
      {
        (SQ <'\n'> <'\texpect "3-three" &&\n'> <'\t(\n'> <'\t\tcd a &&\n'> 
          <'\t\ttest_check_ignore "3-three three-not-this-one"\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'local ignore inside a sub-directory with --verbose'>)} 
      {
        (SQ <'\n'> <'\texpect "a/.gitignore:2:*three\t3-three" &&\n'> <'\t(\n'> <'\t\tcd a &&\n'> 
          <'\t\ttest_check_ignore "--verbose 3-three three-not-this-one"\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success_multi)} {(SQ <'nested include'>)} {(SQ <'a/b/.gitignore:8:!on*\ta/b/one'>)} 
      {(SQ <'\n'> <'\ttest_check_ignore "a/b/one"\n'>)}
    )
    (C {(test_expect_success_multi)} {(SQ <'ignored sub-directory'>)} 
      {(SQ <'a/b/.gitignore:5:ignored-dir/\ta/b/ignored-dir'>)} {(SQ <'\n'> <'\ttest_check_ignore "a/b/ignored-dir"\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'multiple files inside ignored sub-directory'>)} 
      {
        (SQ <'\n'> <'\texpect_from_stdin <<-\\EOF &&\n'> <'\t\ta/b/ignored-dir/foo\n'> 
          <'\t\ta/b/ignored-dir/twoooo\n'> <'\t\ta/b/ignored-dir/seven\n'> <'\tEOF\n'> 
          <
'\ttest_check_ignore "a/b/ignored-dir/foo a/b/ignored-dir/twoooo a/b/ignored-dir/seven"\n'
          >
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'multiple files inside ignored sub-directory with -v'>)} 
      {
        (SQ <'\n'> <'\texpect_from_stdin <<-\\EOF &&\n'> 
          <'\t\ta/b/.gitignore:5:ignored-dir/\ta/b/ignored-dir/foo\n'> <'\t\ta/b/.gitignore:5:ignored-dir/\ta/b/ignored-dir/twoooo\n'> 
          <'\t\ta/b/.gitignore:5:ignored-dir/\ta/b/ignored-dir/seven\n'> <'\tEOF\n'> 
          <
'\ttest_check_ignore "-v a/b/ignored-dir/foo a/b/ignored-dir/twoooo a/b/ignored-dir/seven"\n'
          >
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'cd to ignored sub-directory'>)} 
      {
        (SQ <'\n'> <'\texpect_from_stdin <<-\\EOF &&\n'> <'\t\tfoo\n'> <'\t\ttwoooo\n'> <'\t\t../one\n'> 
          <'\t\tseven\n'> <'\t\t../../one\n'> <'\tEOF\n'> <'\t(\n'> <'\t\tcd a/b/ignored-dir &&\n'> 
          <'\t\ttest_check_ignore "foo twoooo ../one seven ../../one"\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'cd to ignored sub-directory with -v'>)} 
      {
        (SQ <'\n'> <'\texpect_from_stdin <<-\\EOF &&\n'> <'\t\ta/b/.gitignore:5:ignored-dir/\tfoo\n'> 
          <'\t\ta/b/.gitignore:5:ignored-dir/\ttwoooo\n'> <'\t\ta/b/.gitignore:8:!on*\t../one\n'> <'\t\ta/b/.gitignore:5:ignored-dir/\tseven\n'> 
          <'\t\t.gitignore:1:one\t../../one\n'> <'\tEOF\n'> <'\t(\n'> <'\t\tcd a/b/ignored-dir &&\n'> 
          <'\t\ttest_check_ignore "-v foo twoooo ../one seven ../../one"\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success_multi)} {(SYMLINKS)} {(SQ <symlink>)} {(SQ <'::\ta/symlink'>)} 
      {(SQ <'\n'> <'\ttest_check_ignore "a/symlink" 1\n'>)}
    )
    (C {(test_expect_success_multi)} {(SYMLINKS)} {(SQ <'beyond a symlink'>)} {(SQ )} 
      {
        (SQ <'\n'> <'\ttest_check_ignore "a/symlink/foo" 128 &&\n'> <'\ttest_stderr "fatal: pathspec '>) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <a/symlink/foo>) 
        (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <' is beyond a symbolic link"\n'>)
      }
    )
    (C {(test_expect_success_multi)} {(SYMLINKS)} {(SQ <'beyond a symlink from subdirectory'>)} {(SQ )} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd a &&\n'> <'\t\ttest_check_ignore "symlink/foo" 128\n'> <'\t) &&\n'> 
          <'\ttest_stderr "fatal: pathspec '>
        ) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <symlink/foo>) 
        (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <' is beyond a symbolic link"\n'>)
      }
    )
    (C {(test_expect_success_multi)} {(SQ <submodule>)} {(SQ )} 
      {
        (SQ <'\n'> <'\ttest_check_ignore "a/submodule/one" 128 &&\n'> 
          <'\ttest_stderr "fatal: Pathspec '>
        ) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <a/submodule/one>) 
        (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <' is in submodule '>) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <a/submodule>) 
        (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <'"\n'>)
      }
    )
    (C {(test_expect_success_multi)} {(SQ <'submodule from subdirectory'>)} {(SQ )} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd a &&\n'> <'\t\ttest_check_ignore "submodule/one" 128\n'> 
          <'\t) &&\n'> <'\ttest_stderr "fatal: Pathspec '>
        ) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <submodule/one>) 
        (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <' is in submodule '>) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <a/submodule>) 
        (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <'"\n'>)
      }
    )
    (C {(test_expect_success)} {(SQ <'global ignore not yet enabled'>)} 
      {
        (SQ <'\n'> <'\texpect_from_stdin <<-\\EOF &&\n'> 
          <'\t\t.git/info/exclude:7:per-repo\tper-repo\n'> <'\t\ta/.gitignore:2:*three\ta/globalthree\n'> <'\t\t.git/info/exclude:7:per-repo\ta/per-repo\n'> 
          <'\tEOF\n'> <'\ttest_check_ignore "-v globalone per-repo a/globalthree a/per-repo not-ignored a/globaltwo"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'global ignore'>)} 
      {
        (SQ <'\n'> <'\tenable_global_excludes &&\n'> <'\texpect_from_stdin <<-\\EOF &&\n'> 
          <'\t\tglobalone\n'> <'\t\tper-repo\n'> <'\t\tglobalthree\n'> <'\t\ta/globalthree\n'> <'\t\ta/per-repo\n'> <'\t\tglobaltwo\n'> 
          <'\tEOF\n'> 
          <
'\ttest_check_ignore "globalone per-repo globalthree a/globalthree a/per-repo not-ignored globaltwo"\n'
          >
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'global ignore with -v'>)} 
      {
        (SQ <'\n'> <'\tenable_global_excludes &&\n'> <'\texpect_from_stdin <<-EOF &&\n'> 
          <'\t\t$global_excludes:1:globalone\tglobalone\n'> <'\t\t.git/info/exclude:7:per-repo\tper-repo\n'> <'\t\t$global_excludes:3:globalthree\tglobalthree\n'> 
          <'\t\ta/.gitignore:2:*three\ta/globalthree\n'> <'\t\t.git/info/exclude:7:per-repo\ta/per-repo\n'> <'\t\t$global_excludes:2:!globaltwo\tglobaltwo\n'> 
          <'\tEOF\n'> 
          <
'\ttest_check_ignore "-v globalone per-repo globalthree a/globalthree a/per-repo not-ignored globaltwo"\n'
          >
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (HereDoc
          op_id: Redir_DLessDash
          fd: 16777215
          body: 
            {('one\n') ('not-ignored\n') ('a/one\n') ('a/not-ignored\n') ('a/b/on\n') ('a/b/one\n') 
              ('a/b/one one\n') ('"a/b/one two"\n') ('"a/b/one\\"three"\n') ('a/b/not-ignored\n') ('a/b/two\n') ('a/b/twooo\n') 
              ('globaltwo\n') ('a/globaltwo\n') ('a/b/globaltwo\n') ('b/globaltwo\n')
            }
          do_expansion: False
          here_end: EOF
          was_filled: T
          spids: [2291]
        )
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(stdin)} spids:[2295])
      ]
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (HereDoc
          op_id: Redir_DLessDash
          fd: 16777215
          body: 
            {('one\n') ('a/one\n') ('a/b/on\n') ('a/b/one\n') ('a/b/one one\n') ('a/b/one two\n') 
              ('"a/b/one\\"three"\n') ('a/b/two\n') ('a/b/twooo\n') ('globaltwo\n') ('a/globaltwo\n') ('a/b/globaltwo\n') ('b/globaltwo\n')
            }
          do_expansion: False
          here_end: EOF
          was_filled: T
          spids: [2300]
        )
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(expected-default)} spids:[2304])
      ]
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (HereDoc
          op_id: Redir_DLessDash
          fd: 16777215
          body: 
            {
              (DQ ('.gitignore:1:one\tone\n') ('.gitignore:1:one\ta/one\n') 
                ('a/b/.gitignore:8:!on*\ta/b/on\n') ('a/b/.gitignore:8:!on*\ta/b/one\n') ('a/b/.gitignore:8:!on*\ta/b/one one\n') 
                ('a/b/.gitignore:8:!on*\ta/b/one two\n') ('a/b/.gitignore:8:!on*\t') (Right_DoubleQuote '"') (a/b/one) 
                (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (Right_DoubleQuote '"') (three) (Right_DoubleQuote '"') ('\n') ('a/b/.gitignore:9:!two\ta/b/two\n') 
                ('a/.gitignore:1:two*\ta/b/twooo\n') ($ VSub_Name '$global_excludes') (':2:!globaltwo\tglobaltwo\n') ($ VSub_Name '$global_excludes') 
                (':2:!globaltwo\ta/globaltwo\n') ($ VSub_Name '$global_excludes') (':2:!globaltwo\ta/b/globaltwo\n') ($ VSub_Name '$global_excludes') 
                (':2:!globaltwo\tb/globaltwo\n')
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: T
          spids: [2309]
        )
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(expected-verbose)} spids:[2312])
      ]
    )
    (SimpleCommand
      words: [{(broken_c_unquote)} {(stdin)}]
      redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(stdin0)} spids:[2345])]
    )
    (SimpleCommand
      words: [{(broken_c_unquote)} {(expected-default)}]
      redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(expected-default0)} spids:[2353])]
    )
    (SimpleCommand
      words: [{(broken_c_unquote_verbose)} {(expected-verbose)}]
      redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(expected-verbose0)} spids:[2361])]
    )
    (C {(test_expect_success)} {(SQ <--stdin>)} 
      {
        (SQ <'\n'> <'\texpect_from_stdin <expected-default &&\n'> 
          <'\ttest_check_ignore "--stdin" <stdin\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'--stdin -q'>)} 
      {(SQ <'\n'> <'\texpect "" &&\n'> <'\ttest_check_ignore "-q --stdin" <stdin\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'--stdin -v'>)} 
      {
        (SQ <'\n'> <'\texpect_from_stdin <expected-verbose &&\n'> 
          <'\ttest_check_ignore "-v --stdin" <stdin\n'>
        )
      }
    )
    (ForEach
      iter_name: opts
      iter_words: [{(SQ <'--stdin -z'>)} {(SQ <'-z --stdin'>)}]
      do_arg_iter: F
      body: 
        (DoGroup
          children: [
            (C {(test_expect_success)} {(DQ ($ VSub_Name '$opts'))} 
              {
                (DQ ('\n') ('\t\texpect_from_stdin <expected-default0 &&\n') 
                  ("\t\ttest_check_ignore '") ($ VSub_Name '$opts') ("' <stdin0\n") ('\t')
                )
              }
            )
            (C {(test_expect_success)} {(DQ ($ VSub_Name '$opts') (' -q'))} 
              {(DQ ('\n') ('\t\texpect ')) 
                (DQ (' &&\n') ("\t\ttest_check_ignore '-q ") ($ VSub_Name '$opts') ("' <stdin0\n") ('\t'))
              }
            )
            (C {(test_expect_success)} {(DQ ($ VSub_Name '$opts') (' -v'))} 
              {
                (DQ ('\n') ('\t\texpect_from_stdin <expected-verbose0 &&\n') 
                  ("\t\ttest_check_ignore '-v ") ($ VSub_Name '$opts') ("' <stdin0\n") ('\t')
                )
              }
            )
          ]
          spids: [2418 2475]
        )
      spids: [2409 16777215]
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (HereDoc
          op_id: Redir_DLessDash
          fd: 16777215
          body: 
            {('../one\n') ('../not-ignored\n') ('one\n') ('not-ignored\n') ('b/on\n') ('b/one\n') 
              ('b/one one\n') ('"b/one two"\n') ('"b/one\\"three"\n') ('b/two\n') ('b/not-ignored\n') ('b/twooo\n') ('../globaltwo\n') 
              ('globaltwo\n') ('b/globaltwo\n') ('../b/globaltwo\n') ('c/not-ignored\n')
            }
          do_expansion: False
          here_end: EOF
          was_filled: T
          spids: [2480]
        )
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(stdin)} spids:[2484])
      ]
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (HereDoc
          op_id: Redir_DLessDash
          fd: 16777215
          body: 
            {
              (DQ ('.gitignore:1:one\t../one\n') ('::\t../not-ignored\n') ('.gitignore:1:one\tone\n') 
                ('::\tnot-ignored\n') ('a/b/.gitignore:8:!on*\tb/on\n') ('a/b/.gitignore:8:!on*\tb/one\n') 
                ('a/b/.gitignore:8:!on*\tb/one one\n') ('a/b/.gitignore:8:!on*\tb/one two\n') ('a/b/.gitignore:8:!on*\t') (Right_DoubleQuote '"') (b/one) 
                (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (Right_DoubleQuote '"') (three) (Right_DoubleQuote '"') ('\n') ('a/b/.gitignore:9:!two\tb/two\n') 
                ('::\tb/not-ignored\n') ('a/.gitignore:1:two*\tb/twooo\n') ($ VSub_Name '$global_excludes') (':2:!globaltwo\t../globaltwo\n') 
                ($ VSub_Name '$global_excludes') (':2:!globaltwo\tglobaltwo\n') ($ VSub_Name '$global_excludes') (':2:!globaltwo\tb/globaltwo\n') 
                ($ VSub_Name '$global_excludes') (':2:!globaltwo\t../b/globaltwo\n') ('::\tc/not-ignored\n')
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: T
          spids: [2502]
        )
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(expected-all)} spids:[2505])
      ]
    )
    (SimpleCommand
      words: [{(grep)} {(-v)} {(SQ <'^::\t'>)} {(expected-all)}]
      redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(expected-verbose)} spids:[2547])]
    )
    (SimpleCommand
      words: [{(sed)} {(-e)} {(SQ <'s/.*\t//'>)} {(expected-verbose)}]
      redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(expected-default)} spids:[2560])]
    )
    (SimpleCommand
      words: [{(broken_c_unquote)} {(stdin)}]
      redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(stdin0)} spids:[2568])]
    )
    (SimpleCommand
      words: [{(broken_c_unquote)} {(expected-default)}]
      redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(expected-default0)} spids:[2576])]
    )
    (SimpleCommand
      words: [{(broken_c_unquote_verbose)} {(expected-verbose)}]
      redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(expected-verbose0)} spids:[2584])]
    )
    (C {(test_expect_success)} {(SQ <'--stdin from subdirectory'>)} 
      {
        (SQ <'\n'> <'\texpect_from_stdin <expected-default &&\n'> <'\t(\n'> <'\t\tcd a &&\n'> 
          <'\t\ttest_check_ignore "--stdin" <../stdin\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'--stdin from subdirectory with -v'>)} 
      {
        (SQ <'\n'> <'\texpect_from_stdin <expected-verbose &&\n'> <'\t(\n'> <'\t\tcd a &&\n'> 
          <'\t\ttest_check_ignore "--stdin -v" <../stdin\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'--stdin from subdirectory with -v -n'>)} 
      {
        (SQ <'\n'> <'\texpect_from_stdin <expected-all &&\n'> <'\t(\n'> <'\t\tcd a &&\n'> 
          <'\t\ttest_check_ignore "--stdin -v -n" <../stdin\n'> <'\t)\n'>
        )
      }
    )
    (ForEach
      iter_name: opts
      iter_words: [{(SQ <'--stdin -z'>)} {(SQ <'-z --stdin'>)}]
      do_arg_iter: F
      body: 
        (DoGroup
          children: [
            (C {(test_expect_success)} {(DQ ($ VSub_Name '$opts') (' from subdirectory'))} 
              {
                (SQ <'\n'> <'\t\texpect_from_stdin <expected-default0 &&\n'> <'\t\t(\n'> 
                  <'\t\t\tcd a &&\n'> <'\t\t\ttest_check_ignore "'>
                ) (DQ ($ VSub_Name '$opts')) (SQ <'" <../stdin0\n'> <'\t\t)\n'> <'\t'>)
              }
            )
            (C {(test_expect_success)} {(DQ ($ VSub_Name '$opts') (' from subdirectory with -v'))} 
              {
                (SQ <'\n'> <'\t\texpect_from_stdin <expected-verbose0 &&\n'> <'\t\t(\n'> 
                  <'\t\t\tcd a &&\n'> <'\t\t\ttest_check_ignore "'>
                ) (DQ ($ VSub_Name '$opts')) (SQ <' -v" <../stdin0\n'> <'\t\t)\n'> <'\t'>)
              }
            )
          ]
          spids: [2650 2701]
        )
      spids: [2641 16777215]
    )
    (C {(test_expect_success)} {(PIPE)} {(SQ <'streaming support for --stdin'>)} 
      {
        (SQ <'\n'> <'\tmkfifo in out &&\n'> <'\t(git check-ignore -n -v --stdin <in >out &) &&\n'> 
          <'\n'> <'\t# We cannot just "echo >in" because check-ignore would get EOF\n'> 
          <'\t# after echo exited; instead we open the descriptor in our\n'> <'\t# shell, and then echo to the fd. We make sure to close it at\n'> 
          <'\t# the end, so that the subprocess does get EOF and dies\n'> <'\t# properly.\n'> <'\t#\n'> <'\t# Similarly, we must keep "out" open so that check-ignore does\n'> 
          <'\t# not ever get SIGPIPE trying to write to us. Not only would that\n'> <'\t# produce incorrect results, but then there would be no writer on the\n'> 
          <'\t# other end of the pipe, and we would potentially block forever trying\n'> <'\t# to open it.\n'> <'\texec 9>in &&\n'> <'\texec 8<out &&\n'> 
          <'\ttest_when_finished "exec 9>&-" &&\n'> <'\ttest_when_finished "exec 8<&-" &&\n'> <'\techo >&9 one &&\n'> <'\tread response <&8 &&\n'> 
          <'\techo "$response" | grep "^\\.gitignore:1:one\tone" &&\n'> <'\techo >&9 two &&\n'> <'\tread response <&8 &&\n'> <'\techo "$response" | grep "^::\ttwo"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'trailing whitespace is ignored'>)} 
      {
        (SQ <'\n'> <'\tmkdir whitespace &&\n'> <'\t>whitespace/trailing &&\n'> 
          <'\t>whitespace/untracked &&\n'> <'\techo "whitespace/trailing   " >ignore &&\n'> <'\tcat >expect <<EOF &&\n'> 
          <'whitespace/untracked\n'> <'EOF\n'> <'\t: >err.expect &&\n'> <'\tgit ls-files -o -X ignore whitespace >actual 2>err &&\n'> 
          <'\ttest_cmp expect actual &&\n'> <'\ttest_cmp err.expect err\n'>
        )
      }
    )
    (C {(test_expect_success)} {(KW_Bang '!') (MINGW)} {(SQ <'quoting allows trailing whitespace'>)} 
      {
        (SQ <'\n'> <'\trm -rf whitespace &&\n'> <'\tmkdir whitespace &&\n'> 
          <'\t>"whitespace/trailing  " &&\n'> <'\t>whitespace/untracked &&\n'> <'\techo "whitespace/trailing\\\\ \\\\ " >ignore &&\n'> 
          <'\techo whitespace/untracked >expect &&\n'> <'\t: >err.expect &&\n'> <'\tgit ls-files -o -X ignore whitespace >actual 2>err &&\n'> 
          <'\ttest_cmp expect actual &&\n'> <'\ttest_cmp err.expect err\n'>
        )
      }
    )
    (C {(test_expect_success)} {(KW_Bang '!') (MINGW) (Lit_Comma ',') (KW_Bang '!') (CYGWIN)} 
      {(SQ <'correct handling of backslashes'>)} 
      {
        (SQ <'\n'> <'\trm -rf whitespace &&\n'> <'\tmkdir whitespace &&\n'> 
          <'\t>"whitespace/trailing 1  " &&\n'> <'\t>"whitespace/trailing 2 \\\\\\\\" &&\n'> <'\t>"whitespace/trailing 3 \\\\\\\\" &&\n'> 
          <'\t>"whitespace/trailing 4   \\\\ " &&\n'> <'\t>"whitespace/trailing 5 \\\\ \\\\ " &&\n'> <'\t>"whitespace/trailing 6 \\\\a\\\\" &&\n'> 
          <'\t>whitespace/untracked &&\n'> <'\tsed -e "s/Z$//" >ignore <<-\\EOF &&\n'> <'\twhitespace/trailing 1 \\    Z\n'> 
          <'\twhitespace/trailing 2 \\\\\\\\Z\n'> <'\twhitespace/trailing 3 \\\\\\\\ Z\n'> <'\twhitespace/trailing 4   \\\\\\    Z\n'> 
          <'\twhitespace/trailing 5 \\\\ \\\\\\   Z\n'> <'\twhitespace/trailing 6 \\\\a\\\\Z\n'> <'\tEOF\n'> <'\techo whitespace/untracked >expect &&\n'> 
          <'\t>err.expect &&\n'> <'\tgit ls-files -o -X ignore whitespace >actual 2>err &&\n'> <'\ttest_cmp expect actual &&\n'> 
          <'\ttest_cmp err.expect err\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'info/exclude trumps core.excludesfile'>)} 
      {
        (SQ <'\n'> <'\techo >>global-excludes usually-ignored &&\n'> 
          <'\techo >>.git/info/exclude "!usually-ignored" &&\n'> <'\t>usually-ignored &&\n'> <'\techo "?? usually-ignored" >expect &&\n'> <'\n'> 
          <'\tgit status --porcelain usually-ignored >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)