(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'skip-worktree bit test'>)}
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./test-lib.sh)})
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(expect.full)} spids:[26])
        (HereDoc
          op_id: Redir_DLess
          fd: 16777215
          body: {(DQ ('H 1\n') ('H 2\n') ('H init.t\n') ('H sub/1\n') ('H sub/2\n'))}
          do_expansion: True
          here_end: EOF
          was_filled: T
          spids: [29]
        )
      ]
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(expect.skip)} spids:[41])
        (HereDoc
          op_id: Redir_DLess
          fd: 16777215
          body: {(DQ ('S 1\n') ('H 2\n') ('H init.t\n') ('S sub/1\n') ('H sub/2\n'))}
          do_expansion: True
          here_end: EOF
          was_filled: T
          spids: [44]
        )
      ]
    )
    (FuncDef
      name: setup_absent
      body: 
        (BraceGroup
          children: [
            (AndOr ops:[Op_DAmp] children:[(C {(test)} {(-f)} {(1)}) (C {(rm)} {(1)})])
            (AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [
                (C {(git)} {(update-index)} {(--remove)} {(1)})
                (C {(git)} {(update-index)} {(--add)} {(--cacheinfo)} {(100644)} 
                  {($ VSub_Name '$EMPTY_BLOB')} {(1)}
                )
                (C {(git)} {(update-index)} {(--skip-worktree)} {(1)})
              ]
            )
          ]
          spids: [58]
        )
      spids: [54 57]
    )
    (FuncDef
      name: test_absent
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (SimpleCommand
                  words: [{(echo)} {(DQ ('100644 ') ($ VSub_Name '$EMPTY_BLOB') (' 0\t1'))}]
                  redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(expected)} spids:[128])]
                )
                (SimpleCommand
                  words: [{(git)} {(ls-files)} {(--stage)} {(1)}]
                  redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(result)} spids:[143])]
                )
                (C {(test_cmp)} {(expected)} {(result)})
                (C {(test)} {(KW_Bang '!')} {(-f)} {(1)})
              ]
            )
          ]
          spids: [117]
        )
      spids: [113 116]
    )
    (FuncDef
      name: setup_dirty
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (C {(git)} {(update-index)} {(--force-remove)} {(1)})
                (SimpleCommand
                  words: [{(echo)} {(dirty)}]
                  redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(1)} spids:[192])]
                )
                (C {(git)} {(update-index)} {(--add)} {(--cacheinfo)} {(100644)} 
                  {($ VSub_Name '$EMPTY_BLOB')} {(1)}
                )
                (C {(git)} {(update-index)} {(--skip-worktree)} {(1)})
              ]
            )
          ]
          spids: [174]
        )
      spids: [170 173]
    )
    (FuncDef
      name: test_dirty
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (SimpleCommand
                  words: [{(echo)} {(DQ ('100644 ') ($ VSub_Name '$EMPTY_BLOB') (' 0\t1'))}]
                  redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(expected)} spids:[242])]
                )
                (SimpleCommand
                  words: [{(git)} {(ls-files)} {(--stage)} {(1)}]
                  redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(result)} spids:[257])]
                )
                (C {(test_cmp)} {(expected)} {(result)})
                (SimpleCommand
                  words: [{(echo)} {(dirty)}]
                  redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(expected)} spids:[277])]
                )
              ]
            )
            (C {(test_cmp)} {(expected)} {(1)})
          ]
          spids: [231]
        )
      spids: [227 230]
    )
    (C {(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'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <update-index>)} 
      {(SQ <'\n'> <'\tsetup_absent &&\n'> <'\tgit update-index 1 &&\n'> <'\ttest_absent\n'>)}
    )
    (C {(test_expect_success)} {(SQ <update-index>)} 
      {(SQ <'\n'> <'\tsetup_dirty &&\n'> <'\tgit update-index 1 &&\n'> <'\ttest_dirty\n'>)}
    )
    (C {(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'>
        )
      }
    )
    (C {(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'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'ls-files --deleted'>)} 
      {(SQ <'\n'> <'\tsetup_absent &&\n'> <'\ttest -z "$(git ls-files -d)"\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'ls-files --deleted'>)} 
      {(SQ <'\n'> <'\tsetup_dirty &&\n'> <'\ttest -z "$(git ls-files -d)"\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'ls-files --modified'>)} 
      {(SQ <'\n'> <'\tsetup_absent &&\n'> <'\ttest -z "$(git ls-files -m)"\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'ls-files --modified'>)} 
      {(SQ <'\n'> <'\tsetup_dirty &&\n'> <'\ttest -z "$(git ls-files -m)"\n'>)}
    )
    (C {(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'>
        )
      }
    )
    (SimpleCommand
      words: [
        {(echo)}
        {(DQ (':000000 100644 ') ($ VSub_Name '$_z40') (' ') ($ VSub_Name '$EMPTY_BLOB') (' A\t1'))}
      ]
      redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(expected)} spids:[447])]
    )
    (C {(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'>
        )
      }
    )
    (C {(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'>
        )
      }
    )
    (C {(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'>)}
    )
    (C {(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'>)}
    )
    (C {(test_expect_success)} {(SQ <'git-rm succeeds on skip-worktree absent entries'>)} 
      {(SQ <'\n'> <'\tsetup_absent &&\n'> <'\tgit rm 1\n'>)}
    )
    (C {(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'>
        )
      }
    )
    (C {(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'>
        )
      }
    )
    (C {(test_done)})
  ]
)