(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 <'skip-worktree bit test'>)}
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<'./test-lib.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <cat>
      more_env: []
      words: [{<cat>}]
      redirects: [
        (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect.full>})
        (Redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_tok: <Id.Undefined_Tok ''>
              stdin_parts: [<'H 1\n'> <'H 2\n'> <'H init.t\n'> <'H sub/1\n'> <'H sub/2\n'>]
            )
        )
      ]
      do_fork: T
    )
    (command.Simple
      blame_tok: <cat>
      more_env: []
      words: [{<cat>}]
      redirects: [
        (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect.skip>})
        (Redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_tok: <Id.Undefined_Tok ''>
              stdin_parts: [<'S 1\n'> <'H 2\n'> <'H init.t\n'> <'S sub/1\n'> <'H sub/2\n'>]
            )
        )
      ]
      do_fork: T
    )
    (command.ShFunction
      name_tok: <setup_absent>
      name: setup_absent
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-f>} {<1>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [{<rm>} {<1>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <git>
                  more_env: []
                  words: [{<git>} {<update-index>} {<--remove>} {<1>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <git>
                  more_env: []
                  words: [
                    {<git>}
                    {<update-index>}
                    {<--add>}
                    {<--cacheinfo>}
                    {<100644>}
                    {($ Id.VSub_DollarName EMPTY_BLOB)}
                    {<1>}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <git>
                  more_env: []
                  words: [{<git>} {<update-index>} {<--skip-worktree>} {<1>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <test_absent>
      name: test_absent
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {(DQ <'100644 '> ($ Id.VSub_DollarName EMPTY_BLOB) <' 0\t1'>)}]
                  redirects: [(Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expected>})]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <git>
                  more_env: []
                  words: [{<git>} {<ls-files>} {<--stage>} {<1>}]
                  redirects: [(Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<result>})]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <test_cmp>
                  more_env: []
                  words: [{<test_cmp>} {<expected>} {<result>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<Id.KW_Bang '!'>} {<-f>} {<1>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <setup_dirty>
      name: setup_dirty
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <git>
                  more_env: []
                  words: [{<git>} {<update-index>} {<--force-remove>} {<1>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {<dirty>}]
                  redirects: [(Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<1>})]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <git>
                  more_env: []
                  words: [
                    {<git>}
                    {<update-index>}
                    {<--add>}
                    {<--cacheinfo>}
                    {<100644>}
                    {($ Id.VSub_DollarName EMPTY_BLOB)}
                    {<1>}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <git>
                  more_env: []
                  words: [{<git>} {<update-index>} {<--skip-worktree>} {<1>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <test_dirty>
      name: test_dirty
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {(DQ <'100644 '> ($ Id.VSub_DollarName EMPTY_BLOB) <' 0\t1'>)}]
                  redirects: [(Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expected>})]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <git>
                  more_env: []
                  words: [{<git>} {<ls-files>} {<--stage>} {<1>}]
                  redirects: [(Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<result>})]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <test_cmp>
                  more_env: []
                  words: [{<test_cmp>} {<expected>} {<result>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {<dirty>}]
                  redirects: [(Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expected>})]
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>]
            )
            (command.Simple
              blame_tok: <test_cmp>
              more_env: []
              words: [{<test_cmp>} {<expected>} {<1>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <setup>)}
        {
          (SQ <'\n'> <'\ttest_commit init &&\n'> <'\tmkdir sub &&\n'> 
            <'\ttouch ./1 ./2 sub/1 sub/2 &&\n'> <'\tgit add 1 2 sub/1 sub/2 &&\n'> <'\tgit update-index --skip-worktree 1 sub/1 &&\n'> 
            <'\tgit ls-files -t > result &&\n'> <'\ttest_cmp expect.skip result\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <update-index>)}
        {(SQ <'\n'> <'\tsetup_absent &&\n'> <'\tgit update-index 1 &&\n'> <'\ttest_absent\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <update-index>)}
        {(SQ <'\n'> <'\tsetup_dirty &&\n'> <'\tgit update-index 1 &&\n'> <'\ttest_dirty\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'update-index --remove'>)}
        {
          (SQ <'\n'> <'\tsetup_absent &&\n'> <'\tgit update-index --remove 1 &&\n'> 
            <'\ttest -z "$(git ls-files 1)" &&\n'> <'\ttest ! -f 1\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'update-index --remove'>)}
        {
          (SQ <'\n'> <'\tsetup_dirty &&\n'> <'\tgit update-index --remove 1 &&\n'> 
            <'\ttest -z "$(git ls-files 1)" &&\n'> <'\techo dirty > expected &&\n'> <'\ttest_cmp expected 1\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'ls-files --deleted'>)}
        {(SQ <'\n'> <'\tsetup_absent &&\n'> <'\ttest -z "$(git ls-files -d)"\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'ls-files --deleted'>)}
        {(SQ <'\n'> <'\tsetup_dirty &&\n'> <'\ttest -z "$(git ls-files -d)"\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'ls-files --modified'>)}
        {(SQ <'\n'> <'\tsetup_absent &&\n'> <'\ttest -z "$(git ls-files -m)"\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'ls-files --modified'>)}
        {(SQ <'\n'> <'\tsetup_dirty &&\n'> <'\ttest -z "$(git ls-files -m)"\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'grep with skip-worktree file'>)}
        {
          (SQ <'\n'> <'\tgit update-index --no-skip-worktree 1 &&\n'> <'\techo test > 1 &&\n'> 
            <'\tgit update-index 1 &&\n'> <'\tgit update-index --skip-worktree 1 &&\n'> <'\trm 1 &&\n'> 
            <'\ttest "$(git grep --no-ext-grep test)" = "1:test"\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <echo>
      more_env: []
      words: [
        {<echo>}
        {
          (DQ <':000000 100644 '> ($ Id.VSub_DollarName _z40) <' '> ($ Id.VSub_DollarName EMPTY_BLOB) 
            <' A\t1'>
          )
        }
      ]
      redirects: [(Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expected>})]
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'diff-index does not examine skip-worktree absent entries'>)}
        {
          (SQ <'\n'> <'\tsetup_absent &&\n'> <'\tgit diff-index HEAD -- 1 > result &&\n'> 
            <'\ttest_cmp expected result\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'diff-index does not examine skip-worktree dirty entries'>)}
        {
          (SQ <'\n'> <'\tsetup_dirty &&\n'> <'\tgit diff-index HEAD -- 1 > result &&\n'> 
            <'\ttest_cmp expected result\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'diff-files does not examine skip-worktree absent entries'>)}
        {(SQ <'\n'> <'\tsetup_absent &&\n'> <'\ttest -z "$(git diff-files -- one)"\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'diff-files does not examine skip-worktree dirty entries'>)}
        {(SQ <'\n'> <'\tsetup_dirty &&\n'> <'\ttest -z "$(git diff-files -- one)"\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'git-rm succeeds on skip-worktree absent entries'>)}
        {(SQ <'\n'> <'\tsetup_absent &&\n'> <'\tgit rm 1\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'commit on skip-worktree absent entries'>)}
        {
          (SQ <'\n'> <'\tgit reset &&\n'> <'\tsetup_absent &&\n'> 
            <'\ttest_must_fail git commit -m null 1\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'commit on skip-worktree dirty entries'>)}
        {
          (SQ <'\n'> <'\tgit reset &&\n'> <'\tsetup_dirty &&\n'> 
            <'\ttest_must_fail git commit -m null 1\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_done>
      more_env: []
      words: [{<test_done>}]
      redirects: []
      do_fork: T
    )
  ]
)