(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'basic work tree status reporting'>)}
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (C {<test_expect_success>} {<setup>} 
      {
        (SQ <'\n'> <'\tgit config --global advice.statusuoption false &&\n'> <'\ttest_commit A &&\n'> 
          <'\ttest_commit B oneside added &&\n'> <'\tgit checkout A^0 &&\n'> <'\ttest_commit C oneside created\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'A/A conflict'>)} 
      {(SQ <'\n'> <'\tgit checkout B^0 &&\n'> <'\ttest_must_fail git merge C\n'>)}
    )
    (C {<test_expect_success>} {(SQ <'Report path with conflict'>)} 
      {
        (SQ <'\n'> <'\tgit diff --cached --name-status >actual &&\n'> 
          <'\techo "U\toneside" >expect &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'Report new path with conflict'>)} 
      {
        (SQ <'\n'> <'\tgit diff --cached --name-status HEAD^ >actual &&\n'> 
          <'\techo "U\toneside" >expect &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'M/D conflict does not segfault'>)} 
      {
        (SQ <'\n'> <'\tcat >expect <<EOF &&\n'> <'On branch side\n'> <'You have unmerged paths.\n'> 
          <'  (fix conflicts and run "git commit")\n'> <'  (use "git merge --abort" to abort the merge)\n'> <'\n'> <'Unmerged paths:\n'> 
          <'  (use "git add/rm <file>..." as appropriate to mark resolution)\n'> <'\n'> <'\tdeleted by us:   foo\n'> <'\n'> 
          <'no changes added to commit (use "git add" and/or "git commit -a")\n'> <'EOF\n'> <'\tmkdir mdconflict &&\n'> <'\t(\n'> <'\t\tcd mdconflict &&\n'> <'\t\tgit init &&\n'> 
          <'\t\ttest_commit initial foo "" &&\n'> <'\t\ttest_commit modify foo foo &&\n'> <'\t\tgit checkout -b side HEAD^ &&\n'> <'\t\tgit rm foo &&\n'> 
          <'\t\tgit commit -m delete &&\n'> <'\t\ttest_must_fail git merge master &&\n'> 
          <'\t\ttest_must_fail git commit --dry-run >../actual &&\n'> <'\t\ttest_i18ncmp ../expect ../actual &&\n'> <'\t\tgit status >../actual &&\n'> 
          <'\t\ttest_i18ncmp ../expect ../actual\n'> <'\t)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'rename & unmerged setup'>)} 
      {
        (SQ <'\n'> <'\tgit rm -f -r . &&\n'> <'\tcat "$TEST_DIRECTORY/README" >ONE &&\n'> 
          <'\tgit add ONE &&\n'> <'\ttest_tick &&\n'> <'\tgit commit -m "One commit with ONE" &&\n'> <'\n'> <'\techo Modified >TWO &&\n'> 
          <'\tcat ONE >>TWO &&\n'> <'\tcat ONE >>THREE &&\n'> <'\tgit add TWO THREE &&\n'> <'\tsha1=$(git rev-parse :ONE) &&\n'> 
          <'\tgit rm --cached ONE &&\n'> <'\t(\n'> <'\t\techo "100644 $sha1 1\tONE" &&\n'> <'\t\techo "100644 $sha1 2\tONE" &&\n'> 
          <'\t\techo "100644 $sha1 3\tONE"\n'> <'\t) | git update-index --index-info &&\n'> <'\techo Further >>THREE\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'rename & unmerged status'>)} 
      {
        (SQ <'\n'> <'\tgit status -suno >actual &&\n'> <'\tcat >expect <<-EOF &&\n'> <'\tUU ONE\n'> 
          <'\tAM THREE\n'> <'\tA  TWO\n'> <'\tEOF\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'git diff-index --cached shows 2 added + 1 unmerged'>)} 
      {
        (SQ <'\n'> <'\tcat >expected <<-EOF &&\n'> <'\tU\tONE\n'> <'\tA\tTHREE\n'> <'\tA\tTWO\n'> 
          <'\tEOF\n'> <'\tgit diff-index --cached --name-status HEAD >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'git diff-index --cached -M shows 2 added + 1 unmerged'>)} 
      {
        (SQ <'\n'> <'\tcat >expected <<-EOF &&\n'> <'\tU\tONE\n'> <'\tA\tTHREE\n'> <'\tA\tTWO\n'> 
          <'\tEOF\n'> <'\tgit diff-index --cached -M --name-status HEAD >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'git diff-index --cached -C shows 2 copies + 1 unmerged'>)} 
      {
        (SQ <'\n'> <'\tcat >expected <<-EOF &&\n'> <'\tU\tONE\n'> <'\tC\tONE\tTHREE\n'> 
          <'\tC\tONE\tTWO\n'> <'\tEOF\n'> <'\tgit diff-index --cached -C --name-status HEAD |\n'> 
          <'\tsed "s/^C[0-9]*/C/g" >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'status when conflicts with add and rm advice (deleted by them)'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout master &&\n'> 
          <'\ttest_commit init main.txt init &&\n'> <'\tgit checkout -b second_branch &&\n'> <'\tgit rm main.txt &&\n'> 
          <'\tgit commit -m "main.txt deleted on second_branch" &&\n'> <'\ttest_commit second conflict.txt second &&\n'> <'\tgit checkout master &&\n'> 
          <'\ttest_commit on_second main.txt on_second &&\n'> <'\ttest_commit master conflict.txt master &&\n'> <'\ttest_must_fail git merge second_branch &&\n'> 
          <'\tcat >expected <<\\EOF &&\n'> <'On branch master\n'> <'You have unmerged paths.\n'> <'  (fix conflicts and run "git commit")\n'> 
          <'  (use "git merge --abort" to abort the merge)\n'> <'\n'> <'Unmerged paths:\n'> <'  (use "git add/rm <file>..." as appropriate to mark resolution)\n'> 
          <'\n'> <'\tboth added:      conflict.txt\n'> <'\tdeleted by them: main.txt\n'> <'\n'> 
          <'no changes added to commit (use "git add" and/or "git commit -a")\n'> <'EOF\n'> <'\tgit status --untracked-files=no >actual &&\n'> <'\ttest_i18ncmp expected actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prepare for conflicts'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout -b conflict &&\n'> 
          <'\ttest_commit one main.txt one &&\n'> <'\tgit branch conflict_second &&\n'> <'\tgit mv main.txt sub_master.txt &&\n'> 
          <'\tgit commit -m "main.txt renamed in sub_master.txt" &&\n'> <'\tgit checkout conflict_second &&\n'> <'\tgit mv main.txt sub_second.txt &&\n'> 
          <'\tgit commit -m "main.txt renamed in sub_second.txt"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'status when conflicts with add and rm advice (both deleted)'>)} 
      {
        (SQ <'\n'> <'\ttest_must_fail git merge conflict &&\n'> <'\tcat >expected <<\\EOF &&\n'> 
          <'On branch conflict_second\n'> <'You have unmerged paths.\n'> <'  (fix conflicts and run "git commit")\n'> 
          <'  (use "git merge --abort" to abort the merge)\n'> <'\n'> <'Unmerged paths:\n'> <'  (use "git add/rm <file>..." as appropriate to mark resolution)\n'> 
          <'\n'> <'\tboth deleted:    main.txt\n'> <'\tadded by them:   sub_master.txt\n'> 
          <'\tadded by us:     sub_second.txt\n'> <'\n'> <'no changes added to commit (use "git add" and/or "git commit -a")\n'> <'EOF\n'> 
          <'\tgit status --untracked-files=no >actual &&\n'> <'\ttest_i18ncmp expected actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'status when conflicts with only rm advice (both deleted)'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard conflict_second &&\n'> 
          <'\ttest_must_fail git merge conflict &&\n'> <'\tgit add sub_master.txt &&\n'> <'\tgit add sub_second.txt &&\n'> <'\tcat >expected <<\\EOF &&\n'> 
          <'On branch conflict_second\n'> <'You have unmerged paths.\n'> <'  (fix conflicts and run "git commit")\n'> 
          <'  (use "git merge --abort" to abort the merge)\n'> <'\n'> <'Changes to be committed:\n'> <'\n'> <'\tnew file:   sub_master.txt\n'> <'\n'> 
          <'Unmerged paths:\n'> <'  (use "git rm <file>..." to mark resolution)\n'> <'\n'> <'\tboth deleted:    main.txt\n'> <'\n'> 
          <'Untracked files not listed (use -u option to show untracked files)\n'> <'EOF\n'> <'\tgit status --untracked-files=no >actual &&\n'> <'\ttest_i18ncmp expected actual &&\n'> 
          <'\tgit reset --hard &&\n'> <'\tgit checkout master\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'status --branch with detached HEAD'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout master^0 &&\n'> 
          <'\tgit status --branch --porcelain >actual &&\n'> <'\tcat >expected <<-EOF &&\n'> <'\t## HEAD (no branch)\n'> <'\t?? .gitconfig\n'> <'\t?? actual\n'> 
          <'\t?? expect\n'> <'\t?? expected\n'> <'\t?? mdconflict/\n'> <'\tEOF\n'> <'\ttest_i18ncmp expected actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'status --porcelain=v1 --branch with detached HEAD'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout master^0 &&\n'> 
          <'\tgit status --branch --porcelain=v1 >actual &&\n'> <'\tcat >expected <<-EOF &&\n'> <'\t## HEAD (no branch)\n'> <'\t?? .gitconfig\n'> <'\t?? actual\n'> 
          <'\t?? expect\n'> <'\t?? expected\n'> <'\t?? mdconflict/\n'> <'\tEOF\n'> <'\ttest_i18ncmp expected actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'status --porcelain=bogus'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git status --porcelain=bogus\n'>)}
    )
    (C {<test_done>})
  ]
)