(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"basic work tree status reporting">)}
          spids: [4]
        )
      ]
      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)})
  ]
)