(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: {(DQ ('recursive merge corner cases w/ renames but not criss-crosses'))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup rename/delete + untracked file' span_id:21))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:25) (Token id:Id.Lit_Chars val:'\techo "A pretty inscription" >ring &&\n' span_id:26) (Token id:Id.Lit_Chars val:'\tgit add ring &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:28) (Token id:Id.Lit_Chars val:'\tgit commit -m beginning &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\n' span_id:30) (Token id:Id.Lit_Chars val:'\tgit branch people &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\tgit checkout -b rename-the-ring &&\n' span_id:32) (Token id:Id.Lit_Chars val:'\tgit mv ring one-ring-to-rule-them-all &&\n' span_id:33) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:34) (Token id:Id.Lit_Chars val:'\tgit commit -m fullname &&\n' span_id:35) (Token id:Id.Lit_Chars val:'\n' span_id:36) (Token id:Id.Lit_Chars val:'\tgit checkout people &&\n' span_id:37) (Token id:Id.Lit_Chars val:'\tgit rm ring &&\n' span_id:38) (Token id:Id.Lit_Chars val:'\techo gollum >owner &&\n' span_id:39) (Token id:Id.Lit_Chars val:'\tgit add owner &&\n' span_id:40) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:41) (Token id: Id.Lit_Chars val: '\tgit commit -m track-people-instead-of-objects &&\n' span_id: 42 ) (Token id:Id.Lit_Chars val:'\techo "Myyy PRECIOUSSS" >ring\n' span_id:43) ) } ) (C {(test_expect_success)} {(DQ ("Does git preserve Gollum's precious artifact?"))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:54) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge -s recursive rename-the-ring &&\n' span_id: 55 ) (Token id:Id.Lit_Chars val:'\n' span_id:56) (Token id: Id.Lit_Chars val: '\t# Make sure git did not delete an untracked file\n' span_id: 57 ) (Token id:Id.Lit_Chars val:'\ttest -f ring\n' span_id:58) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup rename/modify/add-source conflict' span_id:84))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:88) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:89) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:90) (Token id:Id.Lit_Chars val:'\trm -rf .git &&\n' span_id:91) (Token id:Id.Lit_Chars val:'\tgit init &&\n' span_id:92) (Token id:Id.Lit_Chars val:'\n' span_id:93) (Token id: Id.Lit_Chars val: '\tprintf "1\\n2\\n3\\n4\\n5\\n6\\n7\\n" >a &&\n' span_id: 94 ) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:95) (Token id:Id.Lit_Chars val:'\tgit commit -m A &&\n' span_id:96) (Token id:Id.Lit_Chars val:'\tgit tag A &&\n' span_id:97) (Token id:Id.Lit_Chars val:'\n' span_id:98) (Token id:Id.Lit_Chars val:'\tgit checkout -b B A &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\techo 8 >>a &&\n' span_id:100) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:101) (Token id:Id.Lit_Chars val:'\tgit commit -m B &&\n' span_id:102) (Token id:Id.Lit_Chars val:'\n' span_id:103) (Token id:Id.Lit_Chars val:'\tgit checkout -b C A &&\n' span_id:104) (Token id:Id.Lit_Chars val:'\tgit mv a b &&\n' span_id:105) (Token id:Id.Lit_Chars val:'\techo something completely different >a &&\n' span_id:106) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:107) (Token id:Id.Lit_Chars val:'\tgit commit -m C\n' span_id:108) ) } ) (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'rename/modify/add-source conflict resolvable' span_id:115))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:119) (Token id:Id.Lit_Chars val:'\tgit checkout B^0 &&\n' span_id:120) (Token id:Id.Lit_Chars val:'\n' span_id:121) (Token id:Id.Lit_Chars val:'\tgit merge -s recursive C^0 &&\n' span_id:122) (Token id:Id.Lit_Chars val:'\n' span_id:123) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse B:a) = $(git rev-parse b) &&\n' span_id: 124 ) (Token id:Id.Lit_Chars val:'\ttest $(git rev-parse C:a) = $(git rev-parse a)\n' span_id:125) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'setup resolvable conflict missed if rename missed' span_id: 132 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:136) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:137) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:138) (Token id:Id.Lit_Chars val:'\trm -rf .git &&\n' span_id:139) (Token id:Id.Lit_Chars val:'\tgit init &&\n' span_id:140) (Token id:Id.Lit_Chars val:'\n' span_id:141) (Token id:Id.Lit_Chars val:'\tprintf "1\\n2\\n3\\n4\\n5\\n" >a &&\n' span_id:142) (Token id:Id.Lit_Chars val:'\techo foo >b &&\n' span_id:143) (Token id:Id.Lit_Chars val:'\tgit add a b &&\n' span_id:144) (Token id:Id.Lit_Chars val:'\tgit commit -m A &&\n' span_id:145) (Token id:Id.Lit_Chars val:'\tgit tag A &&\n' span_id:146) (Token id:Id.Lit_Chars val:'\n' span_id:147) (Token id:Id.Lit_Chars val:'\tgit checkout -b B A &&\n' span_id:148) (Token id:Id.Lit_Chars val:'\tgit mv a c &&\n' span_id:149) (Token id: Id.Lit_Chars val: '\techo "Completely different content" >a &&\n' span_id: 150 ) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:151) (Token id:Id.Lit_Chars val:'\tgit commit -m B &&\n' span_id:152) (Token id:Id.Lit_Chars val:'\n' span_id:153) (Token id:Id.Lit_Chars val:'\tgit checkout -b C A &&\n' span_id:154) (Token id:Id.Lit_Chars val:'\techo 6 >>a &&\n' span_id:155) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:156) (Token id:Id.Lit_Chars val:'\tgit commit -m C\n' span_id:157) ) } ) (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'conflict caused if rename not detected' span_id:164))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:168) (Token id:Id.Lit_Chars val:'\tgit checkout -q C^0 &&\n' span_id:169) (Token id:Id.Lit_Chars val:'\tgit merge -s recursive B^0 &&\n' span_id:170) (Token id:Id.Lit_Chars val:'\n' span_id:171) (Token id:Id.Lit_Chars val:'\ttest 3 -eq $(git ls-files -s | wc -l) &&\n' span_id:172) (Token id: Id.Lit_Chars val: '\ttest 0 -eq $(git ls-files -u | wc -l) &&\n' span_id: 173 ) (Token id:Id.Lit_Chars val:'\ttest 0 -eq $(git ls-files -o | wc -l) &&\n' span_id:174) (Token id:Id.Lit_Chars val:'\n' span_id:175) (Token id:Id.Lit_Chars val:'\ttest_line_count = 6 c &&\n' span_id:176) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse HEAD:a) = $(git rev-parse B:a) &&\n' span_id: 177 ) (Token id:Id.Lit_Chars val:'\ttest $(git rev-parse HEAD:b) = $(git rev-parse A:b)\n' span_id:178) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup conflict resolved wrong if rename missed' span_id:185))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:189) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:190) (Token id:Id.Lit_Chars val:'\tgit clean -f &&\n' span_id:191) (Token id:Id.Lit_Chars val:'\n' span_id:192) (Token id:Id.Lit_Chars val:'\tgit checkout -b D A &&\n' span_id:193) (Token id:Id.Lit_Chars val:'\techo 7 >>a &&\n' span_id:194) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:195) (Token id:Id.Lit_Chars val:'\tgit mv a c &&\n' span_id:196) (Token id:Id.Lit_Chars val:'\techo "Completely different content" >a &&\n' span_id:197) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:198) (Token id:Id.Lit_Chars val:'\tgit commit -m D &&\n' span_id:199) (Token id:Id.Lit_Chars val:'\n' span_id:200) (Token id:Id.Lit_Chars val:'\tgit checkout -b E A &&\n' span_id:201) (Token id:Id.Lit_Chars val:'\tgit rm a &&\n' span_id:202) (Token id:Id.Lit_Chars val:'\techo "Completely different content" >>a &&\n' span_id:203) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:204) (Token id:Id.Lit_Chars val:'\tgit commit -m E\n' span_id:205) ) } ) (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'missed conflict if rename not detected' span_id:212))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:216) (Token id:Id.Lit_Chars val:'\tgit checkout -q E^0 &&\n' span_id:217) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge -s recursive D^0\n' span_id:218) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'setup undetected rename/add-source causes data loss' span_id: 256 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:260) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:261) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:262) (Token id:Id.Lit_Chars val:'\trm -rf .git &&\n' span_id:263) (Token id:Id.Lit_Chars val:'\tgit init &&\n' span_id:264) (Token id:Id.Lit_Chars val:'\n' span_id:265) (Token id:Id.Lit_Chars val:'\tprintf "1\\n2\\n3\\n4\\n5\\n" >a &&\n' span_id:266) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:267) (Token id:Id.Lit_Chars val:'\tgit commit -m A &&\n' span_id:268) (Token id:Id.Lit_Chars val:'\tgit tag A &&\n' span_id:269) (Token id:Id.Lit_Chars val:'\n' span_id:270) (Token id:Id.Lit_Chars val:'\tgit checkout -b B A &&\n' span_id:271) (Token id:Id.Lit_Chars val:'\tgit mv a b &&\n' span_id:272) (Token id:Id.Lit_Chars val:'\tgit commit -m B &&\n' span_id:273) (Token id:Id.Lit_Chars val:'\n' span_id:274) (Token id:Id.Lit_Chars val:'\tgit checkout -b C A &&\n' span_id:275) (Token id:Id.Lit_Chars val:'\tgit mv a b &&\n' span_id:276) (Token id:Id.Lit_Chars val:'\techo foobar >a &&\n' span_id:277) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:278) (Token id:Id.Lit_Chars val:'\tgit commit -m C\n' span_id:279) ) } ) (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'detect rename/add-source and preserve all data' span_id:286))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:290) (Token id:Id.Lit_Chars val:'\tgit checkout B^0 &&\n' span_id:291) (Token id:Id.Lit_Chars val:'\n' span_id:292) (Token id:Id.Lit_Chars val:'\tgit merge -s recursive C^0 &&\n' span_id:293) (Token id:Id.Lit_Chars val:'\n' span_id:294) (Token id: Id.Lit_Chars val: '\ttest 2 -eq $(git ls-files -s | wc -l) &&\n' span_id: 295 ) (Token id:Id.Lit_Chars val:'\ttest 2 -eq $(git ls-files -u | wc -l) &&\n' span_id:296) (Token id: Id.Lit_Chars val: '\ttest 0 -eq $(git ls-files -o | wc -l) &&\n' span_id: 297 ) (Token id:Id.Lit_Chars val:'\n' span_id:298) (Token id:Id.Lit_Chars val:'\ttest -f a &&\n' span_id:299) (Token id:Id.Lit_Chars val:'\ttest -f b &&\n' span_id:300) (Token id:Id.Lit_Chars val:'\n' span_id:301) (Token id:Id.Lit_Chars val:'\ttest $(git rev-parse HEAD:b) = $(git rev-parse A:a) &&\n' span_id:302) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse HEAD:a) = $(git rev-parse C:a)\n' span_id: 303 ) ) } ) (C {(test_expect_failure)} { (SQ (Token id: Id.Lit_Chars val: 'detect rename/add-source and preserve all data, merge other way' span_id: 310 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:314) (Token id:Id.Lit_Chars val:'\tgit checkout C^0 &&\n' span_id:315) (Token id:Id.Lit_Chars val:'\n' span_id:316) (Token id:Id.Lit_Chars val:'\tgit merge -s recursive B^0 &&\n' span_id:317) (Token id:Id.Lit_Chars val:'\n' span_id:318) (Token id: Id.Lit_Chars val: '\ttest 2 -eq $(git ls-files -s | wc -l) &&\n' span_id: 319 ) (Token id:Id.Lit_Chars val:'\ttest 2 -eq $(git ls-files -u | wc -l) &&\n' span_id:320) (Token id: Id.Lit_Chars val: '\ttest 0 -eq $(git ls-files -o | wc -l) &&\n' span_id: 321 ) (Token id:Id.Lit_Chars val:'\n' span_id:322) (Token id:Id.Lit_Chars val:'\ttest -f a &&\n' span_id:323) (Token id:Id.Lit_Chars val:'\ttest -f b &&\n' span_id:324) (Token id:Id.Lit_Chars val:'\n' span_id:325) (Token id:Id.Lit_Chars val:'\ttest $(git rev-parse HEAD:b) = $(git rev-parse A:a) &&\n' span_id:326) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse HEAD:a) = $(git rev-parse C:a)\n' span_id: 327 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup content merge + rename/directory conflict' span_id:334))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:338) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:339) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:340) (Token id:Id.Lit_Chars val:'\trm -rf .git &&\n' span_id:341) (Token id:Id.Lit_Chars val:'\tgit init &&\n' span_id:342) (Token id:Id.Lit_Chars val:'\n' span_id:343) (Token id: Id.Lit_Chars val: '\tprintf "1\\n2\\n3\\n4\\n5\\n6\\n" >file &&\n' span_id: 344 ) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:345) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:346) (Token id:Id.Lit_Chars val:'\tgit commit -m base &&\n' span_id:347) (Token id:Id.Lit_Chars val:'\tgit tag base &&\n' span_id:348) (Token id:Id.Lit_Chars val:'\n' span_id:349) (Token id:Id.Lit_Chars val:'\tgit checkout -b right &&\n' span_id:350) (Token id:Id.Lit_Chars val:'\techo 7 >>file &&\n' span_id:351) (Token id:Id.Lit_Chars val:'\tmkdir newfile &&\n' span_id:352) (Token id:Id.Lit_Chars val:'\techo junk >newfile/realfile &&\n' span_id:353) (Token id:Id.Lit_Chars val:'\tgit add file newfile/realfile &&\n' span_id:354) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:355) (Token id:Id.Lit_Chars val:'\tgit commit -m right &&\n' span_id:356) (Token id:Id.Lit_Chars val:'\n' span_id:357) (Token id: Id.Lit_Chars val: '\tgit checkout -b left-conflict base &&\n' span_id: 358 ) (Token id:Id.Lit_Chars val:'\techo 8 >>file &&\n' span_id:359) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:360) (Token id:Id.Lit_Chars val:'\tgit mv file newfile &&\n' span_id:361) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:362) (Token id:Id.Lit_Chars val:'\tgit commit -m left &&\n' span_id:363) (Token id:Id.Lit_Chars val:'\n' span_id:364) (Token id:Id.Lit_Chars val:'\tgit checkout -b left-clean base &&\n' span_id:365) (Token id:Id.Lit_Chars val:'\techo 0 >newfile &&\n' span_id:366) (Token id:Id.Lit_Chars val:'\tcat file >>newfile &&\n' span_id:367) (Token id:Id.Lit_Chars val:'\tgit add newfile &&\n' span_id:368) (Token id:Id.Lit_Chars val:'\tgit rm file &&\n' span_id:369) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:370) (Token id:Id.Lit_Chars val:'\tgit commit -m left\n' span_id:371) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rename/directory conflict + clean content merge' span_id:378))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:382) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:383) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:384) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:385) (Token id:Id.Lit_Chars val:'\n' span_id:386) (Token id:Id.Lit_Chars val:'\tgit checkout left-clean^0 &&\n' span_id:387) (Token id:Id.Lit_Chars val:'\n' span_id:388) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge -s recursive right^0 &&\n' span_id: 389 ) (Token id:Id.Lit_Chars val:'\n' span_id:390) (Token id: Id.Lit_Chars val: '\ttest 2 -eq $(git ls-files -s | wc -l) &&\n' span_id: 391 ) (Token id:Id.Lit_Chars val:'\ttest 1 -eq $(git ls-files -u | wc -l) &&\n' span_id:392) (Token id: Id.Lit_Chars val: '\ttest 1 -eq $(git ls-files -o | wc -l) &&\n' span_id: 393 ) (Token id:Id.Lit_Chars val:'\n' span_id:394) (Token id:Id.Lit_Chars val:'\techo 0 >expect &&\n' span_id:395) (Token id:Id.Lit_Chars val:'\tgit cat-file -p base:file >>expect &&\n' span_id:396) (Token id:Id.Lit_Chars val:'\techo 7 >>expect &&\n' span_id:397) (Token id:Id.Lit_Chars val:'\ttest_cmp expect newfile~HEAD &&\n' span_id:398) (Token id:Id.Lit_Chars val:'\n' span_id:399) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse :2:newfile) = $(git hash-object expect) &&\n' span_id: 400 ) (Token id:Id.Lit_Chars val:'\n' span_id:401) (Token id:Id.Lit_Chars val:'\ttest -f newfile/realfile &&\n' span_id:402) (Token id:Id.Lit_Chars val:'\ttest -f newfile~HEAD\n' span_id:403) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rename/directory conflict + content merge conflict' span_id: 410 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:414) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:415) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:416) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:417) (Token id:Id.Lit_Chars val:'\n' span_id:418) (Token id:Id.Lit_Chars val:'\tgit checkout left-conflict^0 &&\n' span_id:419) (Token id:Id.Lit_Chars val:'\n' span_id:420) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge -s recursive right^0 &&\n' span_id: 421 ) (Token id:Id.Lit_Chars val:'\n' span_id:422) (Token id: Id.Lit_Chars val: '\ttest 4 -eq $(git ls-files -s | wc -l) &&\n' span_id: 423 ) (Token id:Id.Lit_Chars val:'\ttest 3 -eq $(git ls-files -u | wc -l) &&\n' span_id:424) (Token id: Id.Lit_Chars val: '\ttest 1 -eq $(git ls-files -o | wc -l) &&\n' span_id: 425 ) (Token id:Id.Lit_Chars val:'\n' span_id:426) (Token id: Id.Lit_Chars val: '\tgit cat-file -p left-conflict:newfile >left &&\n' span_id: 427 ) (Token id:Id.Lit_Chars val:'\tgit cat-file -p base:file >base &&\n' span_id:428) (Token id: Id.Lit_Chars val: '\tgit cat-file -p right:file >right &&\n' span_id: 429 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge-file \\\n' span_id:430) (Token id:Id.Lit_Chars val:'\t\t-L "HEAD:newfile" \\\n' span_id:431) (Token id:Id.Lit_Chars val:'\t\t-L "" \\\n' span_id:432) (Token id:Id.Lit_Chars val:'\t\t-L "right^0:file" \\\n' span_id:433) (Token id:Id.Lit_Chars val:'\t\tleft base right &&\n' span_id:434) (Token id:Id.Lit_Chars val:'\ttest_cmp left newfile~HEAD &&\n' span_id:435) (Token id:Id.Lit_Chars val:'\n' span_id:436) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse :1:newfile) = $(git rev-parse base:file) &&\n' span_id: 437 ) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse :2:newfile) = $(git rev-parse left-conflict:newfile) &&\n' span_id: 438 ) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse :3:newfile) = $(git rev-parse right:file) &&\n' span_id: 439 ) (Token id:Id.Lit_Chars val:'\n' span_id:440) (Token id:Id.Lit_Chars val:'\ttest -f newfile/realfile &&\n' span_id:441) (Token id:Id.Lit_Chars val:'\ttest -f newfile~HEAD\n' span_id:442) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'setup content merge + rename/directory conflict w/ disappearing dir' span_id: 449 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:453) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:454) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:455) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:456) (Token id:Id.Lit_Chars val:'\trm -rf .git &&\n' span_id:457) (Token id:Id.Lit_Chars val:'\tgit init &&\n' span_id:458) (Token id:Id.Lit_Chars val:'\n' span_id:459) (Token id:Id.Lit_Chars val:'\tmkdir sub &&\n' span_id:460) (Token id:Id.Lit_Chars val:'\tprintf "1\\n2\\n3\\n4\\n5\\n6\\n" >sub/file &&\n' span_id:461) (Token id:Id.Lit_Chars val:'\tgit add sub/file &&\n' span_id:462) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:463) (Token id:Id.Lit_Chars val:'\tgit commit -m base &&\n' span_id:464) (Token id:Id.Lit_Chars val:'\tgit tag base &&\n' span_id:465) (Token id:Id.Lit_Chars val:'\n' span_id:466) (Token id:Id.Lit_Chars val:'\tgit checkout -b right &&\n' span_id:467) (Token id:Id.Lit_Chars val:'\techo 7 >>sub/file &&\n' span_id:468) (Token id:Id.Lit_Chars val:'\tgit add sub/file &&\n' span_id:469) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:470) (Token id:Id.Lit_Chars val:'\tgit commit -m right &&\n' span_id:471) (Token id:Id.Lit_Chars val:'\n' span_id:472) (Token id:Id.Lit_Chars val:'\tgit checkout -b left base &&\n' span_id:473) (Token id:Id.Lit_Chars val:'\techo 0 >newfile &&\n' span_id:474) (Token id:Id.Lit_Chars val:'\tcat sub/file >>newfile &&\n' span_id:475) (Token id:Id.Lit_Chars val:'\tgit rm sub/file &&\n' span_id:476) (Token id:Id.Lit_Chars val:'\tmv newfile sub &&\n' span_id:477) (Token id:Id.Lit_Chars val:'\tgit add sub &&\n' span_id:478) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:479) (Token id:Id.Lit_Chars val:'\tgit commit -m left\n' span_id:480) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'disappearing dir in rename/directory conflict handled' span_id: 487 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:491) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:492) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:493) (Token id:Id.Lit_Chars val:'\n' span_id:494) (Token id:Id.Lit_Chars val:'\tgit checkout left^0 &&\n' span_id:495) (Token id:Id.Lit_Chars val:'\n' span_id:496) (Token id:Id.Lit_Chars val:'\tgit merge -s recursive right^0 &&\n' span_id:497) (Token id:Id.Lit_Chars val:'\n' span_id:498) (Token id:Id.Lit_Chars val:'\ttest 1 -eq $(git ls-files -s | wc -l) &&\n' span_id:499) (Token id: Id.Lit_Chars val: '\ttest 0 -eq $(git ls-files -u | wc -l) &&\n' span_id: 500 ) (Token id:Id.Lit_Chars val:'\ttest 0 -eq $(git ls-files -o | wc -l) &&\n' span_id:501) (Token id:Id.Lit_Chars val:'\n' span_id:502) (Token id:Id.Lit_Chars val:'\techo 0 >expect &&\n' span_id:503) (Token id: Id.Lit_Chars val: '\tgit cat-file -p base:sub/file >>expect &&\n' span_id: 504 ) (Token id:Id.Lit_Chars val:'\techo 7 >>expect &&\n' span_id:505) (Token id:Id.Lit_Chars val:'\ttest_cmp expect sub &&\n' span_id:506) (Token id:Id.Lit_Chars val:'\n' span_id:507) (Token id:Id.Lit_Chars val:'\ttest -f sub\n' span_id:508) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup rename/rename (2to1) + modify/modify' span_id:549))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:553) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:554) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:555) (Token id:Id.Lit_Chars val:'\trm -rf .git &&\n' span_id:556) (Token id:Id.Lit_Chars val:'\tgit init &&\n' span_id:557) (Token id:Id.Lit_Chars val:'\n' span_id:558) (Token id:Id.Lit_Chars val:'\tprintf "1\\n2\\n3\\n4\\n5\\n" >a &&\n' span_id:559) (Token id:Id.Lit_Chars val:'\tprintf "5\\n4\\n3\\n2\\n1\\n" >b &&\n' span_id:560) (Token id:Id.Lit_Chars val:'\tgit add a b &&\n' span_id:561) (Token id:Id.Lit_Chars val:'\tgit commit -m A &&\n' span_id:562) (Token id:Id.Lit_Chars val:'\tgit tag A &&\n' span_id:563) (Token id:Id.Lit_Chars val:'\n' span_id:564) (Token id:Id.Lit_Chars val:'\tgit checkout -b B A &&\n' span_id:565) (Token id:Id.Lit_Chars val:'\tgit mv a c &&\n' span_id:566) (Token id:Id.Lit_Chars val:'\techo 0 >>b &&\n' span_id:567) (Token id:Id.Lit_Chars val:'\tgit add b &&\n' span_id:568) (Token id:Id.Lit_Chars val:'\tgit commit -m B &&\n' span_id:569) (Token id:Id.Lit_Chars val:'\n' span_id:570) (Token id:Id.Lit_Chars val:'\tgit checkout -b C A &&\n' span_id:571) (Token id:Id.Lit_Chars val:'\tgit mv b c &&\n' span_id:572) (Token id:Id.Lit_Chars val:'\techo 6 >>a &&\n' span_id:573) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:574) (Token id:Id.Lit_Chars val:'\tgit commit -m C\n' span_id:575) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'handle rename/rename (2to1) conflict correctly' span_id:582))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:586) (Token id:Id.Lit_Chars val:'\tgit checkout B^0 &&\n' span_id:587) (Token id:Id.Lit_Chars val:'\n' span_id:588) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge -s recursive C^0 >out &&\n' span_id: 589 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "CONFLICT (rename/rename)" out &&\n' span_id:590) (Token id:Id.Lit_Chars val:'\n' span_id:591) (Token id:Id.Lit_Chars val:'\ttest 2 -eq $(git ls-files -s | wc -l) &&\n' span_id:592) (Token id: Id.Lit_Chars val: '\ttest 2 -eq $(git ls-files -u | wc -l) &&\n' span_id: 593 ) (Token id:Id.Lit_Chars val:'\ttest 2 -eq $(git ls-files -u c | wc -l) &&\n' span_id:594) (Token id: Id.Lit_Chars val: '\ttest 3 -eq $(git ls-files -o | wc -l) &&\n' span_id: 595 ) (Token id:Id.Lit_Chars val:'\n' span_id:596) (Token id:Id.Lit_Chars val:'\ttest ! -f a &&\n' span_id:597) (Token id:Id.Lit_Chars val:'\ttest ! -f b &&\n' span_id:598) (Token id:Id.Lit_Chars val:'\ttest -f c~HEAD &&\n' span_id:599) (Token id:Id.Lit_Chars val:'\ttest -f c~C^0 &&\n' span_id:600) (Token id:Id.Lit_Chars val:'\n' span_id:601) (Token id: Id.Lit_Chars val: '\ttest $(git hash-object c~HEAD) = $(git rev-parse C:a) &&\n' span_id: 602 ) (Token id:Id.Lit_Chars val:'\ttest $(git hash-object c~C^0) = $(git rev-parse B:b)\n' span_id:603) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup simple rename/rename (1to2) conflict' span_id:622))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:626) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:627) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:628) (Token id:Id.Lit_Chars val:'\trm -rf .git &&\n' span_id:629) (Token id:Id.Lit_Chars val:'\tgit init &&\n' span_id:630) (Token id:Id.Lit_Chars val:'\n' span_id:631) (Token id:Id.Lit_Chars val:'\techo stuff >a &&\n' span_id:632) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:633) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:634) (Token id:Id.Lit_Chars val:'\tgit commit -m A &&\n' span_id:635) (Token id:Id.Lit_Chars val:'\tgit tag A &&\n' span_id:636) (Token id:Id.Lit_Chars val:'\n' span_id:637) (Token id:Id.Lit_Chars val:'\tgit checkout -b B A &&\n' span_id:638) (Token id:Id.Lit_Chars val:'\tgit mv a b &&\n' span_id:639) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:640) (Token id:Id.Lit_Chars val:'\tgit commit -m B &&\n' span_id:641) (Token id:Id.Lit_Chars val:'\n' span_id:642) (Token id:Id.Lit_Chars val:'\tgit checkout -b C A &&\n' span_id:643) (Token id:Id.Lit_Chars val:'\tgit mv a c &&\n' span_id:644) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:645) (Token id:Id.Lit_Chars val:'\tgit commit -m C\n' span_id:646) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge has correct working tree contents' span_id:653))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:657) (Token id:Id.Lit_Chars val:'\tgit checkout C^0 &&\n' span_id:658) (Token id:Id.Lit_Chars val:'\n' span_id:659) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge -s recursive B^0 &&\n' span_id: 660 ) (Token id:Id.Lit_Chars val:'\n' span_id:661) (Token id: Id.Lit_Chars val: '\ttest 3 -eq $(git ls-files -s | wc -l) &&\n' span_id: 662 ) (Token id:Id.Lit_Chars val:'\ttest 3 -eq $(git ls-files -u | wc -l) &&\n' span_id:663) (Token id: Id.Lit_Chars val: '\ttest 0 -eq $(git ls-files -o | wc -l) &&\n' span_id: 664 ) (Token id:Id.Lit_Chars val:'\n' span_id:665) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse :1:a) = $(git rev-parse A:a) &&\n' span_id: 666 ) (Token id:Id.Lit_Chars val:'\ttest $(git rev-parse :3:b) = $(git rev-parse A:a) &&\n' span_id:667) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse :2:c) = $(git rev-parse A:a) &&\n' span_id: 668 ) (Token id:Id.Lit_Chars val:'\n' span_id:669) (Token id:Id.Lit_Chars val:'\ttest ! -f a &&\n' span_id:670) (Token id:Id.Lit_Chars val:'\ttest $(git hash-object b) = $(git rev-parse A:a) &&\n' span_id:671) (Token id: Id.Lit_Chars val: '\ttest $(git hash-object c) = $(git rev-parse A:a)\n' span_id: 672 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup rename/rename(1to2)/add-source conflict' span_id:698))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:702) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:703) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:704) (Token id:Id.Lit_Chars val:'\trm -rf .git &&\n' span_id:705) (Token id:Id.Lit_Chars val:'\tgit init &&\n' span_id:706) (Token id:Id.Lit_Chars val:'\n' span_id:707) (Token id: Id.Lit_Chars val: '\tprintf "1\\n2\\n3\\n4\\n5\\n6\\n7\\n" >a &&\n' span_id: 708 ) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:709) (Token id:Id.Lit_Chars val:'\tgit commit -m A &&\n' span_id:710) (Token id:Id.Lit_Chars val:'\tgit tag A &&\n' span_id:711) (Token id:Id.Lit_Chars val:'\n' span_id:712) (Token id:Id.Lit_Chars val:'\tgit checkout -b B A &&\n' span_id:713) (Token id:Id.Lit_Chars val:'\tgit mv a b &&\n' span_id:714) (Token id:Id.Lit_Chars val:'\tgit commit -m B &&\n' span_id:715) (Token id:Id.Lit_Chars val:'\n' span_id:716) (Token id:Id.Lit_Chars val:'\tgit checkout -b C A &&\n' span_id:717) (Token id:Id.Lit_Chars val:'\tgit mv a c &&\n' span_id:718) (Token id:Id.Lit_Chars val:'\techo something completely different >a &&\n' span_id:719) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:720) (Token id:Id.Lit_Chars val:'\tgit commit -m C\n' span_id:721) ) } ) (C {(test_expect_failure)} { (SQ (Token id: Id.Lit_Chars val: 'detect conflict with rename/rename(1to2)/add-source merge' span_id: 728 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:732) (Token id:Id.Lit_Chars val:'\tgit checkout B^0 &&\n' span_id:733) (Token id:Id.Lit_Chars val:'\n' span_id:734) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge -s recursive C^0 &&\n' span_id: 735 ) (Token id:Id.Lit_Chars val:'\n' span_id:736) (Token id: Id.Lit_Chars val: '\ttest 4 -eq $(git ls-files -s | wc -l) &&\n' span_id: 737 ) (Token id:Id.Lit_Chars val:'\ttest 0 -eq $(git ls-files -o | wc -l) &&\n' span_id:738) (Token id:Id.Lit_Chars val:'\n' span_id:739) (Token id:Id.Lit_Chars val:'\ttest $(git rev-parse 3:a) = $(git rev-parse C:a) &&\n' span_id:740) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse 1:a) = $(git rev-parse A:a) &&\n' span_id: 741 ) (Token id:Id.Lit_Chars val:'\ttest $(git rev-parse 2:b) = $(git rev-parse B:b) &&\n' span_id:742) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse 3:c) = $(git rev-parse C:c) &&\n' span_id: 743 ) (Token id:Id.Lit_Chars val:'\n' span_id:744) (Token id:Id.Lit_Chars val:'\ttest -f a &&\n' span_id:745) (Token id:Id.Lit_Chars val:'\ttest -f b &&\n' span_id:746) (Token id:Id.Lit_Chars val:'\ttest -f c\n' span_id:747) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'setup rename/rename(1to2)/add-source resolvable conflict' span_id: 754 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:758) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:759) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:760) (Token id:Id.Lit_Chars val:'\trm -rf .git &&\n' span_id:761) (Token id:Id.Lit_Chars val:'\tgit init &&\n' span_id:762) (Token id:Id.Lit_Chars val:'\n' span_id:763) (Token id:Id.Lit_Chars val:'\t>a &&\n' span_id:764) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:765) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:766) (Token id:Id.Lit_Chars val:'\tgit commit -m base &&\n' span_id:767) (Token id:Id.Lit_Chars val:'\tgit tag A &&\n' span_id:768) (Token id:Id.Lit_Chars val:'\n' span_id:769) (Token id:Id.Lit_Chars val:'\tgit checkout -b B A &&\n' span_id:770) (Token id:Id.Lit_Chars val:'\tgit mv a b &&\n' span_id:771) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:772) (Token id:Id.Lit_Chars val:'\tgit commit -m one &&\n' span_id:773) (Token id:Id.Lit_Chars val:'\n' span_id:774) (Token id:Id.Lit_Chars val:'\tgit checkout -b C A &&\n' span_id:775) (Token id:Id.Lit_Chars val:'\tgit mv a b &&\n' span_id:776) (Token id:Id.Lit_Chars val:'\techo important-info >a &&\n' span_id:777) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:778) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:779) (Token id:Id.Lit_Chars val:'\tgit commit -m two\n' span_id:780) ) } ) (C {(test_expect_failure)} { (SQ (Token id: Id.Lit_Chars val: 'rename/rename/add-source still tracks new a file' span_id: 787 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:791) (Token id:Id.Lit_Chars val:'\tgit checkout C^0 &&\n' span_id:792) (Token id:Id.Lit_Chars val:'\tgit merge -s recursive B^0 &&\n' span_id:793) (Token id:Id.Lit_Chars val:'\n' span_id:794) (Token id:Id.Lit_Chars val:'\ttest 2 -eq $(git ls-files -s | wc -l) &&\n' span_id:795) (Token id: Id.Lit_Chars val: '\ttest 0 -eq $(git ls-files -o | wc -l) &&\n' span_id: 796 ) (Token id:Id.Lit_Chars val:'\n' span_id:797) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse HEAD:a) = $(git rev-parse C:a) &&\n' span_id: 798 ) (Token id:Id.Lit_Chars val:'\ttest $(git rev-parse HEAD:b) = $(git rev-parse A:a)\n' span_id:799) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup rename/rename(1to2)/add-dest conflict' span_id:806))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:810) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:811) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:812) (Token id:Id.Lit_Chars val:'\trm -rf .git &&\n' span_id:813) (Token id:Id.Lit_Chars val:'\tgit init &&\n' span_id:814) (Token id:Id.Lit_Chars val:'\n' span_id:815) (Token id:Id.Lit_Chars val:'\techo stuff >a &&\n' span_id:816) (Token id:Id.Lit_Chars val:'\tgit add a &&\n' span_id:817) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:818) (Token id:Id.Lit_Chars val:'\tgit commit -m base &&\n' span_id:819) (Token id:Id.Lit_Chars val:'\tgit tag A &&\n' span_id:820) (Token id:Id.Lit_Chars val:'\n' span_id:821) (Token id:Id.Lit_Chars val:'\tgit checkout -b B A &&\n' span_id:822) (Token id:Id.Lit_Chars val:'\tgit mv a b &&\n' span_id:823) (Token id:Id.Lit_Chars val:'\techo precious-data >c &&\n' span_id:824) (Token id:Id.Lit_Chars val:'\tgit add c &&\n' span_id:825) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:826) (Token id:Id.Lit_Chars val:'\tgit commit -m one &&\n' span_id:827) (Token id:Id.Lit_Chars val:'\n' span_id:828) (Token id:Id.Lit_Chars val:'\tgit checkout -b C A &&\n' span_id:829) (Token id:Id.Lit_Chars val:'\tgit mv a c &&\n' span_id:830) (Token id:Id.Lit_Chars val:'\techo important-info >b &&\n' span_id:831) (Token id:Id.Lit_Chars val:'\tgit add b &&\n' span_id:832) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:833) (Token id:Id.Lit_Chars val:'\tgit commit -m two\n' span_id:834) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rename/rename/add-dest merge still knows about conflicting file versions' span_id: 841 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:845) (Token id:Id.Lit_Chars val:'\tgit checkout C^0 &&\n' span_id:846) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge -s recursive B^0 &&\n' span_id:847) (Token id:Id.Lit_Chars val:'\n' span_id:848) (Token id:Id.Lit_Chars val:'\ttest 5 -eq $(git ls-files -s | wc -l) &&\n' span_id:849) (Token id: Id.Lit_Chars val: '\ttest 2 -eq $(git ls-files -u b | wc -l) &&\n' span_id: 850 ) (Token id:Id.Lit_Chars val:'\ttest 2 -eq $(git ls-files -u c | wc -l) &&\n' span_id:851) (Token id: Id.Lit_Chars val: '\ttest 4 -eq $(git ls-files -o | wc -l) &&\n' span_id: 852 ) (Token id:Id.Lit_Chars val:'\n' span_id:853) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse :1:a) = $(git rev-parse A:a) &&\n' span_id: 854 ) (Token id:Id.Lit_Chars val:'\ttest $(git rev-parse :2:b) = $(git rev-parse C:b) &&\n' span_id:855) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse :3:b) = $(git rev-parse B:b) &&\n' span_id: 856 ) (Token id:Id.Lit_Chars val:'\ttest $(git rev-parse :2:c) = $(git rev-parse C:c) &&\n' span_id:857) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse :3:c) = $(git rev-parse B:c) &&\n' span_id: 858 ) (Token id:Id.Lit_Chars val:'\n' span_id:859) (Token id: Id.Lit_Chars val: '\ttest $(git hash-object c~HEAD) = $(git rev-parse C:c) &&\n' span_id: 860 ) (Token id: Id.Lit_Chars val: '\ttest $(git hash-object c~B\\^0) = $(git rev-parse B:c) &&\n' span_id: 861 ) (Token id: Id.Lit_Chars val: '\ttest $(git hash-object b~HEAD) = $(git rev-parse C:b) &&\n' span_id: 862 ) (Token id: Id.Lit_Chars val: '\ttest $(git hash-object b~B\\^0) = $(git rev-parse B:b) &&\n' span_id: 863 ) (Token id:Id.Lit_Chars val:'\n' span_id:864) (Token id:Id.Lit_Chars val:'\ttest ! -f b &&\n' span_id:865) (Token id:Id.Lit_Chars val:'\ttest ! -f c\n' span_id:866) ) } ) (C {(test_done)}) ] )