(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:'git status --porcelain=v2\n' span_id:6) (Token id:Id.Lit_Chars val:'\n' span_id:7) (Token id:Id.Lit_Chars val:'This test exercises porcelain V2 output for git status.' span_id:8) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:24) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:25) (Token id:Id.Lit_Chars val:'\tgit config core.autocrlf false &&\n' span_id:26) (Token id:Id.Lit_Chars val:'\techo x >file_x &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\techo y >file_y &&\n' span_id:28) (Token id:Id.Lit_Chars val:'\techo z >file_z &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\tmkdir dir1 &&\n' span_id:30) (Token id:Id.Lit_Chars val:'\techo a >dir1/file_a &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\techo b >dir1/file_b\n' span_id:32) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'before initial commit, nothing added, only untracked' span_id: 39 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:43) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:44) (Token id:Id.Lit_Chars val:'\t# branch.oid (initial)\n' span_id:45) (Token id:Id.Lit_Chars val:'\t# branch.head master\n' span_id:46) (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:47) (Token id:Id.Lit_Chars val:'\t? dir1/\n' span_id:48) (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:49) (Token id:Id.Lit_Chars val:'\t? file_x\n' span_id:50) (Token id:Id.Lit_Chars val:'\t? file_y\n' span_id:51) (Token id:Id.Lit_Chars val:'\t? file_z\n' span_id:52) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:53) (Token id:Id.Lit_Chars val:'\n' span_id:54) (Token id: Id.Lit_Chars val: '\tgit status --porcelain=v2 --branch --untracked-files=normal >actual &&\n' span_id: 55 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:56) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'before initial commit, things added' span_id:63))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:67) (Token id:Id.Lit_Chars val:'\tgit add file_x file_y file_z dir1 &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\tOID_A=$(git hash-object -t blob -- dir1/file_a) &&\n' span_id:69) (Token id: Id.Lit_Chars val: '\tOID_B=$(git hash-object -t blob -- dir1/file_b) &&\n' span_id: 70 ) (Token id:Id.Lit_Chars val:'\tOID_X=$(git hash-object -t blob -- file_x) &&\n' span_id:71) (Token id: Id.Lit_Chars val: '\tOID_Y=$(git hash-object -t blob -- file_y) &&\n' span_id: 72 ) (Token id:Id.Lit_Chars val:'\tOID_Z=$(git hash-object -t blob -- file_z) &&\n' span_id:73) (Token id:Id.Lit_Chars val:'\n' span_id:74) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:75) (Token id:Id.Lit_Chars val:'\t# branch.oid (initial)\n' span_id:76) (Token id:Id.Lit_Chars val:'\t# branch.head master\n' span_id:77) (Token id: Id.Lit_Chars val: '\t1 A. N... 000000 100644 100644 $_z40 $OID_A dir1/file_a\n' span_id: 78 ) (Token id:Id.Lit_Chars val:'\t1 A. N... 000000 100644 100644 $_z40 $OID_B dir1/file_b\n' span_id:79) (Token id: Id.Lit_Chars val: '\t1 A. N... 000000 100644 100644 $_z40 $OID_X file_x\n' span_id: 80 ) (Token id:Id.Lit_Chars val:'\t1 A. N... 000000 100644 100644 $_z40 $OID_Y file_y\n' span_id:81) (Token id: Id.Lit_Chars val: '\t1 A. N... 000000 100644 100644 $_z40 $OID_Z file_z\n' span_id: 82 ) (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:83) (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:84) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:85) (Token id:Id.Lit_Chars val:'\n' span_id:86) (Token id: Id.Lit_Chars val: '\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n' span_id: 87 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:88) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'before initial commit, things added (-z)' span_id:95))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:99) (Token id:Id.Lit_Chars val:'\tlf_to_nul >expect <<-EOF &&\n' span_id:100) (Token id:Id.Lit_Chars val:'\t# branch.oid (initial)\n' span_id:101) (Token id:Id.Lit_Chars val:'\t# branch.head master\n' span_id:102) (Token id:Id.Lit_Chars val:'\t1 A. N... 000000 100644 100644 $_z40 $OID_A dir1/file_a\n' span_id:103) (Token id: Id.Lit_Chars val: '\t1 A. N... 000000 100644 100644 $_z40 $OID_B dir1/file_b\n' span_id: 104 ) (Token id:Id.Lit_Chars val:'\t1 A. N... 000000 100644 100644 $_z40 $OID_X file_x\n' span_id:105) (Token id: Id.Lit_Chars val: '\t1 A. N... 000000 100644 100644 $_z40 $OID_Y file_y\n' span_id: 106 ) (Token id:Id.Lit_Chars val:'\t1 A. N... 000000 100644 100644 $_z40 $OID_Z file_z\n' span_id:107) (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:108) (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:109) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:110) (Token id:Id.Lit_Chars val:'\n' span_id:111) (Token id: Id.Lit_Chars val: '\tgit status -z --porcelain=v2 --branch --untracked-files=all >actual &&\n' span_id: 112 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:113) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'make first commit, comfirm HEAD oid and branch' span_id:120))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:124) (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:125) (Token id:Id.Lit_Chars val:'\tH0=$(git rev-parse HEAD) &&\n' span_id:126) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:127) (Token id:Id.Lit_Chars val:'\t# branch.oid $H0\n' span_id:128) (Token id:Id.Lit_Chars val:'\t# branch.head master\n' span_id:129) (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:130) (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:131) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:132) (Token id:Id.Lit_Chars val:'\n' span_id:133) (Token id: Id.Lit_Chars val: '\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n' span_id: 134 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:135) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'after first commit, create unstaged changes' span_id:142))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:146) (Token id:Id.Lit_Chars val:'\techo x >>file_x &&\n' span_id:147) (Token id:Id.Lit_Chars val:'\tOID_X1=$(git hash-object -t blob -- file_x) &&\n' span_id:148) (Token id:Id.Lit_Chars val:'\trm file_z &&\n' span_id:149) (Token id:Id.Lit_Chars val:'\tH0=$(git rev-parse HEAD) &&\n' span_id:150) (Token id:Id.Lit_Chars val:'\n' span_id:151) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:152) (Token id:Id.Lit_Chars val:'\t# branch.oid $H0\n' span_id:153) (Token id:Id.Lit_Chars val:'\t# branch.head master\n' span_id:154) (Token id: Id.Lit_Chars val: '\t1 .M N... 100644 100644 100644 $OID_X $OID_X file_x\n' span_id: 155 ) (Token id:Id.Lit_Chars val:'\t1 .D N... 100644 100644 000000 $OID_Z $OID_Z file_z\n' span_id:156) (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:157) (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:158) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:159) (Token id:Id.Lit_Chars val:'\n' span_id:160) (Token id: Id.Lit_Chars val: '\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n' span_id: 161 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:162) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'after first commit but omit untracked files and branch' span_id: 169 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:173) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:174) (Token id:Id.Lit_Chars val:'\t1 .M N... 100644 100644 100644 $OID_X $OID_X file_x\n' span_id:175) (Token id: Id.Lit_Chars val: '\t1 .D N... 100644 100644 000000 $OID_Z $OID_Z file_z\n' span_id: 176 ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:177) (Token id:Id.Lit_Chars val:'\n' span_id:178) (Token id: Id.Lit_Chars val: '\tgit status --porcelain=v2 --untracked-files=no >actual &&\n' span_id: 179 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:180) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'after first commit, stage existing changes' span_id:187))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:191) (Token id:Id.Lit_Chars val:'\tgit add file_x &&\n' span_id:192) (Token id:Id.Lit_Chars val:'\tgit rm file_z &&\n' span_id:193) (Token id:Id.Lit_Chars val:'\tH0=$(git rev-parse HEAD) &&\n' span_id:194) (Token id:Id.Lit_Chars val:'\n' span_id:195) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:196) (Token id:Id.Lit_Chars val:'\t# branch.oid $H0\n' span_id:197) (Token id:Id.Lit_Chars val:'\t# branch.head master\n' span_id:198) (Token id:Id.Lit_Chars val:'\t1 M. N... 100644 100644 100644 $OID_X $OID_X1 file_x\n' span_id:199) (Token id: Id.Lit_Chars val: '\t1 D. N... 100644 000000 000000 $OID_Z $_z40 file_z\n' span_id: 200 ) (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:201) (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:202) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:203) (Token id:Id.Lit_Chars val:'\n' span_id:204) (Token id: Id.Lit_Chars val: '\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n' span_id: 205 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:206) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rename causes 2 path lines' span_id:213))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:217) (Token id:Id.Lit_Chars val:'\tgit mv file_y renamed_y &&\n' span_id:218) (Token id:Id.Lit_Chars val:'\tH0=$(git rev-parse HEAD) &&\n' span_id:219) (Token id:Id.Lit_Chars val:'\n' span_id:220) (Token id:Id.Lit_Chars val:'\tq_to_tab >expect <<-EOF &&\n' span_id:221) (Token id:Id.Lit_Chars val:'\t# branch.oid $H0\n' span_id:222) (Token id:Id.Lit_Chars val:'\t# branch.head master\n' span_id:223) (Token id: Id.Lit_Chars val: '\t1 M. N... 100644 100644 100644 $OID_X $OID_X1 file_x\n' span_id: 224 ) (Token id:Id.Lit_Chars val:'\t1 D. N... 100644 000000 000000 $OID_Z $_z40 file_z\n' span_id:225) (Token id: Id.Lit_Chars val: '\t2 R. N... 100644 100644 100644 $OID_Y $OID_Y R100 renamed_yQfile_y\n' span_id: 226 ) (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:227) (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:228) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:229) (Token id:Id.Lit_Chars val:'\n' span_id:230) (Token id: Id.Lit_Chars val: '\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n' span_id: 231 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:232) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rename causes 2 path lines (-z)' span_id:239))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:243) (Token id:Id.Lit_Chars val:'\tH0=$(git rev-parse HEAD) &&\n' span_id:244) (Token id:Id.Lit_Chars val:'\n' span_id:245) (Token id: Id.Lit_Chars val: '\t## Lines use NUL path separator and line terminator, so double transform here.\n' span_id: 246 ) (Token id:Id.Lit_Chars val:'\tq_to_nul <<-EOF | lf_to_nul >expect &&\n' span_id:247) (Token id:Id.Lit_Chars val:'\t# branch.oid $H0\n' span_id:248) (Token id:Id.Lit_Chars val:'\t# branch.head master\n' span_id:249) (Token id: Id.Lit_Chars val: '\t1 M. N... 100644 100644 100644 $OID_X $OID_X1 file_x\n' span_id: 250 ) (Token id:Id.Lit_Chars val:'\t1 D. N... 100644 000000 000000 $OID_Z $_z40 file_z\n' span_id:251) (Token id: Id.Lit_Chars val: '\t2 R. N... 100644 100644 100644 $OID_Y $OID_Y R100 renamed_yQfile_y\n' span_id: 252 ) (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:253) (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:254) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:255) (Token id:Id.Lit_Chars val:'\n' span_id:256) (Token id: Id.Lit_Chars val: '\tgit status --porcelain=v2 --branch --untracked-files=all -z >actual &&\n' span_id: 257 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:258) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'make second commit, confirm clean and new HEAD oid' span_id: 265 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:269) (Token id:Id.Lit_Chars val:'\tgit commit -m second &&\n' span_id:270) (Token id:Id.Lit_Chars val:'\tH1=$(git rev-parse HEAD) &&\n' span_id:271) (Token id:Id.Lit_Chars val:'\n' span_id:272) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:273) (Token id:Id.Lit_Chars val:'\t# branch.oid $H1\n' span_id:274) (Token id:Id.Lit_Chars val:'\t# branch.head master\n' span_id:275) (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:276) (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:277) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:278) (Token id:Id.Lit_Chars val:'\n' span_id:279) (Token id: Id.Lit_Chars val: '\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n' span_id: 280 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:281) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'confirm ignored files are not printed' span_id:288))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:292) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -f x.ign .gitignore" &&\n' span_id: 293 ) (Token id:Id.Lit_Chars val:'\techo x.ign >.gitignore &&\n' span_id:294) (Token id:Id.Lit_Chars val:'\techo "ignore me" >x.ign &&\n' span_id:295) (Token id:Id.Lit_Chars val:'\n' span_id:296) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:297) (Token id:Id.Lit_Chars val:'\t? .gitignore\n' span_id:298) (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:299) (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:300) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:301) (Token id:Id.Lit_Chars val:'\n' span_id:302) (Token id: Id.Lit_Chars val: '\tgit status --porcelain=v2 --untracked-files=all >actual &&\n' span_id: 303 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:304) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'ignored files are printed with --ignored' span_id:311))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:315) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -f x.ign .gitignore" &&\n' span_id: 316 ) (Token id:Id.Lit_Chars val:'\techo x.ign >.gitignore &&\n' span_id:317) (Token id:Id.Lit_Chars val:'\techo "ignore me" >x.ign &&\n' span_id:318) (Token id:Id.Lit_Chars val:'\n' span_id:319) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:320) (Token id:Id.Lit_Chars val:'\t? .gitignore\n' span_id:321) (Token id:Id.Lit_Chars val:'\t? actual\n' span_id:322) (Token id:Id.Lit_Chars val:'\t? expect\n' span_id:323) (Token id:Id.Lit_Chars val:'\t! x.ign\n' span_id:324) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:325) (Token id:Id.Lit_Chars val:'\n' span_id:326) (Token id: Id.Lit_Chars val: '\tgit status --porcelain=v2 --ignored --untracked-files=all >actual &&\n' span_id: 327 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:328) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'create and commit permanent ignore file' span_id:335))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:339) (Token id:Id.Lit_Chars val:'\tcat >.gitignore <<-EOF &&\n' span_id:340) (Token id:Id.Lit_Chars val:'\tactual*\n' span_id:341) (Token id:Id.Lit_Chars val:'\texpect*\n' span_id:342) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:343) (Token id:Id.Lit_Chars val:'\n' span_id:344) (Token id:Id.Lit_Chars val:'\tgit add .gitignore &&\n' span_id:345) (Token id:Id.Lit_Chars val:'\tgit commit -m ignore_trash &&\n' span_id:346) (Token id:Id.Lit_Chars val:'\tH1=$(git rev-parse HEAD) &&\n' span_id:347) (Token id:Id.Lit_Chars val:'\n' span_id:348) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:349) (Token id:Id.Lit_Chars val:'\t# branch.oid $H1\n' span_id:350) (Token id:Id.Lit_Chars val:'\t# branch.head master\n' span_id:351) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:352) (Token id:Id.Lit_Chars val:'\n' span_id:353) (Token id: Id.Lit_Chars val: '\tgit status --porcelain=v2 --branch >actual &&\n' span_id: 354 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:355) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'verify --intent-to-add output' span_id:362))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:366) (Token id: Id.Lit_Chars val: '\ttest_when_finished "git rm -f intent1.add intent2.add" &&\n' span_id: 367 ) (Token id:Id.Lit_Chars val:'\ttouch intent1.add &&\n' span_id:368) (Token id:Id.Lit_Chars val:'\techo test >intent2.add &&\n' span_id:369) (Token id:Id.Lit_Chars val:'\n' span_id:370) (Token id: Id.Lit_Chars val: '\tgit add --intent-to-add intent1.add intent2.add &&\n' span_id: 371 ) (Token id:Id.Lit_Chars val:'\n' span_id:372) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:373) (Token id:Id.Lit_Chars val:'\t1 .A N... 000000 000000 100644 $_z40 $_z40 intent1.add\n' span_id:374) (Token id: Id.Lit_Chars val: '\t1 .A N... 000000 000000 100644 $_z40 $_z40 intent2.add\n' span_id: 375 ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:376) (Token id:Id.Lit_Chars val:'\n' span_id:377) (Token id: Id.Lit_Chars val: '\tgit status --porcelain=v2 >actual &&\n' span_id: 378 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:379) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'verify AA (add-add) conflict' span_id:386))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:390) (Token id: Id.Lit_Chars val: '\ttest_when_finished "git reset --hard" &&\n' span_id: 391 ) (Token id:Id.Lit_Chars val:'\n' span_id:392) (Token id:Id.Lit_Chars val:'\tgit branch AA_A master &&\n' span_id:393) (Token id:Id.Lit_Chars val:'\tgit checkout AA_A &&\n' span_id:394) (Token id:Id.Lit_Chars val:'\techo "Branch AA_A" >conflict.txt &&\n' span_id:395) (Token id:Id.Lit_Chars val:'\tOID_AA_A=$(git hash-object -t blob -- conflict.txt) &&\n' span_id:396) (Token id:Id.Lit_Chars val:'\tgit add conflict.txt &&\n' span_id:397) (Token id:Id.Lit_Chars val:'\tgit commit -m "branch aa_a" &&\n' span_id:398) (Token id:Id.Lit_Chars val:'\n' span_id:399) (Token id:Id.Lit_Chars val:'\tgit branch AA_B master &&\n' span_id:400) (Token id:Id.Lit_Chars val:'\tgit checkout AA_B &&\n' span_id:401) (Token id:Id.Lit_Chars val:'\techo "Branch AA_B" >conflict.txt &&\n' span_id:402) (Token id: Id.Lit_Chars val: '\tOID_AA_B=$(git hash-object -t blob -- conflict.txt) &&\n' span_id: 403 ) (Token id:Id.Lit_Chars val:'\tgit add conflict.txt &&\n' span_id:404) (Token id:Id.Lit_Chars val:'\tgit commit -m "branch aa_b" &&\n' span_id:405) (Token id:Id.Lit_Chars val:'\n' span_id:406) (Token id:Id.Lit_Chars val:'\tgit branch AA_M AA_B &&\n' span_id:407) (Token id:Id.Lit_Chars val:'\tgit checkout AA_M &&\n' span_id:408) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge AA_A &&\n' span_id:409) (Token id:Id.Lit_Chars val:'\n' span_id:410) (Token id:Id.Lit_Chars val:'\tHM=$(git rev-parse HEAD) &&\n' span_id:411) (Token id:Id.Lit_Chars val:'\n' span_id:412) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:413) (Token id:Id.Lit_Chars val:'\t# branch.oid $HM\n' span_id:414) (Token id:Id.Lit_Chars val:'\t# branch.head AA_M\n' span_id:415) (Token id: Id.Lit_Chars val: '\tu AA N... 000000 100644 100644 100644 $_z40 $OID_AA_B $OID_AA_A conflict.txt\n' span_id: 416 ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:417) (Token id:Id.Lit_Chars val:'\n' span_id:418) (Token id: Id.Lit_Chars val: '\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n' span_id: 419 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:420) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'verify UU (edit-edit) conflict' span_id:427))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:431) (Token id: Id.Lit_Chars val: '\ttest_when_finished "git reset --hard" &&\n' span_id: 432 ) (Token id:Id.Lit_Chars val:'\n' span_id:433) (Token id:Id.Lit_Chars val:'\tgit branch UU_ANC master &&\n' span_id:434) (Token id:Id.Lit_Chars val:'\tgit checkout UU_ANC &&\n' span_id:435) (Token id:Id.Lit_Chars val:'\techo "Ancestor" >conflict.txt &&\n' span_id:436) (Token id: Id.Lit_Chars val: '\tOID_UU_ANC=$(git hash-object -t blob -- conflict.txt) &&\n' span_id: 437 ) (Token id:Id.Lit_Chars val:'\tgit add conflict.txt &&\n' span_id:438) (Token id:Id.Lit_Chars val:'\tgit commit -m "UU_ANC" &&\n' span_id:439) (Token id:Id.Lit_Chars val:'\n' span_id:440) (Token id:Id.Lit_Chars val:'\tgit branch UU_A UU_ANC &&\n' span_id:441) (Token id:Id.Lit_Chars val:'\tgit checkout UU_A &&\n' span_id:442) (Token id:Id.Lit_Chars val:'\techo "Branch UU_A" >conflict.txt &&\n' span_id:443) (Token id:Id.Lit_Chars val:'\tOID_UU_A=$(git hash-object -t blob -- conflict.txt) &&\n' span_id:444) (Token id:Id.Lit_Chars val:'\tgit add conflict.txt &&\n' span_id:445) (Token id:Id.Lit_Chars val:'\tgit commit -m "branch uu_a" &&\n' span_id:446) (Token id:Id.Lit_Chars val:'\n' span_id:447) (Token id:Id.Lit_Chars val:'\tgit branch UU_B UU_ANC &&\n' span_id:448) (Token id:Id.Lit_Chars val:'\tgit checkout UU_B &&\n' span_id:449) (Token id:Id.Lit_Chars val:'\techo "Branch UU_B" >conflict.txt &&\n' span_id:450) (Token id: Id.Lit_Chars val: '\tOID_UU_B=$(git hash-object -t blob -- conflict.txt) &&\n' span_id: 451 ) (Token id:Id.Lit_Chars val:'\tgit add conflict.txt &&\n' span_id:452) (Token id:Id.Lit_Chars val:'\tgit commit -m "branch uu_b" &&\n' span_id:453) (Token id:Id.Lit_Chars val:'\n' span_id:454) (Token id:Id.Lit_Chars val:'\tgit branch UU_M UU_B &&\n' span_id:455) (Token id:Id.Lit_Chars val:'\tgit checkout UU_M &&\n' span_id:456) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge UU_A &&\n' span_id:457) (Token id:Id.Lit_Chars val:'\n' span_id:458) (Token id:Id.Lit_Chars val:'\tHM=$(git rev-parse HEAD) &&\n' span_id:459) (Token id:Id.Lit_Chars val:'\n' span_id:460) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:461) (Token id:Id.Lit_Chars val:'\t# branch.oid $HM\n' span_id:462) (Token id:Id.Lit_Chars val:'\t# branch.head UU_M\n' span_id:463) (Token id: Id.Lit_Chars val: '\tu UU N... 100644 100644 100644 100644 $OID_UU_ANC $OID_UU_B $OID_UU_A conflict.txt\n' span_id: 464 ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:465) (Token id:Id.Lit_Chars val:'\n' span_id:466) (Token id: Id.Lit_Chars val: '\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n' span_id: 467 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:468) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'verify upstream fields in branch header' span_id:475))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:479) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:480) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -rf sub_repo" &&\n' span_id:481) (Token id:Id.Lit_Chars val:'\tgit clone . sub_repo &&\n' span_id:482) (Token id:Id.Lit_Chars val:'\t(\n' span_id:483) (Token id: Id.Lit_Chars val: '\t\t## Confirm local master tracks remote master.\n' span_id: 484 ) (Token id:Id.Lit_Chars val:'\t\tcd sub_repo &&\n' span_id:485) (Token id:Id.Lit_Chars val:'\t\tHUF=$(git rev-parse HEAD) &&\n' span_id:486) (Token id:Id.Lit_Chars val:'\n' span_id:487) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:488) (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HUF\n' span_id:489) (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:490) (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:491) (Token id:Id.Lit_Chars val:'\t\t# branch.ab +0 -0\n' span_id:492) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:493) (Token id:Id.Lit_Chars val:'\n' span_id:494) (Token id: Id.Lit_Chars val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n' span_id: 495 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual &&\n' span_id:496) (Token id:Id.Lit_Chars val:'\n' span_id:497) (Token id:Id.Lit_Chars val:'\t\t## Test ahead/behind.\n' span_id:498) (Token id:Id.Lit_Chars val:'\t\techo xyz >file_xyz &&\n' span_id:499) (Token id:Id.Lit_Chars val:'\t\tgit add file_xyz &&\n' span_id:500) (Token id:Id.Lit_Chars val:'\t\tgit commit -m xyz &&\n' span_id:501) (Token id:Id.Lit_Chars val:'\n' span_id:502) (Token id:Id.Lit_Chars val:'\t\tHUF=$(git rev-parse HEAD) &&\n' span_id:503) (Token id:Id.Lit_Chars val:'\n' span_id:504) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:505) (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HUF\n' span_id:506) (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:507) (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:508) (Token id:Id.Lit_Chars val:'\t\t# branch.ab +1 -0\n' span_id:509) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:510) (Token id:Id.Lit_Chars val:'\n' span_id:511) (Token id: Id.Lit_Chars val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n' span_id: 512 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual &&\n' span_id:513) (Token id:Id.Lit_Chars val:'\n' span_id:514) (Token id:Id.Lit_Chars val:'\t\t## Repeat the above but without --branch.\n' span_id:515) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:516) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:517) (Token id:Id.Lit_Chars val:'\n' span_id:518) (Token id: Id.Lit_Chars val: '\t\tgit status --porcelain=v2 --untracked-files=all >actual &&\n' span_id: 519 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual &&\n' span_id:520) (Token id:Id.Lit_Chars val:'\n' span_id:521) (Token id: Id.Lit_Chars val: '\t\t## Test upstream-gone case. Fake this by pointing origin/master at\n' span_id: 522 ) (Token id:Id.Lit_Chars val:'\t\t## a non-existing commit.\n' span_id:523) (Token id: Id.Lit_Chars val: '\t\tOLD=$(git rev-parse origin/master) &&\n' span_id: 524 ) (Token id:Id.Lit_Chars val:'\t\tNEW=$_z40 &&\n' span_id:525) (Token id: Id.Lit_Chars val: '\t\tmv .git/packed-refs .git/old-packed-refs &&\n' span_id: 526 ) (Token id: Id.Lit_Chars val: '\t\tsed "s/$OLD/$NEW/g" <.git/old-packed-refs >.git/packed-refs &&\n' span_id: 527 ) (Token id:Id.Lit_Chars val:'\n' span_id:528) (Token id:Id.Lit_Chars val:'\t\tHUF=$(git rev-parse HEAD) &&\n' span_id:529) (Token id:Id.Lit_Chars val:'\n' span_id:530) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:531) (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HUF\n' span_id:532) (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:533) (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:534) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:535) (Token id:Id.Lit_Chars val:'\n' span_id:536) (Token id: Id.Lit_Chars val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n' span_id: 537 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:538) (Token id:Id.Lit_Chars val:'\t)\n' span_id:539) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'create and add submodule, submodule appears clean (A. S...)' span_id: 546 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:550) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:551) (Token id:Id.Lit_Chars val:'\tgit clone . sub_repo &&\n' span_id:552) (Token id:Id.Lit_Chars val:'\tgit clone . super_repo &&\n' span_id:553) (Token id:Id.Lit_Chars val:'\t(\tcd super_repo &&\n' span_id:554) (Token id: Id.Lit_Chars val: '\t\tgit submodule add ../sub_repo sub1 &&\n' span_id: 555 ) (Token id:Id.Lit_Chars val:'\n' span_id:556) (Token id: Id.Lit_Chars val: '\t\t## Confirm stage/add of clean submodule.\n' span_id: 557 ) (Token id:Id.Lit_Chars val:'\t\tHMOD=$(git hash-object -t blob -- .gitmodules) &&\n' span_id:558) (Token id:Id.Lit_Chars val:'\t\tHSUP=$(git rev-parse HEAD) &&\n' span_id:559) (Token id:Id.Lit_Chars val:'\t\tHSUB=$HSUP &&\n' span_id:560) (Token id:Id.Lit_Chars val:'\n' span_id:561) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:562) (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HSUP\n' span_id:563) (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:564) (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:565) (Token id:Id.Lit_Chars val:'\t\t# branch.ab +0 -0\n' span_id:566) (Token id: Id.Lit_Chars val: '\t\t1 A. N... 000000 100644 100644 $_z40 $HMOD .gitmodules\n' span_id: 567 ) (Token id:Id.Lit_Chars val:'\t\t1 A. S... 000000 160000 160000 $_z40 $HSUB sub1\n' span_id:568) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:569) (Token id:Id.Lit_Chars val:'\n' span_id:570) (Token id: Id.Lit_Chars val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n' span_id: 571 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:572) (Token id:Id.Lit_Chars val:'\t)\n' span_id:573) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'untracked changes in added submodule (AM S..U)' span_id:580))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:584) (Token id:Id.Lit_Chars val:'\t(\tcd super_repo &&\n' span_id:585) (Token id:Id.Lit_Chars val:'\t\t## create untracked file in the submodule.\n' span_id:586) (Token id:Id.Lit_Chars val:'\t\t(\tcd sub1 &&\n' span_id:587) (Token id:Id.Lit_Chars val:'\t\t\techo "xxxx" >file_in_sub\n' span_id:588) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:589) (Token id:Id.Lit_Chars val:'\n' span_id:590) (Token id: Id.Lit_Chars val: '\t\tHMOD=$(git hash-object -t blob -- .gitmodules) &&\n' span_id: 591 ) (Token id:Id.Lit_Chars val:'\t\tHSUP=$(git rev-parse HEAD) &&\n' span_id:592) (Token id:Id.Lit_Chars val:'\t\tHSUB=$HSUP &&\n' span_id:593) (Token id:Id.Lit_Chars val:'\n' span_id:594) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:595) (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HSUP\n' span_id:596) (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:597) (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:598) (Token id:Id.Lit_Chars val:'\t\t# branch.ab +0 -0\n' span_id:599) (Token id: Id.Lit_Chars val: '\t\t1 A. N... 000000 100644 100644 $_z40 $HMOD .gitmodules\n' span_id: 600 ) (Token id:Id.Lit_Chars val:'\t\t1 AM S..U 000000 160000 160000 $_z40 $HSUB sub1\n' span_id:601) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:602) (Token id:Id.Lit_Chars val:'\n' span_id:603) (Token id: Id.Lit_Chars val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n' span_id: 604 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:605) (Token id:Id.Lit_Chars val:'\t)\n' span_id:606) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'staged changes in added submodule (AM S.M.)' span_id:613))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:617) (Token id:Id.Lit_Chars val:'\t(\tcd super_repo &&\n' span_id:618) (Token id:Id.Lit_Chars val:'\t\t## stage the changes in the submodule.\n' span_id:619) (Token id:Id.Lit_Chars val:'\t\t(\tcd sub1 &&\n' span_id:620) (Token id:Id.Lit_Chars val:'\t\t\tgit add file_in_sub\n' span_id:621) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:622) (Token id:Id.Lit_Chars val:'\n' span_id:623) (Token id: Id.Lit_Chars val: '\t\tHMOD=$(git hash-object -t blob -- .gitmodules) &&\n' span_id: 624 ) (Token id:Id.Lit_Chars val:'\t\tHSUP=$(git rev-parse HEAD) &&\n' span_id:625) (Token id:Id.Lit_Chars val:'\t\tHSUB=$HSUP &&\n' span_id:626) (Token id:Id.Lit_Chars val:'\n' span_id:627) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:628) (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HSUP\n' span_id:629) (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:630) (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:631) (Token id:Id.Lit_Chars val:'\t\t# branch.ab +0 -0\n' span_id:632) (Token id: Id.Lit_Chars val: '\t\t1 A. N... 000000 100644 100644 $_z40 $HMOD .gitmodules\n' span_id: 633 ) (Token id:Id.Lit_Chars val:'\t\t1 AM S.M. 000000 160000 160000 $_z40 $HSUB sub1\n' span_id:634) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:635) (Token id:Id.Lit_Chars val:'\n' span_id:636) (Token id: Id.Lit_Chars val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n' span_id: 637 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:638) (Token id:Id.Lit_Chars val:'\t)\n' span_id:639) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'staged and unstaged changes in added (AM S.M.)' span_id:646))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:650) (Token id:Id.Lit_Chars val:'\t(\tcd super_repo &&\n' span_id:651) (Token id:Id.Lit_Chars val:'\t\t(\tcd sub1 &&\n' span_id:652) (Token id: Id.Lit_Chars val: '\t\t\t## make additional unstaged changes (on the same file) in the submodule.\n' span_id: 653 ) (Token id: Id.Lit_Chars val: '\t\t\t## This does not cause us to get S.MU (because the submodule does not report\n' span_id: 654 ) (Token id:Id.Lit_Chars val:'\t\t\t## a "?" line for the unstaged changes).\n' span_id:655) (Token id: Id.Lit_Chars val: '\t\t\techo "more changes" >>file_in_sub\n' span_id: 656 ) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:657) (Token id:Id.Lit_Chars val:'\n' span_id:658) (Token id: Id.Lit_Chars val: '\t\tHMOD=$(git hash-object -t blob -- .gitmodules) &&\n' span_id: 659 ) (Token id:Id.Lit_Chars val:'\t\tHSUP=$(git rev-parse HEAD) &&\n' span_id:660) (Token id:Id.Lit_Chars val:'\t\tHSUB=$HSUP &&\n' span_id:661) (Token id:Id.Lit_Chars val:'\n' span_id:662) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:663) (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HSUP\n' span_id:664) (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:665) (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:666) (Token id:Id.Lit_Chars val:'\t\t# branch.ab +0 -0\n' span_id:667) (Token id: Id.Lit_Chars val: '\t\t1 A. N... 000000 100644 100644 $_z40 $HMOD .gitmodules\n' span_id: 668 ) (Token id:Id.Lit_Chars val:'\t\t1 AM S.M. 000000 160000 160000 $_z40 $HSUB sub1\n' span_id:669) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:670) (Token id:Id.Lit_Chars val:'\n' span_id:671) (Token id: Id.Lit_Chars val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n' span_id: 672 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:673) (Token id:Id.Lit_Chars val:'\t)\n' span_id:674) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'staged and untracked changes in added submodule (AM S.MU)' span_id: 681 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:685) (Token id:Id.Lit_Chars val:'\t(\tcd super_repo &&\n' span_id:686) (Token id:Id.Lit_Chars val:'\t\t(\tcd sub1 &&\n' span_id:687) (Token id: Id.Lit_Chars val: '\t\t\t## stage new changes in tracked file.\n' span_id: 688 ) (Token id:Id.Lit_Chars val:'\t\t\tgit add file_in_sub &&\n' span_id:689) (Token id:Id.Lit_Chars val:'\t\t\t## create new untracked file.\n' span_id:690) (Token id:Id.Lit_Chars val:'\t\t\techo "yyyy" >>another_file_in_sub\n' span_id:691) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:692) (Token id:Id.Lit_Chars val:'\n' span_id:693) (Token id: Id.Lit_Chars val: '\t\tHMOD=$(git hash-object -t blob -- .gitmodules) &&\n' span_id: 694 ) (Token id:Id.Lit_Chars val:'\t\tHSUP=$(git rev-parse HEAD) &&\n' span_id:695) (Token id:Id.Lit_Chars val:'\t\tHSUB=$HSUP &&\n' span_id:696) (Token id:Id.Lit_Chars val:'\n' span_id:697) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:698) (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HSUP\n' span_id:699) (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:700) (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:701) (Token id:Id.Lit_Chars val:'\t\t# branch.ab +0 -0\n' span_id:702) (Token id: Id.Lit_Chars val: '\t\t1 A. N... 000000 100644 100644 $_z40 $HMOD .gitmodules\n' span_id: 703 ) (Token id:Id.Lit_Chars val:'\t\t1 AM S.MU 000000 160000 160000 $_z40 $HSUB sub1\n' span_id:704) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:705) (Token id:Id.Lit_Chars val:'\n' span_id:706) (Token id: Id.Lit_Chars val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n' span_id: 707 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:708) (Token id:Id.Lit_Chars val:'\t)\n' span_id:709) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'commit within the submodule appears as new commit in super (AM SC..)' span_id: 716 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:720) (Token id:Id.Lit_Chars val:'\t(\tcd super_repo &&\n' span_id:721) (Token id:Id.Lit_Chars val:'\t\t(\tcd sub1 &&\n' span_id:722) (Token id: Id.Lit_Chars val: '\t\t\t## Make a new commit in the submodule.\n' span_id: 723 ) (Token id:Id.Lit_Chars val:'\t\t\tgit add file_in_sub &&\n' span_id:724) (Token id:Id.Lit_Chars val:'\t\t\trm -f another_file_in_sub &&\n' span_id:725) (Token id:Id.Lit_Chars val:'\t\t\tgit commit -m "new commit"\n' span_id:726) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:727) (Token id:Id.Lit_Chars val:'\n' span_id:728) (Token id: Id.Lit_Chars val: '\t\tHMOD=$(git hash-object -t blob -- .gitmodules) &&\n' span_id: 729 ) (Token id:Id.Lit_Chars val:'\t\tHSUP=$(git rev-parse HEAD) &&\n' span_id:730) (Token id:Id.Lit_Chars val:'\t\tHSUB=$HSUP &&\n' span_id:731) (Token id:Id.Lit_Chars val:'\n' span_id:732) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:733) (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HSUP\n' span_id:734) (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:735) (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:736) (Token id:Id.Lit_Chars val:'\t\t# branch.ab +0 -0\n' span_id:737) (Token id: Id.Lit_Chars val: '\t\t1 A. N... 000000 100644 100644 $_z40 $HMOD .gitmodules\n' span_id: 738 ) (Token id:Id.Lit_Chars val:'\t\t1 AM SC.. 000000 160000 160000 $_z40 $HSUB sub1\n' span_id:739) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:740) (Token id:Id.Lit_Chars val:'\n' span_id:741) (Token id: Id.Lit_Chars val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n' span_id: 742 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:743) (Token id:Id.Lit_Chars val:'\t)\n' span_id:744) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'stage submodule in super and commit' span_id:751))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:755) (Token id:Id.Lit_Chars val:'\t(\tcd super_repo &&\n' span_id:756) (Token id:Id.Lit_Chars val:'\t\t## Stage the new submodule commit in the super.\n' span_id:757) (Token id:Id.Lit_Chars val:'\t\tgit add sub1 &&\n' span_id:758) (Token id: Id.Lit_Chars val: '\t\t## Commit the super so that the sub no longer appears as added.\n' span_id: 759 ) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "super commit" &&\n' span_id:760) (Token id:Id.Lit_Chars val:'\n' span_id:761) (Token id:Id.Lit_Chars val:'\t\tHSUP=$(git rev-parse HEAD) &&\n' span_id:762) (Token id:Id.Lit_Chars val:'\n' span_id:763) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:764) (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HSUP\n' span_id:765) (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:766) (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:767) (Token id:Id.Lit_Chars val:'\t\t# branch.ab +1 -0\n' span_id:768) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:769) (Token id:Id.Lit_Chars val:'\n' span_id:770) (Token id: Id.Lit_Chars val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n' span_id: 771 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:772) (Token id:Id.Lit_Chars val:'\t)\n' span_id:773) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'make unstaged changes in existing submodule (.M S.M.)' span_id: 780 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:784) (Token id:Id.Lit_Chars val:'\t(\tcd super_repo &&\n' span_id:785) (Token id:Id.Lit_Chars val:'\t\t(\tcd sub1 &&\n' span_id:786) (Token id:Id.Lit_Chars val:'\t\t\techo "zzzz" >>file_in_sub\n' span_id:787) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:788) (Token id:Id.Lit_Chars val:'\n' span_id:789) (Token id:Id.Lit_Chars val:'\t\tHSUP=$(git rev-parse HEAD) &&\n' span_id:790) (Token id:Id.Lit_Chars val:'\t\tHSUB=$(cd sub1 && git rev-parse HEAD) &&\n' span_id:791) (Token id:Id.Lit_Chars val:'\n' span_id:792) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-EOF &&\n' span_id:793) (Token id:Id.Lit_Chars val:'\t\t# branch.oid $HSUP\n' span_id:794) (Token id:Id.Lit_Chars val:'\t\t# branch.head master\n' span_id:795) (Token id:Id.Lit_Chars val:'\t\t# branch.upstream origin/master\n' span_id:796) (Token id:Id.Lit_Chars val:'\t\t# branch.ab +1 -0\n' span_id:797) (Token id: Id.Lit_Chars val: '\t\t1 .M S.M. 160000 160000 160000 $HSUB $HSUB sub1\n' span_id: 798 ) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:799) (Token id:Id.Lit_Chars val:'\n' span_id:800) (Token id: Id.Lit_Chars val: '\t\tgit status --porcelain=v2 --branch --untracked-files=all >actual &&\n' span_id: 801 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:802) (Token id:Id.Lit_Chars val:'\t)\n' span_id:803) ) } ) (C {(test_done)}) ] )