(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'test case exclude pathspec'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <'\n'> 
          <'\tfor p in file sub/file sub/sub/file sub/file2 sub/sub/sub/file sub2/file; do\n'> <'\t\tif echo $p | grep /; then\n'> <'\t\t\tmkdir -p $(dirname $p)\n'> <'\t\tfi &&\n'> 
          <'\t\t: >$p &&\n'> <'\t\tgit add $p &&\n'> <'\t\tgit commit -m $p\n'> <'\tdone &&\n'> 
          <'\tgit log --oneline --format=%s >actual &&\n'> <'\tcat <<EOF >expect &&\n'> <'sub2/file\n'> <'sub/sub/sub/file\n'> <'sub/file2\n'> <'sub/sub/file\n'> 
          <'sub/file\n'> <'file\n'> <'EOF\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'exclude only should error out'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git log --oneline --format=%s -- ":(exclude)sub"\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'t_e_i() exclude sub'>)} 
      {
        (SQ <'\n'> <'\tgit log --oneline --format=%s -- . ":(exclude)sub" >actual &&\n'> 
          <'\tcat <<EOF >expect &&\n'> <'sub2/file\n'> <'file\n'> <'EOF\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'t_e_i() exclude sub/sub/file'>)} 
      {
        (SQ <'\n'> <'\tgit log --oneline --format=%s -- . ":(exclude)sub/sub/file" >actual &&\n'> 
          <'\tcat <<EOF >expect &&\n'> <'sub2/file\n'> <'sub/sub/sub/file\n'> <'sub/file2\n'> <'sub/file\n'> <'file\n'> <'EOF\n'> 
          <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'t_e_i() exclude sub using mnemonic'>)} 
      {
        (SQ <'\n'> <'\tgit log --oneline --format=%s -- . ":!sub" >actual &&\n'> 
          <'\tcat <<EOF >expect &&\n'> <'sub2/file\n'> <'file\n'> <'EOF\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'t_e_i() exclude :(icase)SUB'>)} 
      {
        (SQ <'\n'> <'\tgit log --oneline --format=%s -- . ":(exclude,icase)SUB" >actual &&\n'> 
          <'\tcat <<EOF >expect &&\n'> <'sub2/file\n'> <'file\n'> <'EOF\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'t_e_i() exclude sub2 from sub'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\tcd sub &&\n'> 
          <'\tgit log --oneline --format=%s -- :/ ":/!sub2" >actual &&\n'> <'\tcat <<EOF >expect &&\n'> <'sub/sub/sub/file\n'> <'sub/file2\n'> <'sub/sub/file\n'> <'sub/file\n'> 
          <'file\n'> <'EOF\n'> <'\ttest_cmp expect actual\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'t_e_i() exclude sub/*file'>)} 
      {
        (SQ <'\n'> <'\tgit log --oneline --format=%s -- . ":(exclude)sub/*file" >actual &&\n'> 
          <'\tcat <<EOF >expect &&\n'> <'sub2/file\n'> <'sub/file2\n'> <'file\n'> <'EOF\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'t_e_i() exclude :(glob)sub/*/file'>)} 
      {
        (SQ <'\n'> <'\tgit log --oneline --format=%s -- . ":(exclude,glob)sub/*/file" >actual &&\n'> 
          <'\tcat <<EOF >expect &&\n'> <'sub2/file\n'> <'sub/sub/sub/file\n'> <'sub/file2\n'> <'sub/file\n'> <'file\n'> <'EOF\n'> 
          <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'m_p_d() exclude sub'>)} 
      {
        (SQ <'\n'> <'\tgit ls-files -- . ":(exclude)sub" >actual &&\n'> <'\tcat <<EOF >expect &&\n'> 
          <'file\n'> <'sub2/file\n'> <'EOF\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'m_p_d() exclude sub/sub/file'>)} 
      {
        (SQ <'\n'> <'\tgit ls-files -- . ":(exclude)sub/sub/file" >actual &&\n'> 
          <'\tcat <<EOF >expect &&\n'> <'file\n'> <'sub/file\n'> <'sub/file2\n'> <'sub/sub/sub/file\n'> <'sub2/file\n'> <'EOF\n'> 
          <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'m_p_d() exclude sub using mnemonic'>)} 
      {
        (SQ <'\n'> <'\tgit ls-files -- . ":!sub" >actual &&\n'> <'\tcat <<EOF >expect &&\n'> <'file\n'> 
          <'sub2/file\n'> <'EOF\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'m_p_d() exclude :(icase)SUB'>)} 
      {
        (SQ <'\n'> <'\tgit ls-files -- . ":(exclude,icase)SUB" >actual &&\n'> 
          <'\tcat <<EOF >expect &&\n'> <'file\n'> <'sub2/file\n'> <'EOF\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'m_p_d() exclude sub2 from sub'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\tcd sub &&\n'> <'\tgit ls-files -- :/ ":/!sub2" >actual &&\n'> 
          <'\tcat <<EOF >expect &&\n'> <'../file\n'> <'file\n'> <'file2\n'> <'sub/file\n'> <'sub/sub/file\n'> <'EOF\n'> 
          <'\ttest_cmp expect actual\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'m_p_d() exclude sub/*file'>)} 
      {
        (SQ <'\n'> <'\tgit ls-files -- . ":(exclude)sub/*file" >actual &&\n'> 
          <'\tcat <<EOF >expect &&\n'> <'file\n'> <'sub/file2\n'> <'sub2/file\n'> <'EOF\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'m_p_d() exclude :(glob)sub/*/file'>)} 
      {
        (SQ <'\n'> <'\tgit ls-files -- . ":(exclude,glob)sub/*/file" >actual &&\n'> 
          <'\tcat <<EOF >expect &&\n'> <'file\n'> <'sub/file\n'> <'sub/file2\n'> <'sub/sub/sub/file\n'> <'sub2/file\n'> <'EOF\n'> 
          <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)