(command.CommandList
  children: [
    (command.ShAssignment
      left: <Id.Lit_VarLike 'test_description='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'test_description='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'test_description='> name:test_description)
          op: assign_op.Equal
          rhs: 
            {
              (SQ <'git ls-tree directory and filenames handling.\n'> <'\n'> 
                <'This test runs git ls-tree with the following in a tree.\n'> <'\n'> <'    1.txt              - a file\n'> <'    2.txt              - a file\n'> 
                <'    path0/a/b/c/1.txt  - a file in a directory\n'> <'    path1/b/c/1.txt    - a file in a directory\n'> 
                <'    path2/1.txt        - a file in a directory\n'> <'    path3/1.txt        - a file in a directory\n'> 
                <'    path3/2.txt        - a file in a directory\n'> <'\n'> <'Test the handling of multiple directories which have matching file\n'> 
                <'entries.  Also test odd filename and missing entries handling.\n'>
              )
            }
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<'./test-lib.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <setup>)}
        {
          (SQ <'\n'> <'\techo 111 >1.txt &&\n'> <'\techo 222 >2.txt &&\n'> 
            <'\tmkdir path0 path0/a path0/a/b path0/a/b/c &&\n'> <'\techo 111 >path0/a/b/c/1.txt &&\n'> <'\tmkdir path1 path1/b path1/b/c &&\n'> 
            <'\techo 111 >path1/b/c/1.txt &&\n'> <'\tmkdir path2 &&\n'> <'\techo 111 >path2/1.txt &&\n'> <'\tmkdir path3 &&\n'> 
            <'\techo 111 >path3/1.txt &&\n'> <'\techo 222 >path3/2.txt &&\n'> <'\tfind *.txt path* \\( -type f -o -type l \\) -print |\n'> 
            <'\txargs git update-index --add &&\n'> <'\ttree=$(git write-tree) &&\n'> <'\techo $tree\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <test_output>
      name: test_output
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <sed>
                  more_env: []
                  words: [{<sed>} {<-e>} {(DQ <'s/ '> ($ Id.VSub_DollarName _x40) <'\t/ X\t/'>)}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Less '<'>
                      loc: (redir_loc.Fd fd:0)
                      arg: {<current>}
                    )
                    (Redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {<check>}
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <test_cmp>
                  more_env: []
                  words: [{<test_cmp>} {<expected>} {<check>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'ls-tree plain'>)}
        {
          (SQ <'\n'> <'\tgit ls-tree $tree >current &&\n'> <'\tcat >expected <<\\EOF &&\n'> 
            <'100644 blob X\t1.txt\n'> <'100644 blob X\t2.txt\n'> <'040000 tree X\tpath0\n'> <'040000 tree X\tpath1\n'> 
            <'040000 tree X\tpath2\n'> <'040000 tree X\tpath3\n'> <'EOF\n'> <'\ttest_output\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'ls-tree recursive'>)}
        {
          (SQ <'\n'> <'\tgit ls-tree -r $tree >current &&\n'> <'\tcat >expected <<\\EOF &&\n'> 
            <'100644 blob X\t1.txt\n'> <'100644 blob X\t2.txt\n'> <'100644 blob X\tpath0/a/b/c/1.txt\n'> <'100644 blob X\tpath1/b/c/1.txt\n'> 
            <'100644 blob X\tpath2/1.txt\n'> <'100644 blob X\tpath3/1.txt\n'> <'100644 blob X\tpath3/2.txt\n'> <'EOF\n'> <'\ttest_output\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'ls-tree filter 1.txt'>)}
        {
          (SQ <'\n'> <'\tgit ls-tree $tree 1.txt >current &&\n'> <'\tcat >expected <<\\EOF &&\n'> 
            <'100644 blob X\t1.txt\n'> <'EOF\n'> <'\ttest_output\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'ls-tree filter path1/b/c/1.txt'>)}
        {
          (SQ <'\n'> <'\tgit ls-tree $tree path1/b/c/1.txt >current &&\n'> 
            <'\tcat >expected <<\\EOF &&\n'> <'100644 blob X\tpath1/b/c/1.txt\n'> <'EOF\n'> <'\ttest_output\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'ls-tree filter all 1.txt files'>)}
        {
          (SQ <'\n'> <'\tgit ls-tree $tree 1.txt path0/a/b/c/1.txt \\\n'> 
            <'\t\tpath1/b/c/1.txt path2/1.txt path3/1.txt >current &&\n'> <'\tcat >expected <<\\EOF &&\n'> <'100644 blob X\t1.txt\n'> <'100644 blob X\tpath0/a/b/c/1.txt\n'> 
            <'100644 blob X\tpath1/b/c/1.txt\n'> <'100644 blob X\tpath2/1.txt\n'> <'100644 blob X\tpath3/1.txt\n'> <'EOF\n'> <'\ttest_output\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'ls-tree filter directories'>)}
        {
          (SQ <'\n'> <'\tgit ls-tree $tree path3 path2 path0/a/b/c path1/b/c path0/a >current &&\n'> 
            <'\tcat >expected <<\\EOF &&\n'> <'040000 tree X\tpath0/a/b/c\n'> <'040000 tree X\tpath1/b/c\n'> <'040000 tree X\tpath2\n'> 
            <'040000 tree X\tpath3\n'> <'EOF\n'> <'\ttest_output\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'ls-tree filter odd names'>)}
        {
          (SQ <'\n'> <'\tgit ls-tree $tree 1.txt ./1.txt .//1.txt \\\n'> 
            <'\t\tpath3/1.txt path3/./1.txt path3 path3// >current &&\n'> <'\tcat >expected <<\\EOF &&\n'> <'100644 blob X\t1.txt\n'> <'100644 blob X\tpath3/1.txt\n'> 
            <'100644 blob X\tpath3/2.txt\n'> <'EOF\n'> <'\ttest_output\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'ls-tree filter missing files and extra slashes'>)}
        {
          (SQ <'\n'> <'\tgit ls-tree $tree 1.txt/ abc.txt \\\n'> 
            <'\t\tpath3//23.txt path3/2.txt/// >current &&\n'> <'\t>expected &&\n'> <'\ttest_output\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'ls-tree filter is leading path match'>)}
        {
          (SQ <'\n'> <'\tgit ls-tree $tree pa path3/a >current &&\n'> <'\t>expected &&\n'> 
            <'\ttest_output\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'ls-tree --full-name'>)}
        {
          (SQ <'\n'> <'\t(\n'> <'\t\tcd path0 &&\n'> <'\t\tgit ls-tree --full-name $tree a\n'> 
            <'\t) >current &&\n'> <'\tcat >expected <<\\EOF &&\n'> <'040000 tree X\tpath0/a\n'> <'EOF\n'> <'\ttest_output\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'ls-tree --full-tree'>)}
        {
          (SQ <'\n'> <'\t(\n'> <'\t\tcd path1/b/c &&\n'> <'\t\tgit ls-tree --full-tree $tree\n'> 
            <'\t) >current &&\n'> <'\tcat >expected <<\\EOF &&\n'> <'100644 blob X\t1.txt\n'> <'100644 blob X\t2.txt\n'> 
            <'040000 tree X\tpath0\n'> <'040000 tree X\tpath1\n'> <'040000 tree X\tpath2\n'> <'040000 tree X\tpath3\n'> <'EOF\n'> 
            <'\ttest_output\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'ls-tree --full-tree -r'>)}
        {
          (SQ <'\n'> <'\t(\n'> <'\t\tcd path3/ &&\n'> <'\t\tgit ls-tree --full-tree -r $tree\n'> 
            <'\t) >current &&\n'> <'\tcat >expected <<\\EOF &&\n'> <'100644 blob X\t1.txt\n'> <'100644 blob X\t2.txt\n'> 
            <'100644 blob X\tpath0/a/b/c/1.txt\n'> <'100644 blob X\tpath1/b/c/1.txt\n'> <'100644 blob X\tpath2/1.txt\n'> <'100644 blob X\tpath3/1.txt\n'> 
            <'100644 blob X\tpath3/2.txt\n'> <'EOF\n'> <'\ttest_output\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'ls-tree --abbrev=5'>)}
        {
          (SQ <'\n'> <'\tgit ls-tree --abbrev=5 $tree >current &&\n'> 
            <'\tsed -e "s/ $_x05[0-9a-f]*\t/ X\t/" <current >check &&\n'> <'\tcat >expected <<\\EOF &&\n'> <'100644 blob X\t1.txt\n'> <'100644 blob X\t2.txt\n'> 
            <'040000 tree X\tpath0\n'> <'040000 tree X\tpath1\n'> <'040000 tree X\tpath2\n'> <'040000 tree X\tpath3\n'> <'EOF\n'> 
            <'\ttest_cmp expected check\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'ls-tree --name-only'>)}
        {
          (SQ <'\n'> <'\tgit ls-tree --name-only $tree >current &&\n'> <'\tcat >expected <<\\EOF &&\n'> 
            <'1.txt\n'> <'2.txt\n'> <'path0\n'> <'path1\n'> <'path2\n'> <'path3\n'> <'EOF\n'> <'\ttest_output\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'ls-tree --name-only -r'>)}
        {
          (SQ <'\n'> <'\tgit ls-tree --name-only -r $tree >current &&\n'> 
            <'\tcat >expected <<\\EOF &&\n'> <'1.txt\n'> <'2.txt\n'> <'path0/a/b/c/1.txt\n'> <'path1/b/c/1.txt\n'> <'path2/1.txt\n'> <'path3/1.txt\n'> 
            <'path3/2.txt\n'> <'EOF\n'> <'\ttest_output\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_done>
      more_env: []
      words: [{<test_done>}]
      redirects: []
      do_fork: T
    )
  ]
)