(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:-1 arg_word:{(expect.full)} spids:[26])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          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: True
          spids: [29]
        )
      ]
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(expect.skip)} spids:[40])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          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: True
          spids: [43]
        )
      ]
    )
    (FuncDef
      name: setup_absent
      body: 
        (BraceGroup
          children: [
            (AndOr children:[(C {(test)} {(-f)} {(1)})(C {(rm)} {(1)})] op_id:Op_DAmp)
            (AndOr
              children: [
                (C {(git)} {(update-index)} {(--remove)} {(1)})
                (AndOr
                  children: [
                    (C {(git)} {(update-index)} {(--add)} {(--cacheinfo)} {(100644)} 
                      {($ VSub_Name "$EMPTY_BLOB")} {(1)}
                    )
                    (C {(git)} {(update-index)} {(--skip-worktree)} {(1)})
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [56]
        )
      spids: [52 55]
    )
    (FuncDef
      name: test_absent
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(echo)} {(DQ ("100644 ") ($ VSub_Name "$EMPTY_BLOB") (" 0\t1"))}]
                  redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[126])]
                )
                (AndOr
                  children: [
                    (SimpleCommand
                      words: [{(git)} {(ls-files)} {(--stage)} {(1)}]
                      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(result)} spids:[141])]
                    )
                    (AndOr
                      children: [
                        (C {(test_cmp)} {(expected)} {(result)})
                        (C {(test)} {(KW_Bang "!")} {(-f)} {(1)})
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [115]
        )
      spids: [111 114]
    )
    (FuncDef
      name: setup_dirty
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {(git)} {(update-index)} {(--force-remove)} {(1)})
                (AndOr
                  children: [
                    (SimpleCommand
                      words: [{(echo)} {(dirty)}]
                      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(1)} spids:[190])]
                    )
                    (AndOr
                      children: [
                        (C {(git)} {(update-index)} {(--add)} {(--cacheinfo)} {(100644)} 
                          {($ VSub_Name "$EMPTY_BLOB")} {(1)}
                        )
                        (C {(git)} {(update-index)} {(--skip-worktree)} {(1)})
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [172]
        )
      spids: [168 171]
    )
    (FuncDef
      name: test_dirty
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(echo)} {(DQ ("100644 ") ($ VSub_Name "$EMPTY_BLOB") (" 0\t1"))}]
                  redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[240])]
                )
                (AndOr
                  children: [
                    (SimpleCommand
                      words: [{(git)} {(ls-files)} {(--stage)} {(1)}]
                      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(result)} spids:[255])]
                    )
                    (AndOr
                      children: [
                        (C {(test_cmp)} {(expected)} {(result)})
                        (SimpleCommand
                          words: [{(echo)} {(dirty)}]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: -1
                              arg_word: {(expected)}
                              spids: [275]
                            )
                          ]
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
            (C {(test_cmp)} {(expected)} {(1)})
          ]
          spids: [229]
        )
      spids: [225 228]
    )
    (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:-1 arg_word:{(expected)} spids:[445])]
    )
    (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)})
  ]
)