(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'basic work tree status reporting' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:20) (Token id: Id.Lit_Chars val: '\tgit config --global advice.statusuoption false &&\n' span_id: 21 ) (Token id:Id.Lit_Chars val:'\ttest_commit A &&\n' span_id:22) (Token id:Id.Lit_Chars val:'\ttest_commit B oneside added &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\tgit checkout A^0 &&\n' span_id:24) (Token id:Id.Lit_Chars val:'\ttest_commit C oneside created\n' span_id:25) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'A/A conflict' span_id:32))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:36) (Token id:Id.Lit_Chars val:'\tgit checkout B^0 &&\n' span_id:37) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge C\n' span_id:38) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Report path with conflict' span_id:45))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:49) (Token id: Id.Lit_Chars val: '\tgit diff --cached --name-status >actual &&\n' span_id: 50 ) (Token id:Id.Lit_Chars val:'\techo "U\toneside" >expect &&\n' span_id:51) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:52) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Report new path with conflict' span_id:59))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:63) (Token id: Id.Lit_Chars val: '\tgit diff --cached --name-status HEAD^ >actual &&\n' span_id: 64 ) (Token id:Id.Lit_Chars val:'\techo "U\toneside" >expect &&\n' span_id:65) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:66) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'M/D conflict does not segfault' span_id:73))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:77) (Token id:Id.Lit_Chars val:'\tcat >expect <<EOF &&\n' span_id:78) (Token id:Id.Lit_Chars val:'On branch side\n' span_id:79) (Token id:Id.Lit_Chars val:'You have unmerged paths.\n' span_id:80) (Token id:Id.Lit_Chars val:' (fix conflicts and run "git commit")\n' span_id:81) (Token id: Id.Lit_Chars val: ' (use "git merge --abort" to abort the merge)\n' span_id: 82 ) (Token id:Id.Lit_Chars val:'\n' span_id:83) (Token id:Id.Lit_Chars val:'Unmerged paths:\n' span_id:84) (Token id: Id.Lit_Chars val: ' (use "git add/rm <file>..." as appropriate to mark resolution)\n' span_id: 85 ) (Token id:Id.Lit_Chars val:'\n' span_id:86) (Token id:Id.Lit_Chars val:'\tdeleted by us: foo\n' span_id:87) (Token id:Id.Lit_Chars val:'\n' span_id:88) (Token id: Id.Lit_Chars val: 'no changes added to commit (use "git add" and/or "git commit -a")\n' span_id: 89 ) (Token id:Id.Lit_Chars val:'EOF\n' span_id:90) (Token id:Id.Lit_Chars val:'\tmkdir mdconflict &&\n' span_id:91) (Token id:Id.Lit_Chars val:'\t(\n' span_id:92) (Token id:Id.Lit_Chars val:'\t\tcd mdconflict &&\n' span_id:93) (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:94) (Token id:Id.Lit_Chars val:'\t\ttest_commit initial foo "" &&\n' span_id:95) (Token id:Id.Lit_Chars val:'\t\ttest_commit modify foo foo &&\n' span_id:96) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b side HEAD^ &&\n' span_id:97) (Token id:Id.Lit_Chars val:'\t\tgit rm foo &&\n' span_id:98) (Token id:Id.Lit_Chars val:'\t\tgit commit -m delete &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git merge master &&\n' span_id:100) (Token id: Id.Lit_Chars val: '\t\ttest_must_fail git commit --dry-run >../actual &&\n' span_id: 101 ) (Token id:Id.Lit_Chars val:'\t\ttest_i18ncmp ../expect ../actual &&\n' span_id:102) (Token id:Id.Lit_Chars val:'\t\tgit status >../actual &&\n' span_id:103) (Token id:Id.Lit_Chars val:'\t\ttest_i18ncmp ../expect ../actual\n' span_id:104) (Token id:Id.Lit_Chars val:'\t)\n' span_id:105) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rename & unmerged setup' span_id:112))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:116) (Token id:Id.Lit_Chars val:'\tgit rm -f -r . &&\n' span_id:117) (Token id:Id.Lit_Chars val:'\tcat "$TEST_DIRECTORY/README" >ONE &&\n' span_id:118) (Token id:Id.Lit_Chars val:'\tgit add ONE &&\n' span_id:119) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:120) (Token id: Id.Lit_Chars val: '\tgit commit -m "One commit with ONE" &&\n' span_id: 121 ) (Token id:Id.Lit_Chars val:'\n' span_id:122) (Token id:Id.Lit_Chars val:'\techo Modified >TWO &&\n' span_id:123) (Token id:Id.Lit_Chars val:'\tcat ONE >>TWO &&\n' span_id:124) (Token id:Id.Lit_Chars val:'\tcat ONE >>THREE &&\n' span_id:125) (Token id:Id.Lit_Chars val:'\tgit add TWO THREE &&\n' span_id:126) (Token id:Id.Lit_Chars val:'\tsha1=$(git rev-parse :ONE) &&\n' span_id:127) (Token id:Id.Lit_Chars val:'\tgit rm --cached ONE &&\n' span_id:128) (Token id:Id.Lit_Chars val:'\t(\n' span_id:129) (Token id:Id.Lit_Chars val:'\t\techo "100644 $sha1 1\tONE" &&\n' span_id:130) (Token id:Id.Lit_Chars val:'\t\techo "100644 $sha1 2\tONE" &&\n' span_id:131) (Token id:Id.Lit_Chars val:'\t\techo "100644 $sha1 3\tONE"\n' span_id:132) (Token id: Id.Lit_Chars val: '\t) | git update-index --index-info &&\n' span_id: 133 ) (Token id:Id.Lit_Chars val:'\techo Further >>THREE\n' span_id:134) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rename & unmerged status' span_id:141))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:145) (Token id:Id.Lit_Chars val:'\tgit status -suno >actual &&\n' span_id:146) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:147) (Token id:Id.Lit_Chars val:'\tUU ONE\n' span_id:148) (Token id:Id.Lit_Chars val:'\tAM THREE\n' span_id:149) (Token id:Id.Lit_Chars val:'\tA TWO\n' span_id:150) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:151) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:152) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'git diff-index --cached shows 2 added + 1 unmerged' span_id: 159 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:163) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:164) (Token id:Id.Lit_Chars val:'\tU\tONE\n' span_id:165) (Token id:Id.Lit_Chars val:'\tA\tTHREE\n' span_id:166) (Token id:Id.Lit_Chars val:'\tA\tTWO\n' span_id:167) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:168) (Token id: Id.Lit_Chars val: '\tgit diff-index --cached --name-status HEAD >actual &&\n' span_id: 169 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:170) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'git diff-index --cached -M shows 2 added + 1 unmerged' span_id: 177 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:181) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:182) (Token id:Id.Lit_Chars val:'\tU\tONE\n' span_id:183) (Token id:Id.Lit_Chars val:'\tA\tTHREE\n' span_id:184) (Token id:Id.Lit_Chars val:'\tA\tTWO\n' span_id:185) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:186) (Token id: Id.Lit_Chars val: '\tgit diff-index --cached -M --name-status HEAD >actual &&\n' span_id: 187 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:188) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'git diff-index --cached -C shows 2 copies + 1 unmerged' span_id: 195 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:199) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:200) (Token id:Id.Lit_Chars val:'\tU\tONE\n' span_id:201) (Token id:Id.Lit_Chars val:'\tC\tONE\tTHREE\n' span_id:202) (Token id:Id.Lit_Chars val:'\tC\tONE\tTWO\n' span_id:203) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:204) (Token id:Id.Lit_Chars val:'\tgit diff-index --cached -C --name-status HEAD |\n' span_id:205) (Token id:Id.Lit_Chars val:'\tsed "s/^C[0-9]*/C/g" >actual &&\n' span_id:206) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:207) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'status when conflicts with add and rm advice (deleted by them)' span_id: 215 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:219) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:220) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:221) (Token id:Id.Lit_Chars val:'\ttest_commit init main.txt init &&\n' span_id:222) (Token id:Id.Lit_Chars val:'\tgit checkout -b second_branch &&\n' span_id:223) (Token id:Id.Lit_Chars val:'\tgit rm main.txt &&\n' span_id:224) (Token id:Id.Lit_Chars val:'\tgit commit -m "main.txt deleted on second_branch" &&\n' span_id:225) (Token id: Id.Lit_Chars val: '\ttest_commit second conflict.txt second &&\n' span_id: 226 ) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:227) (Token id: Id.Lit_Chars val: '\ttest_commit on_second main.txt on_second &&\n' span_id: 228 ) (Token id:Id.Lit_Chars val:'\ttest_commit master conflict.txt master &&\n' span_id:229) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge second_branch &&\n' span_id: 230 ) (Token id:Id.Lit_Chars val:'\tcat >expected <<\\EOF &&\n' span_id:231) (Token id:Id.Lit_Chars val:'On branch master\n' span_id:232) (Token id:Id.Lit_Chars val:'You have unmerged paths.\n' span_id:233) (Token id: Id.Lit_Chars val: ' (fix conflicts and run "git commit")\n' span_id: 234 ) (Token id:Id.Lit_Chars val:' (use "git merge --abort" to abort the merge)\n' span_id:235) (Token id:Id.Lit_Chars val:'\n' span_id:236) (Token id:Id.Lit_Chars val:'Unmerged paths:\n' span_id:237) (Token id: Id.Lit_Chars val: ' (use "git add/rm <file>..." as appropriate to mark resolution)\n' span_id: 238 ) (Token id:Id.Lit_Chars val:'\n' span_id:239) (Token id:Id.Lit_Chars val:'\tboth added: conflict.txt\n' span_id:240) (Token id:Id.Lit_Chars val:'\tdeleted by them: main.txt\n' span_id:241) (Token id:Id.Lit_Chars val:'\n' span_id:242) (Token id: Id.Lit_Chars val: 'no changes added to commit (use "git add" and/or "git commit -a")\n' span_id: 243 ) (Token id:Id.Lit_Chars val:'EOF\n' span_id:244) (Token id: Id.Lit_Chars val: '\tgit status --untracked-files=no >actual &&\n' span_id: 245 ) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expected actual\n' span_id:246) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'prepare for conflicts' span_id:254))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:258) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:259) (Token id:Id.Lit_Chars val:'\tgit checkout -b conflict &&\n' span_id:260) (Token id:Id.Lit_Chars val:'\ttest_commit one main.txt one &&\n' span_id:261) (Token id:Id.Lit_Chars val:'\tgit branch conflict_second &&\n' span_id:262) (Token id:Id.Lit_Chars val:'\tgit mv main.txt sub_master.txt &&\n' span_id:263) (Token id:Id.Lit_Chars val:'\tgit commit -m "main.txt renamed in sub_master.txt" &&\n' span_id:264) (Token id:Id.Lit_Chars val:'\tgit checkout conflict_second &&\n' span_id:265) (Token id:Id.Lit_Chars val:'\tgit mv main.txt sub_second.txt &&\n' span_id:266) (Token id: Id.Lit_Chars val: '\tgit commit -m "main.txt renamed in sub_second.txt"\n' span_id: 267 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'status when conflicts with add and rm advice (both deleted)' span_id: 275 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:279) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge conflict &&\n' span_id: 280 ) (Token id:Id.Lit_Chars val:'\tcat >expected <<\\EOF &&\n' span_id:281) (Token id:Id.Lit_Chars val:'On branch conflict_second\n' span_id:282) (Token id:Id.Lit_Chars val:'You have unmerged paths.\n' span_id:283) (Token id: Id.Lit_Chars val: ' (fix conflicts and run "git commit")\n' span_id: 284 ) (Token id:Id.Lit_Chars val:' (use "git merge --abort" to abort the merge)\n' span_id:285) (Token id:Id.Lit_Chars val:'\n' span_id:286) (Token id:Id.Lit_Chars val:'Unmerged paths:\n' span_id:287) (Token id: Id.Lit_Chars val: ' (use "git add/rm <file>..." as appropriate to mark resolution)\n' span_id: 288 ) (Token id:Id.Lit_Chars val:'\n' span_id:289) (Token id:Id.Lit_Chars val:'\tboth deleted: main.txt\n' span_id:290) (Token id:Id.Lit_Chars val:'\tadded by them: sub_master.txt\n' span_id:291) (Token id:Id.Lit_Chars val:'\tadded by us: sub_second.txt\n' span_id:292) (Token id:Id.Lit_Chars val:'\n' span_id:293) (Token id: Id.Lit_Chars val: 'no changes added to commit (use "git add" and/or "git commit -a")\n' span_id: 294 ) (Token id:Id.Lit_Chars val:'EOF\n' span_id:295) (Token id: Id.Lit_Chars val: '\tgit status --untracked-files=no >actual &&\n' span_id: 296 ) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expected actual\n' span_id:297) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'status when conflicts with only rm advice (both deleted)' span_id: 305 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:309) (Token id:Id.Lit_Chars val:'\tgit reset --hard conflict_second &&\n' span_id:310) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge conflict &&\n' span_id:311) (Token id:Id.Lit_Chars val:'\tgit add sub_master.txt &&\n' span_id:312) (Token id:Id.Lit_Chars val:'\tgit add sub_second.txt &&\n' span_id:313) (Token id:Id.Lit_Chars val:'\tcat >expected <<\\EOF &&\n' span_id:314) (Token id:Id.Lit_Chars val:'On branch conflict_second\n' span_id:315) (Token id:Id.Lit_Chars val:'You have unmerged paths.\n' span_id:316) (Token id:Id.Lit_Chars val:' (fix conflicts and run "git commit")\n' span_id:317) (Token id: Id.Lit_Chars val: ' (use "git merge --abort" to abort the merge)\n' span_id: 318 ) (Token id:Id.Lit_Chars val:'\n' span_id:319) (Token id:Id.Lit_Chars val:'Changes to be committed:\n' span_id:320) (Token id:Id.Lit_Chars val:'\n' span_id:321) (Token id:Id.Lit_Chars val:'\tnew file: sub_master.txt\n' span_id:322) (Token id:Id.Lit_Chars val:'\n' span_id:323) (Token id:Id.Lit_Chars val:'Unmerged paths:\n' span_id:324) (Token id:Id.Lit_Chars val:' (use "git rm <file>..." to mark resolution)\n' span_id:325) (Token id:Id.Lit_Chars val:'\n' span_id:326) (Token id:Id.Lit_Chars val:'\tboth deleted: main.txt\n' span_id:327) (Token id:Id.Lit_Chars val:'\n' span_id:328) (Token id: Id.Lit_Chars val: 'Untracked files not listed (use -u option to show untracked files)\n' span_id: 329 ) (Token id:Id.Lit_Chars val:'EOF\n' span_id:330) (Token id: Id.Lit_Chars val: '\tgit status --untracked-files=no >actual &&\n' span_id: 331 ) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expected actual &&\n' span_id:332) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:333) (Token id:Id.Lit_Chars val:'\tgit checkout master\n' span_id:334) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'status --branch with detached HEAD' span_id:341))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:345) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:346) (Token id:Id.Lit_Chars val:'\tgit checkout master^0 &&\n' span_id:347) (Token id: Id.Lit_Chars val: '\tgit status --branch --porcelain >actual &&\n' span_id: 348 ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:349) (Token id:Id.Lit_Chars val:'\t## HEAD (no branch)\n' span_id:350) (Token id:Id.Lit_Chars val:'\t?? .gitconfig\n' span_id:351) (Token id:Id.Lit_Chars val:'\t?? actual\n' span_id:352) (Token id:Id.Lit_Chars val:'\t?? expect\n' span_id:353) (Token id:Id.Lit_Chars val:'\t?? expected\n' span_id:354) (Token id:Id.Lit_Chars val:'\t?? mdconflict/\n' span_id:355) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:356) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expected actual\n' span_id:357) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'status --porcelain=v1 --branch with detached HEAD' span_id: 367 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:371) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:372) (Token id:Id.Lit_Chars val:'\tgit checkout master^0 &&\n' span_id:373) (Token id: Id.Lit_Chars val: '\tgit status --branch --porcelain=v1 >actual &&\n' span_id: 374 ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:375) (Token id:Id.Lit_Chars val:'\t## HEAD (no branch)\n' span_id:376) (Token id:Id.Lit_Chars val:'\t?? .gitconfig\n' span_id:377) (Token id:Id.Lit_Chars val:'\t?? actual\n' span_id:378) (Token id:Id.Lit_Chars val:'\t?? expect\n' span_id:379) (Token id:Id.Lit_Chars val:'\t?? expected\n' span_id:380) (Token id:Id.Lit_Chars val:'\t?? mdconflict/\n' span_id:381) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:382) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expected actual\n' span_id:383) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'status --porcelain=bogus' span_id:393))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:397) (Token id: Id.Lit_Chars val: '\ttest_must_fail git status --porcelain=bogus\n' span_id: 398 ) ) } ) (C {(test_done)}) ] )