(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 <'sparse checkout tests\n'> <'\n'> <'* (tag: removed, master) removed\n'> 
                <'| D\tsub/added\n'> <'* (HEAD, tag: top) modified and added\n'> <'| M\tinit.t\n'> <'| A\tsub/added\n'> 
                <'* (tag: init) init\n'> <'  A\tinit.t\n'>
              )
            }
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<'./test-lib.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {(DQ ($ Id.VSub_DollarName TEST_DIRECTORY)) <'/lib-read-tree.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <setup>)}
        {
          (SQ <'\n'> <'\tcat >expected <<-EOF &&\n'> 
            <'\t100644 77f0ba1734ed79d12881f81b36ee134de6a3327b 0\tinit.t\n'> <'\t100644 $EMPTY_BLOB 0\tsub/added\n'> <'\t100644 $EMPTY_BLOB 0\tsub/addedtoo\n'> 
            <'\t100644 $EMPTY_BLOB 0\tsubsub/added\n'> <'\tEOF\n'> <'\tcat >expected.swt <<-\\EOF &&\n'> <'\tH init.t\n'> <'\tH sub/added\n'> 
            <'\tH sub/addedtoo\n'> <'\tH subsub/added\n'> <'\tEOF\n'> <'\n'> <'\ttest_commit init &&\n'> <'\techo modified >>init.t &&\n'> 
            <'\tmkdir sub subsub &&\n'> <'\ttouch sub/added sub/addedtoo subsub/added &&\n'> 
            <'\tgit add init.t sub/added sub/addedtoo subsub/added &&\n'> <'\tgit commit -m "modified and added" &&\n'> <'\tgit tag top &&\n'> <'\tgit rm sub/added &&\n'> 
            <'\tgit commit -m removed &&\n'> <'\tgit tag removed &&\n'> <'\tgit checkout top &&\n'> <'\tgit ls-files --stage >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 <'read-tree without .git/info/sparse-checkout'>)}
        {
          (SQ <'\n'> <'\tread_tree_u_must_succeed -m -u HEAD &&\n'> 
            <'\tgit ls-files --stage >result &&\n'> <'\ttest_cmp expected result &&\n'> <'\tgit ls-files -t >result &&\n'> 
            <'\ttest_cmp expected.swt result\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'read-tree with .git/info/sparse-checkout but disabled'>)}
        {
          (SQ <'\n'> <'\techo >.git/info/sparse-checkout &&\n'> 
            <'\tread_tree_u_must_succeed -m -u HEAD &&\n'> <'\tgit ls-files -t >result &&\n'> <'\ttest_cmp expected.swt result &&\n'> <'\ttest -f init.t &&\n'> 
            <'\ttest -f sub/added\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'read-tree --no-sparse-checkout with empty .git/info/sparse-checkout and enabled'>)}
        {
          (SQ <'\n'> <'\tgit config core.sparsecheckout true &&\n'> 
            <'\techo >.git/info/sparse-checkout &&\n'> <'\tread_tree_u_must_succeed --no-sparse-checkout -m -u HEAD &&\n'> <'\tgit ls-files -t >result &&\n'> 
            <'\ttest_cmp expected.swt result &&\n'> <'\ttest -f init.t &&\n'> <'\ttest -f sub/added\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'read-tree with empty .git/info/sparse-checkout'>)}
        {
          (SQ <'\n'> <'\tgit config core.sparsecheckout true &&\n'> 
            <'\techo >.git/info/sparse-checkout &&\n'> <'\tread_tree_u_must_fail -m -u HEAD &&\n'> <'\tgit ls-files --stage >result &&\n'> 
            <'\ttest_cmp expected result &&\n'> <'\tgit ls-files -t >result &&\n'> <'\ttest_cmp expected.swt result &&\n'> <'\ttest -f init.t &&\n'> 
            <'\ttest -f sub/added\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'match directories with trailing slash'>)}
        {
          (SQ <'\n'> <'\tcat >expected.swt-noinit <<-\\EOF &&\n'> <'\tS init.t\n'> <'\tH sub/added\n'> 
            <'\tH sub/addedtoo\n'> <'\tS subsub/added\n'> <'\tEOF\n'> <'\n'> <'\techo sub/ > .git/info/sparse-checkout &&\n'> 
            <'\tread_tree_u_must_succeed -m -u HEAD &&\n'> <'\tgit ls-files -t > result &&\n'> <'\ttest_cmp expected.swt-noinit result &&\n'> 
            <'\ttest ! -f init.t &&\n'> <'\ttest -f sub/added\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'match directories without trailing slash'>)}
        {
          (SQ <'\n'> <'\techo sub >.git/info/sparse-checkout &&\n'> 
            <'\tread_tree_u_must_succeed -m -u HEAD &&\n'> <'\tgit ls-files -t >result &&\n'> <'\ttest_cmp expected.swt-noinit result &&\n'> 
            <'\ttest ! -f init.t &&\n'> <'\ttest -f sub/added\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'match directories with negated patterns'>)}
        {
          (SQ <'\n'> <'\tcat >expected.swt-negation <<\\EOF &&\n'> <'S init.t\n'> <'S sub/added\n'> 
            <'H sub/addedtoo\n'> <'S subsub/added\n'> <'EOF\n'> <'\n'> <'\tcat >.git/info/sparse-checkout <<\\EOF &&\n'> <'sub\n'> 
            <'!sub/added\n'> <'EOF\n'> <'\tgit read-tree -m -u HEAD &&\n'> <'\tgit ls-files -t >result &&\n'> 
            <'\ttest_cmp expected.swt-negation result &&\n'> <'\ttest ! -f init.t &&\n'> <'\ttest ! -f sub/added &&\n'> <'\ttest -f sub/addedtoo\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'match directories with negated patterns (2)'>)}
        {
          (SQ <'\n'> <'\tcat >expected.swt-negation2 <<\\EOF &&\n'> <'H init.t\n'> <'H sub/added\n'> 
            <'S sub/addedtoo\n'> <'H subsub/added\n'> <'EOF\n'> <'\n'> <'\tcat >.git/info/sparse-checkout <<\\EOF &&\n'> <'/*\n'> 
            <'!sub\n'> <'sub/added\n'> <'EOF\n'> <'\tgit read-tree -m -u HEAD &&\n'> <'\tgit ls-files -t >result &&\n'> 
            <'\ttest_cmp expected.swt-negation2 result &&\n'> <'\ttest -f init.t &&\n'> <'\ttest -f sub/added &&\n'> <'\ttest ! -f sub/addedtoo\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'match directory pattern'>)}
        {
          (SQ <'\n'> <'\techo "s?b" >.git/info/sparse-checkout &&\n'> 
            <'\tread_tree_u_must_succeed -m -u HEAD &&\n'> <'\tgit ls-files -t >result &&\n'> <'\ttest_cmp expected.swt-noinit result &&\n'> 
            <'\ttest ! -f init.t &&\n'> <'\ttest -f sub/added\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'checkout area changes'>)}
        {
          (SQ <'\n'> <'\tcat >expected.swt-nosub <<-\\EOF &&\n'> <'\tH init.t\n'> <'\tS sub/added\n'> 
            <'\tS sub/addedtoo\n'> <'\tS subsub/added\n'> <'\tEOF\n'> <'\n'> <'\techo init.t >.git/info/sparse-checkout &&\n'> 
            <'\tread_tree_u_must_succeed -m -u HEAD &&\n'> <'\tgit ls-files -t >result &&\n'> <'\ttest_cmp expected.swt-nosub result &&\n'> 
            <'\ttest -f init.t &&\n'> <'\ttest ! -f sub/added\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'read-tree updates worktree, absent case'>)}
        {
          (SQ <'\n'> <'\techo sub/added >.git/info/sparse-checkout &&\n'> 
            <'\tgit checkout -f top &&\n'> <'\tread_tree_u_must_succeed -m -u HEAD^ &&\n'> <'\ttest ! -f init.t\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'read-tree updates worktree, dirty case'>)}
        {
          (SQ <'\n'> <'\techo sub/added >.git/info/sparse-checkout &&\n'> 
            <'\tgit checkout -f top &&\n'> <'\techo dirty >init.t &&\n'> <'\tread_tree_u_must_succeed -m -u HEAD^ &&\n'> 
            <'\tgrep -q dirty init.t &&\n'> <'\trm init.t\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'read-tree removes worktree, dirty case'>)}
        {
          (SQ <'\n'> <'\techo init.t >.git/info/sparse-checkout &&\n'> <'\tgit checkout -f top &&\n'> 
            <'\techo dirty >added &&\n'> <'\tread_tree_u_must_succeed -m -u HEAD^ &&\n'> <'\tgrep -q dirty added\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'read-tree adds to worktree, absent case'>)}
        {
          (SQ <'\n'> <'\techo init.t >.git/info/sparse-checkout &&\n'> 
            <'\tgit checkout -f removed &&\n'> <'\tread_tree_u_must_succeed -u -m HEAD^ &&\n'> <'\ttest ! -f sub/added\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'read-tree adds to worktree, dirty case'>)}
        {
          (SQ <'\n'> <'\techo init.t >.git/info/sparse-checkout &&\n'> 
            <'\tgit checkout -f removed &&\n'> <'\tmkdir sub &&\n'> <'\techo dirty >sub/added &&\n'> <'\tread_tree_u_must_succeed -u -m HEAD^ &&\n'> 
            <'\tgrep -q dirty sub/added\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'index removal and worktree narrowing at the same time'>)}
        {
          (SQ <'\n'> <'\t>empty &&\n'> <'\techo init.t >.git/info/sparse-checkout &&\n'> 
            <'\techo sub/added >>.git/info/sparse-checkout &&\n'> <'\tgit checkout -f top &&\n'> <'\techo init.t >.git/info/sparse-checkout &&\n'> 
            <'\tgit checkout removed &&\n'> <'\tgit ls-files sub/added >result &&\n'> <'\ttest ! -f sub/added &&\n'> <'\ttest_cmp empty result\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'read-tree --reset removes outside worktree'>)}
        {
          (SQ <'\n'> <'\t>empty &&\n'> <'\techo init.t >.git/info/sparse-checkout &&\n'> 
            <'\tgit checkout -f top &&\n'> <'\tgit reset --hard removed &&\n'> <'\tgit ls-files sub/added >result &&\n'> 
            <'\ttest_cmp empty result\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'print errors when failed to update worktree'>)}
        {
          (SQ <'\n'> <'\techo sub >.git/info/sparse-checkout &&\n'> <'\tgit checkout -f init &&\n'> 
            <'\tmkdir sub &&\n'> <'\ttouch sub/added sub/addedtoo &&\n'> <'\ttest_must_fail git checkout top 2>actual &&\n'> 
            <'\tcat >expected <<\\EOF &&\n'> <'error: The following untracked working tree files would be overwritten by checkout:\n'> 
            <'\tsub/added\n'> <'\tsub/addedtoo\n'> <'Please move or remove them before you switch branches.\n'> <'Aborting\n'> 
            <'EOF\n'> <'\ttest_i18ncmp expected actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'checkout without --ignore-skip-worktree-bits'>)}
        {
          (SQ <'\n'> <'\techo "*" >.git/info/sparse-checkout &&\n'> <'\tgit checkout -f top &&\n'> 
            <'\ttest_path_is_file init.t &&\n'> <'\techo sub >.git/info/sparse-checkout &&\n'> <'\tgit checkout &&\n'> 
            <'\techo modified >> sub/added &&\n'> <'\tgit checkout . &&\n'> <'\ttest_path_is_missing init.t &&\n'> <'\tgit diff --exit-code HEAD\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'checkout with --ignore-skip-worktree-bits'>)}
        {
          (SQ <'\n'> <'\techo "*" >.git/info/sparse-checkout &&\n'> <'\tgit checkout -f top &&\n'> 
            <'\ttest_path_is_file init.t &&\n'> <'\techo sub >.git/info/sparse-checkout &&\n'> <'\tgit checkout &&\n'> 
            <'\techo modified >> sub/added &&\n'> <'\tgit checkout --ignore-skip-worktree-bits . &&\n'> <'\ttest_path_is_file init.t &&\n'> 
            <'\tgit diff --exit-code HEAD\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_done>
      more_env: []
      words: [{<test_done>}]
      redirects: []
      do_fork: T
    )
  ]
)