(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 <'test untracked cache'>)}
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<'./test-lib.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <sync_mtime>
      name: sync_mtime
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <find>
              more_env: []
              words: [{<find>} {<.>} {<-type>} {<d>} {<-ls>}]
              redirects: [(Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>})]
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <avoid_racy>
      name: avoid_racy
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <sleep>
              more_env: []
              words: [{<sleep>} {<1>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <test_lazy_prereq>
      more_env: []
      words: [
        {<test_lazy_prereq>}
        {<UNTRACKED_CACHE>}
        {
          (SQ <'\n'> <'\t{ git update-index --test-untracked-cache; ret=$?; } &&\n'> 
            <'\ttest $ret -ne 1\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.If
      if_kw: <Id.KW_If if>
      arms: [
        (IfArm
          keyword: <Id.KW_If if>
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Pipeline
                      negated: <Id.KW_Bang '!'>
                      children: [
                        (command.Simple
                          blame_tok: <test_have_prereq>
                          more_env: []
                          words: [{<test_have_prereq>} {<UNTRACKED_CACHE>}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      ops: []
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'skip_all='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'skip_all='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'skip_all='> name:skip_all)
                  op: assign_op.Equal
                  rhs: {(SQ <'This system does not support untracked cache'>)}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <test_done>
              more_env: []
              words: [{<test_done>}]
              redirects: []
              do_fork: T
            )
          ]
          spids: [92 101]
        )
      ]
      else_action: []
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'core.untrackedCache is unset'>)}
        {(SQ <'\n'> <'\ttest_must_fail git config --get core.untrackedCache\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <setup>)}
        {
          (SQ <'\n'> <'\tgit init worktree &&\n'> <'\tcd worktree &&\n'> 
            <'\tmkdir done dtwo dthree &&\n'> <'\ttouch one two three done/one dtwo/two dthree/three &&\n'> <'\tgit add one two done/one &&\n'> 
            <'\t: >.git/info/exclude &&\n'> <'\tgit update-index --untracked-cache\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'untracked cache is empty'>)}
        {
          (SQ <'\n'> <'\ttest-dump-untracked-cache >../actual &&\n'> 
            <'\tcat >../expect-empty <<EOF &&\n'> <'info/exclude 0000000000000000000000000000000000000000\n'> 
            <'core.excludesfile 0000000000000000000000000000000000000000\n'> <'exclude_per_dir .gitignore\n'> <'flags 00000006\n'> <'EOF\n'> 
            <'\ttest_cmp ../expect-empty ../actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.AndOr
      children: [
        (command.Simple
          blame_tok: <cat>
          more_env: []
          words: [{<cat>}]
          redirects: [
            (Redir
              op: <Id.Redir_Great '>'>
              loc: (redir_loc.Fd fd:1)
              arg: {<'../status.expect'>}
            )
            (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: [
                    <'A  done/one\n'>
                    <'A  one\n'>
                    <'A  two\n'>
                    <'?? dthree/\n'>
                    <'?? dtwo/\n'>
                    <'?? three\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: {<'../dump.expect'>}
            )
            (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: [
                    <'info/exclude '>
                    ($ Id.VSub_DollarName EMPTY_BLOB)
                    <'\n'>
                    <'core.excludesfile 0000000000000000000000000000000000000000\n'>
                    <'exclude_per_dir .gitignore\n'>
                    <'flags 00000006\n'>
                    <'/ 0000000000000000000000000000000000000000 recurse valid\n'>
                    <'dthree/\n'>
                    <'dtwo/\n'>
                    <'three\n'>
                    <'/done/ 0000000000000000000000000000000000000000 recurse valid\n'>
                    <'/dthree/ 0000000000000000000000000000000000000000 recurse check_only valid\n'>
                    <'three\n'>
                    <'/dtwo/ 0000000000000000000000000000000000000000 recurse check_only valid\n'>
                    <'two\n'>
                  ]
                )
            )
          ]
          do_fork: T
        )
        (command.Simple
          blame_tok: <test_expect_success>
          more_env: []
          words: [
            {<test_expect_success>}
            {(SQ <'status first time (empty cache)'>)}
            {
              (SQ <'\n'> <'\tavoid_racy &&\n'> <'\t: >../trace &&\n'> 
                <'\tGIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \\\n'> <'\tgit status --porcelain >../actual &&\n'> <'\ttest_cmp ../status.expect ../actual &&\n'> 
                <'\tcat >../trace.expect <<EOF &&\n'> <'node creation: 3\n'> <'gitignore invalidation: 1\n'> <'directory invalidation: 0\n'> <'opendir: 4\n'> 
                <'EOF\n'> <'\ttest_cmp ../trace.expect ../trace\n'>
              )
            }
          ]
          redirects: []
          do_fork: T
        )
      ]
      ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>]
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'untracked cache after first status'>)}
        {
          (SQ <'\n'> <'\ttest-dump-untracked-cache >../actual &&\n'> 
            <'\ttest_cmp ../dump.expect ../actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'status second time (fully populated cache)'>)}
        {
          (SQ <'\n'> <'\tavoid_racy &&\n'> <'\t: >../trace &&\n'> 
            <'\tGIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \\\n'> <'\tgit status --porcelain >../actual &&\n'> <'\ttest_cmp ../status.expect ../actual &&\n'> 
            <'\tcat >../trace.expect <<EOF &&\n'> <'node creation: 0\n'> <'gitignore invalidation: 0\n'> <'directory invalidation: 0\n'> <'opendir: 0\n'> 
            <'EOF\n'> <'\ttest_cmp ../trace.expect ../trace\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'untracked cache after second status'>)}
        {
          (SQ <'\n'> <'\ttest-dump-untracked-cache >../actual &&\n'> 
            <'\ttest_cmp ../dump.expect ../actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'modify in root directory, one dir invalidation'>)}
        {
          (SQ <'\n'> <'\tavoid_racy &&\n'> <'\t: >four &&\n'> <'\t: >../trace &&\n'> 
            <'\tGIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \\\n'> <'\tgit status --porcelain >../actual &&\n'> <'\tcat >../status.expect <<EOF &&\n'> <'A  done/one\n'> 
            <'A  one\n'> <'A  two\n'> <'?? dthree/\n'> <'?? dtwo/\n'> <'?? four\n'> <'?? three\n'> <'EOF\n'> 
            <'\ttest_cmp ../status.expect ../actual &&\n'> <'\tcat >../trace.expect <<EOF &&\n'> <'node creation: 0\n'> <'gitignore invalidation: 0\n'> 
            <'directory invalidation: 1\n'> <'opendir: 1\n'> <'EOF\n'> <'\ttest_cmp ../trace.expect ../trace\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'verify untracked cache dump'>)}
        {
          (SQ <'\n'> <'\ttest-dump-untracked-cache >../actual &&\n'> <'\tcat >../expect <<EOF &&\n'> 
            <'info/exclude $EMPTY_BLOB\n'> <'core.excludesfile 0000000000000000000000000000000000000000\n'> <'exclude_per_dir .gitignore\n'> 
            <'flags 00000006\n'> <'/ 0000000000000000000000000000000000000000 recurse valid\n'> <'dthree/\n'> <'dtwo/\n'> <'four\n'> 
            <'three\n'> <'/done/ 0000000000000000000000000000000000000000 recurse valid\n'> 
            <'/dthree/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> <'three\n'> <'/dtwo/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> <'two\n'> 
            <'EOF\n'> <'\ttest_cmp ../expect ../actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'new .gitignore invalidates recursively'>)}
        {
          (SQ <'\n'> <'\tavoid_racy &&\n'> <'\techo four >.gitignore &&\n'> <'\t: >../trace &&\n'> 
            <'\tGIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \\\n'> <'\tgit status --porcelain >../actual &&\n'> <'\tcat >../status.expect <<EOF &&\n'> <'A  done/one\n'> 
            <'A  one\n'> <'A  two\n'> <'?? .gitignore\n'> <'?? dthree/\n'> <'?? dtwo/\n'> <'?? three\n'> <'EOF\n'> 
            <'\ttest_cmp ../status.expect ../actual &&\n'> <'\tcat >../trace.expect <<EOF &&\n'> <'node creation: 0\n'> <'gitignore invalidation: 1\n'> 
            <'directory invalidation: 1\n'> <'opendir: 4\n'> <'EOF\n'> <'\ttest_cmp ../trace.expect ../trace\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'verify untracked cache dump'>)}
        {
          (SQ <'\n'> <'\ttest-dump-untracked-cache >../actual &&\n'> <'\tcat >../expect <<EOF &&\n'> 
            <'info/exclude $EMPTY_BLOB\n'> <'core.excludesfile 0000000000000000000000000000000000000000\n'> <'exclude_per_dir .gitignore\n'> 
            <'flags 00000006\n'> <'/ e6fcc8f2ee31bae321d66afd183fcb7237afae6e recurse valid\n'> <'.gitignore\n'> <'dthree/\n'> 
            <'dtwo/\n'> <'three\n'> <'/done/ 0000000000000000000000000000000000000000 recurse valid\n'> 
            <'/dthree/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> <'three\n'> <'/dtwo/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> <'two\n'> 
            <'EOF\n'> <'\ttest_cmp ../expect ../actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'new info/exclude invalidates everything'>)}
        {
          (SQ <'\n'> <'\tavoid_racy &&\n'> <'\techo three >>.git/info/exclude &&\n'> 
            <'\t: >../trace &&\n'> <'\tGIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \\\n'> 
            <'\tgit status --porcelain >../actual &&\n'> <'\tcat >../status.expect <<EOF &&\n'> <'A  done/one\n'> <'A  one\n'> <'A  two\n'> <'?? .gitignore\n'> 
            <'?? dtwo/\n'> <'EOF\n'> <'\ttest_cmp ../status.expect ../actual &&\n'> <'\tcat >../trace.expect <<EOF &&\n'> 
            <'node creation: 0\n'> <'gitignore invalidation: 1\n'> <'directory invalidation: 0\n'> <'opendir: 4\n'> <'EOF\n'> 
            <'\ttest_cmp ../trace.expect ../trace\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'verify untracked cache dump'>)}
        {
          (SQ <'\n'> <'\ttest-dump-untracked-cache >../actual &&\n'> <'\tcat >../expect <<EOF &&\n'> 
            <'info/exclude 13263c0978fb9fad16b2d580fb800b6d811c3ff0\n'> <'core.excludesfile 0000000000000000000000000000000000000000\n'> <'exclude_per_dir .gitignore\n'> 
            <'flags 00000006\n'> <'/ e6fcc8f2ee31bae321d66afd183fcb7237afae6e recurse valid\n'> <'.gitignore\n'> <'dtwo/\n'> 
            <'/done/ 0000000000000000000000000000000000000000 recurse valid\n'> <'/dthree/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> 
            <'/dtwo/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> <'two\n'> <'EOF\n'> <'\ttest_cmp ../expect ../actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'move two from tracked to untracked'>)}
        {
          (SQ <'\n'> <'\tgit rm --cached two &&\n'> <'\ttest-dump-untracked-cache >../actual &&\n'> 
            <'\tcat >../expect <<EOF &&\n'> <'info/exclude 13263c0978fb9fad16b2d580fb800b6d811c3ff0\n'> 
            <'core.excludesfile 0000000000000000000000000000000000000000\n'> <'exclude_per_dir .gitignore\n'> <'flags 00000006\n'> 
            <'/ e6fcc8f2ee31bae321d66afd183fcb7237afae6e recurse\n'> <'/done/ 0000000000000000000000000000000000000000 recurse valid\n'> 
            <'/dthree/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> <'/dtwo/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> <'two\n'> <'EOF\n'> 
            <'\ttest_cmp ../expect ../actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'status after the move'>)}
        {
          (SQ <'\n'> <'\t: >../trace &&\n'> 
            <'\tGIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \\\n'> <'\tgit status --porcelain >../actual &&\n'> <'\tcat >../status.expect <<EOF &&\n'> <'A  done/one\n'> 
            <'A  one\n'> <'?? .gitignore\n'> <'?? dtwo/\n'> <'?? two\n'> <'EOF\n'> <'\ttest_cmp ../status.expect ../actual &&\n'> 
            <'\tcat >../trace.expect <<EOF &&\n'> <'node creation: 0\n'> <'gitignore invalidation: 0\n'> <'directory invalidation: 0\n'> <'opendir: 1\n'> 
            <'EOF\n'> <'\ttest_cmp ../trace.expect ../trace\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'verify untracked cache dump'>)}
        {
          (SQ <'\n'> <'\ttest-dump-untracked-cache >../actual &&\n'> <'\tcat >../expect <<EOF &&\n'> 
            <'info/exclude 13263c0978fb9fad16b2d580fb800b6d811c3ff0\n'> <'core.excludesfile 0000000000000000000000000000000000000000\n'> <'exclude_per_dir .gitignore\n'> 
            <'flags 00000006\n'> <'/ e6fcc8f2ee31bae321d66afd183fcb7237afae6e recurse valid\n'> <'.gitignore\n'> <'dtwo/\n'> <'two\n'> 
            <'/done/ 0000000000000000000000000000000000000000 recurse valid\n'> <'/dthree/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> 
            <'/dtwo/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> <'two\n'> <'EOF\n'> <'\ttest_cmp ../expect ../actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'move two from untracked to tracked'>)}
        {
          (SQ <'\n'> <'\tgit add two &&\n'> <'\ttest-dump-untracked-cache >../actual &&\n'> 
            <'\tcat >../expect <<EOF &&\n'> <'info/exclude 13263c0978fb9fad16b2d580fb800b6d811c3ff0\n'> 
            <'core.excludesfile 0000000000000000000000000000000000000000\n'> <'exclude_per_dir .gitignore\n'> <'flags 00000006\n'> 
            <'/ e6fcc8f2ee31bae321d66afd183fcb7237afae6e recurse\n'> <'/done/ 0000000000000000000000000000000000000000 recurse valid\n'> 
            <'/dthree/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> <'/dtwo/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> <'two\n'> <'EOF\n'> 
            <'\ttest_cmp ../expect ../actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'status after the move'>)}
        {
          (SQ <'\n'> <'\t: >../trace &&\n'> 
            <'\tGIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \\\n'> <'\tgit status --porcelain >../actual &&\n'> <'\tcat >../status.expect <<EOF &&\n'> <'A  done/one\n'> 
            <'A  one\n'> <'A  two\n'> <'?? .gitignore\n'> <'?? dtwo/\n'> <'EOF\n'> <'\ttest_cmp ../status.expect ../actual &&\n'> 
            <'\tcat >../trace.expect <<EOF &&\n'> <'node creation: 0\n'> <'gitignore invalidation: 0\n'> <'directory invalidation: 0\n'> <'opendir: 1\n'> 
            <'EOF\n'> <'\ttest_cmp ../trace.expect ../trace\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'verify untracked cache dump'>)}
        {
          (SQ <'\n'> <'\ttest-dump-untracked-cache >../actual &&\n'> <'\tcat >../expect <<EOF &&\n'> 
            <'info/exclude 13263c0978fb9fad16b2d580fb800b6d811c3ff0\n'> <'core.excludesfile 0000000000000000000000000000000000000000\n'> <'exclude_per_dir .gitignore\n'> 
            <'flags 00000006\n'> <'/ e6fcc8f2ee31bae321d66afd183fcb7237afae6e recurse valid\n'> <'.gitignore\n'> <'dtwo/\n'> 
            <'/done/ 0000000000000000000000000000000000000000 recurse valid\n'> <'/dthree/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> 
            <'/dtwo/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> <'two\n'> <'EOF\n'> <'\ttest_cmp ../expect ../actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'set up for sparse checkout testing'>)}
        {
          (SQ <'\n'> <'\techo two >done/.gitignore &&\n'> <'\techo three >>done/.gitignore &&\n'> 
            <'\techo two >done/two &&\n'> <'\tgit add -f done/two done/.gitignore &&\n'> <'\tgit commit -m "first commit"\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'status after commit'>)}
        {
          (SQ <'\n'> <'\t: >../trace &&\n'> 
            <'\tGIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \\\n'> <'\tgit status --porcelain >../actual &&\n'> <'\tcat >../status.expect <<EOF &&\n'> <'?? .gitignore\n'> 
            <'?? dtwo/\n'> <'EOF\n'> <'\ttest_cmp ../status.expect ../actual &&\n'> <'\tcat >../trace.expect <<EOF &&\n'> 
            <'node creation: 0\n'> <'gitignore invalidation: 0\n'> <'directory invalidation: 0\n'> <'opendir: 2\n'> <'EOF\n'> 
            <'\ttest_cmp ../trace.expect ../trace\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'untracked cache correct after commit'>)}
        {
          (SQ <'\n'> <'\ttest-dump-untracked-cache >../actual &&\n'> <'\tcat >../expect <<EOF &&\n'> 
            <'info/exclude 13263c0978fb9fad16b2d580fb800b6d811c3ff0\n'> <'core.excludesfile 0000000000000000000000000000000000000000\n'> <'exclude_per_dir .gitignore\n'> 
            <'flags 00000006\n'> <'/ e6fcc8f2ee31bae321d66afd183fcb7237afae6e recurse valid\n'> <'.gitignore\n'> <'dtwo/\n'> 
            <'/done/ 0000000000000000000000000000000000000000 recurse valid\n'> <'/dthree/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> 
            <'/dtwo/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> <'two\n'> <'EOF\n'> <'\ttest_cmp ../expect ../actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'set up sparse checkout'>)}
        {
          (SQ <'\n'> <'\techo "done/[a-z]*" >.git/info/sparse-checkout &&\n'> 
            <'\ttest_config core.sparsecheckout true &&\n'> <'\tgit checkout master &&\n'> <'\tgit update-index --force-untracked-cache &&\n'> 
            <'\tgit status --porcelain >/dev/null && # prime the cache\n'> <'\ttest_path_is_missing done/.gitignore &&\n'> <'\ttest_path_is_file done/one\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'create/modify files, some of which are gitignored'>)}
        {
          (SQ <'\n'> <'\techo two bis >done/two &&\n'> 
            <'\techo three >done/three && # three is gitignored\n'> <'\techo four >done/four && # four is gitignored at a higher level\n'> 
            <'\techo five >done/five && # five is not gitignored\n'> <'\techo test >base && #we need to ensure that the root dir is touched\n'> <'\trm base &&\n'> 
            <'\tsync_mtime\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'test sparse status with untracked cache'>)}
        {
          (SQ <'\n'> <'\t: >../trace &&\n'> <'\tavoid_racy &&\n'> 
            <'\tGIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \\\n'> <'\tgit status --porcelain >../status.actual &&\n'> <'\tcat >../status.expect <<EOF &&\n'> 
            <' M done/two\n'> <'?? .gitignore\n'> <'?? done/five\n'> <'?? dtwo/\n'> <'EOF\n'> 
            <'\ttest_cmp ../status.expect ../status.actual &&\n'> <'\tcat >../trace.expect <<EOF &&\n'> <'node creation: 0\n'> <'gitignore invalidation: 1\n'> 
            <'directory invalidation: 2\n'> <'opendir: 2\n'> <'EOF\n'> <'\ttest_cmp ../trace.expect ../trace\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'untracked cache correct after status'>)}
        {
          (SQ <'\n'> <'\ttest-dump-untracked-cache >../actual &&\n'> <'\tcat >../expect <<EOF &&\n'> 
            <'info/exclude 13263c0978fb9fad16b2d580fb800b6d811c3ff0\n'> <'core.excludesfile 0000000000000000000000000000000000000000\n'> <'exclude_per_dir .gitignore\n'> 
            <'flags 00000006\n'> <'/ e6fcc8f2ee31bae321d66afd183fcb7237afae6e recurse valid\n'> <'.gitignore\n'> <'dtwo/\n'> 
            <'/done/ 1946f0437f90c5005533cbe1736a6451ca301714 recurse valid\n'> <'five\n'> <'/dthree/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> 
            <'/dtwo/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> <'two\n'> <'EOF\n'> <'\ttest_cmp ../expect ../actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'test sparse status again with untracked cache'>)}
        {
          (SQ <'\n'> <'\tavoid_racy &&\n'> <'\t: >../trace &&\n'> 
            <'\tGIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \\\n'> <'\tgit status --porcelain >../status.actual &&\n'> <'\tcat >../status.expect <<EOF &&\n'> 
            <' M done/two\n'> <'?? .gitignore\n'> <'?? done/five\n'> <'?? dtwo/\n'> <'EOF\n'> 
            <'\ttest_cmp ../status.expect ../status.actual &&\n'> <'\tcat >../trace.expect <<EOF &&\n'> <'node creation: 0\n'> <'gitignore invalidation: 0\n'> 
            <'directory invalidation: 0\n'> <'opendir: 0\n'> <'EOF\n'> <'\ttest_cmp ../trace.expect ../trace\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'set up for test of subdir and sparse checkouts'>)}
        {
          (SQ <'\n'> <'\tmkdir done/sub &&\n'> <'\tmkdir done/sub/sub &&\n'> 
            <'\techo "sub" > done/sub/sub/file\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'test sparse status with untracked cache and subdir'>)}
        {
          (SQ <'\n'> <'\tavoid_racy &&\n'> <'\t: >../trace &&\n'> 
            <'\tGIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \\\n'> <'\tgit status --porcelain >../status.actual &&\n'> <'\tcat >../status.expect <<EOF &&\n'> 
            <' M done/two\n'> <'?? .gitignore\n'> <'?? done/five\n'> <'?? done/sub/\n'> <'?? dtwo/\n'> <'EOF\n'> 
            <'\ttest_cmp ../status.expect ../status.actual &&\n'> <'\tcat >../trace.expect <<EOF &&\n'> <'node creation: 2\n'> <'gitignore invalidation: 0\n'> 
            <'directory invalidation: 1\n'> <'opendir: 3\n'> <'EOF\n'> <'\ttest_cmp ../trace.expect ../trace\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'verify untracked cache dump (sparse/subdirs)'>)}
        {
          (SQ <'\n'> <'\ttest-dump-untracked-cache >../actual &&\n'> 
            <'\tcat >../expect-from-test-dump <<EOF &&\n'> <'info/exclude 13263c0978fb9fad16b2d580fb800b6d811c3ff0\n'> 
            <'core.excludesfile 0000000000000000000000000000000000000000\n'> <'exclude_per_dir .gitignore\n'> <'flags 00000006\n'> 
            <'/ e6fcc8f2ee31bae321d66afd183fcb7237afae6e recurse valid\n'> <'.gitignore\n'> <'dtwo/\n'> <'/done/ 1946f0437f90c5005533cbe1736a6451ca301714 recurse valid\n'> 
            <'five\n'> <'sub/\n'> <'/done/sub/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> 
            <'sub/\n'> <'/done/sub/sub/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> <'file\n'> 
            <'/dthree/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> <'/dtwo/ 0000000000000000000000000000000000000000 recurse check_only valid\n'> <'two\n'> <'EOF\n'> 
            <'\ttest_cmp ../expect-from-test-dump ../actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'test sparse status again with untracked cache and subdir'>)}
        {
          (SQ <'\n'> <'\tavoid_racy &&\n'> <'\t: >../trace &&\n'> 
            <'\tGIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \\\n'> <'\tgit status --porcelain >../status.actual &&\n'> 
            <'\ttest_cmp ../status.expect ../status.actual &&\n'> <'\tcat >../trace.expect <<EOF &&\n'> <'node creation: 0\n'> <'gitignore invalidation: 0\n'> 
            <'directory invalidation: 0\n'> <'opendir: 0\n'> <'EOF\n'> <'\ttest_cmp ../trace.expect ../trace\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'move entry in subdir from untracked to cached'>)}
        {
          (SQ <'\n'> <'\tgit add dtwo/two &&\n'> <'\tgit status --porcelain >../status.actual &&\n'> 
            <'\tcat >../status.expect <<EOF &&\n'> <' M done/two\n'> <'A  dtwo/two\n'> <'?? .gitignore\n'> <'?? done/five\n'> <'?? done/sub/\n'> <'EOF\n'> 
            <'\ttest_cmp ../status.expect ../status.actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'move entry in subdir from cached to untracked'>)}
        {
          (SQ <'\n'> <'\tgit rm --cached dtwo/two &&\n'> 
            <'\tgit status --porcelain >../status.actual &&\n'> <'\tcat >../status.expect <<EOF &&\n'> <' M done/two\n'> <'?? .gitignore\n'> <'?? done/five\n'> 
            <'?? done/sub/\n'> <'?? dtwo/\n'> <'EOF\n'> <'\ttest_cmp ../status.expect ../status.actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'--no-untracked-cache removes the cache'>)}
        {
          (SQ <'\n'> <'\tgit update-index --no-untracked-cache &&\n'> 
            <'\ttest-dump-untracked-cache >../actual &&\n'> <'\techo "no untracked cache" >../expect-no-uc &&\n'> <'\ttest_cmp ../expect-no-uc ../actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'git status does not change anything'>)}
        {
          (SQ <'\n'> <'\tgit status &&\n'> <'\ttest-dump-untracked-cache >../actual &&\n'> 
            <'\ttest_cmp ../expect-no-uc ../actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'setting core.untrackedCache to true and using git status creates the cache'>)}
        {
          (SQ <'\n'> <'\tgit config core.untrackedCache true &&\n'> 
            <'\ttest-dump-untracked-cache >../actual &&\n'> <'\ttest_cmp ../expect-no-uc ../actual &&\n'> <'\tgit status &&\n'> 
            <'\ttest-dump-untracked-cache >../actual &&\n'> <'\ttest_cmp ../expect-from-test-dump ../actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'using --no-untracked-cache does not fail when core.untrackedCache is true'>)}
        {
          (SQ <'\n'> <'\tgit update-index --no-untracked-cache &&\n'> 
            <'\ttest-dump-untracked-cache >../actual &&\n'> <'\ttest_cmp ../expect-no-uc ../actual &&\n'> <'\tgit update-index --untracked-cache &&\n'> 
            <'\ttest-dump-untracked-cache >../actual &&\n'> <'\ttest_cmp ../expect-empty ../actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'setting core.untrackedCache to false and using git status removes the cache'>)}
        {
          (SQ <'\n'> <'\tgit config core.untrackedCache false &&\n'> 
            <'\ttest-dump-untracked-cache >../actual &&\n'> <'\ttest_cmp ../expect-empty ../actual &&\n'> <'\tgit status &&\n'> 
            <'\ttest-dump-untracked-cache >../actual &&\n'> <'\ttest_cmp ../expect-no-uc ../actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'using --untracked-cache does not fail when core.untrackedCache is false'>)}
        {
          (SQ <'\n'> <'\tgit update-index --untracked-cache &&\n'> 
            <'\ttest-dump-untracked-cache >../actual &&\n'> <'\ttest_cmp ../expect-empty ../actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'setting core.untrackedCache to keep'>)}
        {
          (SQ <'\n'> <'\tgit config core.untrackedCache keep &&\n'> 
            <'\tgit update-index --untracked-cache &&\n'> <'\ttest-dump-untracked-cache >../actual &&\n'> <'\ttest_cmp ../expect-empty ../actual &&\n'> 
            <'\tgit status &&\n'> <'\ttest-dump-untracked-cache >../actual &&\n'> <'\ttest_cmp ../expect-from-test-dump ../actual &&\n'> 
            <'\tgit update-index --no-untracked-cache &&\n'> <'\ttest-dump-untracked-cache >../actual &&\n'> <'\ttest_cmp ../expect-no-uc ../actual &&\n'> 
            <'\tgit update-index --force-untracked-cache &&\n'> <'\ttest-dump-untracked-cache >../actual &&\n'> <'\ttest_cmp ../expect-empty ../actual &&\n'> 
            <'\tgit status &&\n'> <'\ttest-dump-untracked-cache >../actual &&\n'> <'\ttest_cmp ../expect-from-test-dump ../actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'test ident field is working'>)}
        {
          (SQ <'\n'> <'\tmkdir ../other_worktree &&\n'> 
            <'\tcp -R done dthree dtwo four three ../other_worktree &&\n'> <'\tGIT_WORK_TREE=../other_worktree git status 2>../err &&\n'> 
            <
'\techo "warning: Untracked cache is disabled on this system or location." >../expect &&\n'
            > <'\ttest_i18ncmp ../expect ../err\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_done>
      more_env: []
      words: [{<test_done>}]
      redirects: []
      do_fork: T
    )
  ]
)