(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 archive --format=zip test'>)}
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<'./test-lib.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'SUBSTFORMAT='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'SUBSTFORMAT='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'SUBSTFORMAT='> name:SUBSTFORMAT)
          op: assign_op.Equal
          rhs: {<Id.Lit_Other '%'> <H> <Id.Lit_Other '%'> <n>}
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <test_lazy_prereq>
      more_env: []
      words: [
        {<test_lazy_prereq>}
        {<UNZIP_SYMLINKS>}
        {
          (SQ <'\n'> <'\t(\n'> <'\t\tmkdir unzip-symlinks &&\n'> <'\t\tcd unzip-symlinks &&\n'> 
            <'\t\t"$GIT_UNZIP" "$TEST_DIRECTORY"/t5003/infozip-symlinks.zip &&\n'> <'\t\ttest -h symlink\n'> <'\t)\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <check_zip>
      name: check_zip
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'zipfile='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'zipfile='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'zipfile='> name:zipfile)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number 1) <.zip>}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'listfile='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'listfile='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'listfile='> name:listfile)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number 1) <.lst>}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'dir='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'dir='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dir='> name:dir)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number 1)}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'dir_with_prefix='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'dir_with_prefix='>
                  lhs: 
                    (sh_lhs_expr.Name
                      left: <Id.Lit_VarLike 'dir_with_prefix='>
                      name: dir_with_prefix
                    )
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName dir) <'/'> ($ Id.VSub_Number 2)}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <test_expect_success>
              more_env: []
              words: [
                {<test_expect_success>}
                {<UNZIP>}
                {(DQ <' extract ZIP archive'>)}
                {(SQ <'\n'> <'\t\t(mkdir $dir && cd $dir && "$GIT_UNZIP" ../$zipfile)\n'> <'\t'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <test_expect_success>
              more_env: []
              words: [
                {<test_expect_success>}
                {<UNZIP>}
                {(DQ <' validate filenames'>)}
                {
                  (DQ <'\n'> <'\t\t(cd '> (${ Id.VSub_Name dir_with_prefix) <'a && find .) | sort >'> 
                    ($ Id.VSub_DollarName listfile) <' &&\n'> <'\t\ttest_cmp a.lst '> ($ Id.VSub_DollarName listfile) <'\n'> <'\t'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <test_expect_success>
              more_env: []
              words: [
                {<test_expect_success>}
                {<UNZIP>}
                {(DQ <' validate file contents'>)}
                {(DQ <'\n'> <'\t\tdiff -r a '> (${ Id.VSub_Name dir_with_prefix) <'a\n'> <'\t'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'dir='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'dir='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dir='> name:dir)
                  op: assign_op.Equal
                  rhs: {<eol_> ($ Id.VSub_Number 1)}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'dir_with_prefix='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'dir_with_prefix='>
                  lhs: 
                    (sh_lhs_expr.Name
                      left: <Id.Lit_VarLike 'dir_with_prefix='>
                      name: dir_with_prefix
                    )
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName dir) <'/'> ($ Id.VSub_Number 2)}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'extracted='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'extracted='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'extracted='> name:extracted)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name dir_with_prefix) <a>}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'original='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'original='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'original='> name:original)
                  op: assign_op.Equal
                  rhs: {<a>}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <test_expect_success>
              more_env: []
              words: [
                {<test_expect_success>}
                {<UNZIP>}
                {(DQ <' extract ZIP archive with EOL conversion'>)}
                {(SQ <'\n'> <'\t\t(mkdir $dir && cd $dir && "$GIT_UNZIP" -a ../$zipfile)\n'> <'\t'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <test_expect_success>
              more_env: []
              words: [
                {<test_expect_success>}
                {<UNZIP>}
                {(DQ <' validate that text files are converted'>)}
                {
                  (DQ <'\n'> <'\t\ttest_cmp_bin '> ($ Id.VSub_DollarName extracted) <'/text.cr '> 
                    ($ Id.VSub_DollarName extracted) <'/text.crlf &&\n'> <'\t\ttest_cmp_bin '> ($ Id.VSub_DollarName extracted) <'/text.cr '> 
                    ($ Id.VSub_DollarName extracted) <'/text.lf\n'> <'\t'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <test_expect_success>
              more_env: []
              words: [
                {<test_expect_success>}
                {<UNZIP>}
                {(DQ <' validate that binary files are unchanged'>)}
                {
                  (DQ <'\n'> <'\t\ttest_cmp_bin '> ($ Id.VSub_DollarName original) <'/binary.cr   '> 
                    ($ Id.VSub_DollarName extracted) <'/binary.cr &&\n'> <'\t\ttest_cmp_bin '> ($ Id.VSub_DollarName original) <'/binary.crlf '> 
                    ($ Id.VSub_DollarName extracted) <'/binary.crlf &&\n'> <'\t\ttest_cmp_bin '> ($ Id.VSub_DollarName original) <'/binary.lf   '> 
                    ($ Id.VSub_DollarName extracted) <'/binary.lf\n'> <'\t'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <test_expect_success>
              more_env: []
              words: [
                {<test_expect_success>}
                {<UNZIP>}
                {(DQ <' validate that diff files are converted'>)}
                {
                  (DQ <'\n'> <'\t\ttest_cmp_bin '> ($ Id.VSub_DollarName extracted) <'/diff.cr '> 
                    ($ Id.VSub_DollarName extracted) <'/diff.crlf &&\n'> <'\t\ttest_cmp_bin '> ($ Id.VSub_DollarName extracted) <'/diff.cr '> 
                    ($ Id.VSub_DollarName extracted) <'/diff.lf\n'> <'\t'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <test_expect_success>
              more_env: []
              words: [
                {<test_expect_success>}
                {<UNZIP>}
                {(DQ <' validate that -diff files are unchanged'>)}
                {
                  (DQ <'\n'> <'\t\ttest_cmp_bin '> ($ Id.VSub_DollarName original) <'/nodiff.cr   '> 
                    ($ Id.VSub_DollarName extracted) <'/nodiff.cr &&\n'> <'\t\ttest_cmp_bin '> ($ Id.VSub_DollarName original) <'/nodiff.crlf '> 
                    ($ Id.VSub_DollarName extracted) <'/nodiff.crlf &&\n'> <'\t\ttest_cmp_bin '> ($ Id.VSub_DollarName original) <'/nodiff.lf   '> 
                    ($ Id.VSub_DollarName extracted) <'/nodiff.lf\n'> <'\t'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'populate workdir'>)}
        {
          (SQ <'mkdir a &&\n'> <'     echo simple textfile >a/a &&\n'> <'     mkdir a/bin &&\n'> 
            <'     cp /bin/sh a/bin &&\n'> <'     printf "text\\r"\t>a/text.cr &&\n'> <'     printf "text\\r\\n"\t>a/text.crlf &&\n'> 
            <'     printf "text\\n"\t>a/text.lf &&\n'> <'     printf "text\\r"\t>a/nodiff.cr &&\n'> <'     printf "text\\r\\n"\t>a/nodiff.crlf &&\n'> 
            <'     printf "text\\n"\t>a/nodiff.lf &&\n'> <'     printf "\\0\\r"\t>a/binary.cr &&\n'> <'     printf "\\0\\r\\n"\t>a/binary.crlf &&\n'> 
            <'     printf "\\0\\n"\t>a/binary.lf &&\n'> <'     printf "\\0\\r"\t>a/diff.cr &&\n'> <'     printf "\\0\\r\\n"\t>a/diff.crlf &&\n'> 
            <'     printf "\\0\\n"\t>a/diff.lf &&\n'> <'     printf "A\\$Format:%s\\$O" "$SUBSTFORMAT" >a/substfile1 &&\n'> 
            <'     printf "A not substituted O" >a/substfile2 &&\n'> <'     (p=long_path_to_a_file && cd a &&\n'> 
            <'      for depth in 1 2 3 4 5; do mkdir $p && cd $p; done &&\n'> <'      echo text >file_with_long_path)\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {<SYMLINKS> <Id.Lit_Comma ','> <UNZIP_SYMLINKS>}
        {(SQ <'add symlink'>)}
        {(SQ <'\n'> <'\tln -s a a/symlink_to_a\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'prepare file list'>)}
        {(SQ <'\n'> <'\t(cd a && find .) | sort >a.lst\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'add ignored file'>)}
        {
          (SQ <'echo ignore me >a/ignored &&\n'> 
            <'     echo ignored export-ignore >.git/info/attributes'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'add files to repository'>)}
        {
          (SQ <'\n'> <'\tgit add a &&\n'> 
            <'\tGIT_COMMITTER_DATE="2005-05-27 22:00" git commit -m initial\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'setup export-subst and diff attributes'>)}
        {
          (SQ <'\n'> <'\techo "a/nodiff.* -diff" >>.git/info/attributes &&\n'> 
            <'\techo "a/diff.* diff" >>.git/info/attributes &&\n'> <'\techo "substfile?" export-subst >>.git/info/attributes &&\n'> 
            <'\tgit log --max-count=1 "--pretty=format:A${SUBSTFORMAT}O" HEAD \\\n'> <'\t\t>a/substfile1\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'create bare clone'>)}
        {
          (SQ <'git clone --bare . bare.git &&\n'> 
            <'     cp .git/info/attributes bare.git/info/attributes'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [{<test_expect_success>} {(SQ <'remove ignored file'>)} {(SQ <'rm a/ignored'>)}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'git archive --format=zip'>)}
        {(SQ <'git archive --format=zip HEAD >d.zip'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <check_zip>
      more_env: []
      words: [{<check_zip>} {<d>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'git archive --format=zip in a bare repo'>)}
        {(SQ <'(cd bare.git && git archive --format=zip HEAD) >d1.zip'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'git archive --format=zip vs. the same in a bare repo'>)}
        {(SQ <'test_cmp_bin d.zip d1.zip'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'git archive --format=zip with --output'>)}
        {
          (SQ <'git archive --format=zip --output=d2.zip HEAD &&\n'> <'    test_cmp_bin d.zip d2.zip'>)
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'git archive with --output, inferring format'>)}
        {(SQ <'\n'> <'\tgit archive --output=d3.zip HEAD &&\n'> <'\ttest_cmp_bin d.zip d3.zip\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'git archive --format=zip with prefix'>)}
        {(SQ <'git archive --format=zip --prefix=prefix/ HEAD >e.zip'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <check_zip>
      more_env: []
      words: [{<check_zip>} {<e>} {<'prefix/'>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'git archive -0 --format=zip on large files'>)}
        {
          (SQ <'\n'> <'\ttest_config core.bigfilethreshold 1 &&\n'> 
            <'\tgit archive -0 --format=zip HEAD >large.zip\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <check_zip>
      more_env: []
      words: [{<check_zip>} {<large>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'git archive --format=zip on large files'>)}
        {
          (SQ <'\n'> <'\ttest_config core.bigfilethreshold 1 &&\n'> 
            <'\tgit archive --format=zip HEAD >large-compressed.zip\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <check_zip>
      more_env: []
      words: [{<check_zip>} {<large-compressed>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_done>
      more_env: []
      words: [{<test_done>}]
      redirects: []
      do_fork: T
    )
  ]
)