(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 <'git add -u\n'> <'\n'> 
                <'This test creates a working tree state with three files:\n'> <'\n'> <'  top (previously committed, modified)\n'> <'  dir/sub (previously committed, modified)\n'> 
                <'  dir/other (untracked)\n'> <'\n'> <'and issues a git add -u with path limiting on "dir" to add\n'> 
                <'only the updates to dir/sub.\n'> <'\n'> <'Also tested are "git add -u" without limiting, and "git add -u"\n'> 
                <'without contents changes, and other conditions'>
              )
            }
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<'./test-lib.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {<setup>}
        {
          (SQ <'\n'> <'\techo initial >check &&\n'> <'\techo initial >top &&\n'> 
            <'\techo initial >foo &&\n'> <'\tmkdir dir1 dir2 &&\n'> <'\techo initial >dir1/sub1 &&\n'> <'\techo initial >dir1/sub2 &&\n'> 
            <'\techo initial >dir2/sub3 &&\n'> <'\tgit add check dir1 dir2 top foo &&\n'> <'\ttest_tick &&\n'> <'\tgit commit -m initial &&\n'> <'\n'> 
            <'\techo changed >check &&\n'> <'\techo changed >top &&\n'> <'\techo changed >dir2/sub3 &&\n'> <'\trm -f dir1/sub1 &&\n'> 
            <'\techo other >dir2/other\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [{<test_expect_success>} {<update>} {(SQ <'\n'> <'\tgit add -u dir1 dir2\n'>)}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'update noticed a removal'>)}
        {(SQ <'\n'> <'\ttest "$(git ls-files dir1/sub1)" = ""\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'update touched correct path'>)}
        {(SQ <'\n'> <'\ttest "$(git diff-files --name-status dir2/sub3)" = ""\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'update did not touch other tracked files'>)}
        {
          (SQ <'\n'> <'\ttest "$(git diff-files --name-status check)" = "M\tcheck" &&\n'> 
            <'\ttest "$(git diff-files --name-status top)" = "M\ttop"\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'update did not touch untracked files'>)}
        {(SQ <'\n'> <'\ttest "$(git ls-files dir2/other)" = ""\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'cache tree has not been corrupted'>)}
        {
          (SQ <'\n'> <'\n'> <'\tgit ls-files -s |\n'> <'\tsed -e "s/ 0\t/\t/" >expect &&\n'> 
            <'\tgit ls-tree -r $(git write-tree) |\n'> <'\tsed -e "s/ blob / /" >current &&\n'> <'\ttest_cmp expect current\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'update from a subdirectory'>)}
        {
          (SQ <'\n'> <'\t(\n'> <'\t\tcd dir1 &&\n'> <'\t\techo more >sub2 &&\n'> 
            <'\t\tgit add -u sub2\n'> <'\t)\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'change gets noticed'>)}
        {(SQ <'\n'> <'\n'> <'\ttest "$(git diff-files --name-status dir1)" = ""\n'> <'\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'non-qualified update in subdir updates from the root'>)}
        {
          (SQ <'\n'> <'\t(\n'> <'\t\tcd dir1 &&\n'> <'\t\techo even more >>sub2 &&\n'> 
            <'\t\tgit --literal-pathspecs add -u &&\n'> <'\t\techo even more >>sub2 &&\n'> <'\t\tgit add -u\n'> <'\t) &&\n'> <'\t: >expect &&\n'> 
            <'\tgit diff-files --name-only >actual &&\n'> <'\ttest_cmp expect actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'replace a file with a symlink'>)}
        {(SQ <'\n'> <'\n'> <'\trm foo &&\n'> <'\ttest_ln_s_add top foo\n'> <'\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'add everything changed'>)}
        {(SQ <'\n'> <'\n'> <'\tgit add -u &&\n'> <'\ttest -z "$(git diff-files)"\n'> <'\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'touch and then add -u'>)}
        {
          (SQ <'\n'> <'\n'> <'\ttouch check &&\n'> <'\tgit add -u &&\n'> 
            <'\ttest -z "$(git diff-files)"\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'touch and then add explicitly'>)}
        {
          (SQ <'\n'> <'\n'> <'\ttouch check &&\n'> <'\tgit add check &&\n'> 
            <'\ttest -z "$(git diff-files)"\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'add -n -u should not add but just report'>)}
        {(SQ <'\n'> <'\n'> <'\t(\n'> <'\t\techo "add '>) 
          (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (SQ <check>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') 
          (SQ <'" &&\n'> <'\t\techo "remove '>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (SQ <top>) 
          (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') 
          (SQ <'"\n'> <'\t) >expect &&\n'> <'\tbefore=$(git ls-files -s check top) &&\n'> 
            <'\techo changed >>check &&\n'> <'\trm -f top &&\n'> <'\tgit add -n -u >actual &&\n'> <'\tafter=$(git ls-files -s check top) &&\n'> 
            <'\n'> <'\ttest "$before" = "$after" &&\n'> <'\ttest_i18ncmp expect actual\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'add -u resolves unmerged paths'>)}
        {
          (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tone=$(echo 1 | git hash-object -w --stdin) &&\n'> 
            <'\ttwo=$(echo 2 | git hash-object -w --stdin) &&\n'> <'\tthree=$(echo 3 | git hash-object -w --stdin) &&\n'> <'\t{\n'> <'\t\tfor path in path1 path2\n'> 
            <'\t\tdo\n'> <'\t\t\techo "100644 $one 1\t$path"\n'> <'\t\t\techo "100644 $two 2\t$path"\n'> 
            <'\t\t\techo "100644 $three 3\t$path"\n'> <'\t\tdone\n'> <'\t\techo "100644 $one 1\tpath3"\n'> <'\t\techo "100644 $one 1\tpath4"\n'> 
            <'\t\techo "100644 $one 3\tpath5"\n'> <'\t\techo "100644 $one 3\tpath6"\n'> <'\t} |\n'> <'\tgit update-index --index-info &&\n'> 
            <'\techo 3 >path1 &&\n'> <'\techo 2 >path3 &&\n'> <'\techo 2 >path5 &&\n'> <'\n'> 
            <'\t# Fail to explicitly resolve removed paths with "git add"\n'> <'\ttest_must_fail git add --no-all path4 &&\n'> <'\ttest_must_fail git add --no-all path6 &&\n'> 
            <'\n'> <'\t# "add -u" should notice removals no matter what stages\n'> <'\t# the index entries are in.\n'> 
            <'\tgit add -u &&\n'> <'\tgit ls-files -s path1 path2 path3 path4 path5 path6 >actual &&\n'> <'\t{\n'> 
            <'\t\techo "100644 $three 0\tpath1"\n'> <'\t\techo "100644 $two 0\tpath3"\n'> <'\t\techo "100644 $two 0\tpath5"\n'> <'\t} >expect &&\n'> 
            <'\ttest_cmp expect actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'"add -u non-existent" should fail'>)}
        {
          (SQ <'\n'> <'\ttest_must_fail git add -u non-existent &&\n'> 
            <'\t! (git ls-files | grep "non-existent")\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_done>
      more_env: []
      words: [{<test_done>}]
      redirects: []
      do_fork: T
    )
  ]
)