(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-merge\n' span_id:6) (Token id:Id.Lit_Chars val:'\n' span_id:7) (Token id:Id.Lit_Chars val:'Do not overwrite changes.' span_id:8) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:20))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:24) (Token id:Id.Lit_Chars val:'\ttest_commit c0 c0.c &&\n' span_id:25) (Token id:Id.Lit_Chars val:'\ttest_commit c1 c1.c &&\n' span_id:26) (Token id:Id.Lit_Chars val:'\ttest_commit c1a c1.c "c1 a" &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:28) (Token id:Id.Lit_Chars val:'\ttest_commit c2 c2.c &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:30) (Token id:Id.Lit_Chars val:'\tmkdir sub &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\techo "sub/f" > sub/f &&\n' span_id:32) (Token id:Id.Lit_Chars val:'\tmkdir sub2 &&\n' span_id:33) (Token id:Id.Lit_Chars val:'\techo "sub2/f" > sub2/f &&\n' span_id:34) (Token id:Id.Lit_Chars val:'\tgit add sub/f sub2/f &&\n' span_id:35) (Token id:Id.Lit_Chars val:'\tgit commit -m sub &&\n' span_id:36) (Token id:Id.Lit_Chars val:'\tgit tag sub &&\n' span_id:37) (Token id:Id.Lit_Chars val:'\techo "VERY IMPORTANT CHANGES" > important\n' span_id:38) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'will not overwrite untracked file' span_id:45))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:49) (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:50) (Token id:Id.Lit_Chars val:'\tcp important c2.c &&\n' span_id:51) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge c2 &&\n' span_id:52) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/MERGE_HEAD &&\n' span_id:53) (Token id:Id.Lit_Chars val:'\ttest_cmp important c2.c\n' span_id:54) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'will overwrite tracked file' span_id:61))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:65) (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:66) (Token id:Id.Lit_Chars val:'\tcp important c2.c &&\n' span_id:67) (Token id:Id.Lit_Chars val:'\tgit add c2.c &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\tgit commit -m important &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\tgit checkout c2\n' span_id:70) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'will not overwrite new file' span_id:77))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:81) (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:82) (Token id:Id.Lit_Chars val:'\tcp important c2.c &&\n' span_id:83) (Token id:Id.Lit_Chars val:'\tgit add c2.c &&\n' span_id:84) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge c2 &&\n' span_id:85) (Token id: Id.Lit_Chars val: '\ttest_path_is_missing .git/MERGE_HEAD &&\n' span_id: 86 ) (Token id:Id.Lit_Chars val:'\ttest_cmp important c2.c\n' span_id:87) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'will not overwrite staged changes' span_id:94))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:98) (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\tcp important c2.c &&\n' span_id:100) (Token id:Id.Lit_Chars val:'\tgit add c2.c &&\n' span_id:101) (Token id:Id.Lit_Chars val:'\trm c2.c &&\n' span_id:102) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge c2 &&\n' span_id:103) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/MERGE_HEAD &&\n' span_id:104) (Token id:Id.Lit_Chars val:'\tgit checkout c2.c &&\n' span_id:105) (Token id:Id.Lit_Chars val:'\ttest_cmp important c2.c\n' span_id:106) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'will not overwrite removed file' span_id:113))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:117) (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:118) (Token id:Id.Lit_Chars val:'\tgit rm c1.c &&\n' span_id:119) (Token id:Id.Lit_Chars val:'\tgit commit -m "rm c1.c" &&\n' span_id:120) (Token id:Id.Lit_Chars val:'\tcp important c1.c &&\n' span_id:121) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge c1a &&\n' span_id:122) (Token id:Id.Lit_Chars val:'\ttest_cmp important c1.c\n' span_id:123) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'will not overwrite re-added file' span_id:130))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:134) (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:135) (Token id:Id.Lit_Chars val:'\tgit rm c1.c &&\n' span_id:136) (Token id:Id.Lit_Chars val:'\tgit commit -m "rm c1.c" &&\n' span_id:137) (Token id:Id.Lit_Chars val:'\tcp important c1.c &&\n' span_id:138) (Token id:Id.Lit_Chars val:'\tgit add c1.c &&\n' span_id:139) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge c1a &&\n' span_id:140) (Token id: Id.Lit_Chars val: '\ttest_path_is_missing .git/MERGE_HEAD &&\n' span_id: 141 ) (Token id:Id.Lit_Chars val:'\ttest_cmp important c1.c\n' span_id:142) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'will not overwrite removed file with staged changes' span_id: 149 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:153) (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:154) (Token id:Id.Lit_Chars val:'\tgit rm c1.c &&\n' span_id:155) (Token id:Id.Lit_Chars val:'\tgit commit -m "rm c1.c" &&\n' span_id:156) (Token id:Id.Lit_Chars val:'\tcp important c1.c &&\n' span_id:157) (Token id:Id.Lit_Chars val:'\tgit add c1.c &&\n' span_id:158) (Token id:Id.Lit_Chars val:'\trm c1.c &&\n' span_id:159) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge c1a &&\n' span_id:160) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/MERGE_HEAD &&\n' span_id:161) (Token id:Id.Lit_Chars val:'\tgit checkout c1.c &&\n' span_id:162) (Token id:Id.Lit_Chars val:'\ttest_cmp important c1.c\n' span_id:163) ) } ) (C {(test_expect_failure)} { (SQ (Token id: Id.Lit_Chars val: 'will not overwrite unstaged changes in renamed file' span_id: 170 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:174) (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:175) (Token id:Id.Lit_Chars val:'\tgit mv c1.c other.c &&\n' span_id:176) (Token id:Id.Lit_Chars val:'\tgit commit -m rename &&\n' span_id:177) (Token id:Id.Lit_Chars val:'\tcp important other.c &&\n' span_id:178) (Token id:Id.Lit_Chars val:'\tgit merge c1a &&\n' span_id:179) (Token id:Id.Lit_Chars val:'\ttest_cmp important other.c\n' span_id:180) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'will not overwrite untracked subtree' span_id:187))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:191) (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:192) (Token id:Id.Lit_Chars val:'\trm -rf sub &&\n' span_id:193) (Token id:Id.Lit_Chars val:'\tmkdir -p sub/f &&\n' span_id:194) (Token id:Id.Lit_Chars val:'\tcp important sub/f/important &&\n' span_id:195) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge sub &&\n' span_id:196) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/MERGE_HEAD &&\n' span_id:197) (Token id:Id.Lit_Chars val:'\ttest_cmp important sub/f/important\n' span_id:198) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:204) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:207) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:208)) (OF) } here_end_span_id: 216 stdin_parts: [ ('error: The following untracked working tree files would be overwritten by merge:\n') ('\tsub\n') ('\tsub2\n') ('Please move or remove them before you merge.\n') ('Aborting\n') ] ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'will not overwrite untracked file in leading path' span_id: 221 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:225) (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:226) (Token id:Id.Lit_Chars val:'\trm -rf sub &&\n' span_id:227) (Token id:Id.Lit_Chars val:'\tcp important sub &&\n' span_id:228) (Token id:Id.Lit_Chars val:'\tcp important sub2 &&\n' span_id:229) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge sub 2>out &&\n' span_id: 230 ) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp out expect &&\n' span_id:231) (Token id: Id.Lit_Chars val: '\ttest_path_is_missing .git/MERGE_HEAD &&\n' span_id: 232 ) (Token id:Id.Lit_Chars val:'\ttest_cmp important sub &&\n' span_id:233) (Token id:Id.Lit_Chars val:'\ttest_cmp important sub2 &&\n' span_id:234) (Token id:Id.Lit_Chars val:'\trm -f sub sub2\n' span_id:235) ) } ) (C {(test_expect_success)} {(SYMLINKS)} { (SQ (Token id: Id.Lit_Chars val: 'will not overwrite untracked symlink in leading path' span_id: 244 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:248) (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:249) (Token id:Id.Lit_Chars val:'\trm -rf sub &&\n' span_id:250) (Token id:Id.Lit_Chars val:'\tmkdir sub2 &&\n' span_id:251) (Token id:Id.Lit_Chars val:'\tln -s sub2 sub &&\n' span_id:252) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge sub &&\n' span_id:253) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/MERGE_HEAD\n' span_id:254) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'will not be confused by symlink in leading path' span_id:261))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:265) (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:266) (Token id:Id.Lit_Chars val:'\trm -rf sub &&\n' span_id:267) (Token id:Id.Lit_Chars val:'\ttest_ln_s_add sub2 sub &&\n' span_id:268) (Token id:Id.Lit_Chars val:'\tgit commit -m ln &&\n' span_id:269) (Token id:Id.Lit_Chars val:'\tgit checkout sub\n' span_id:270) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:276) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:279) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:280)) (OF) } here_end_span_id: 285 stdin_parts: [ ("error: Untracked working tree file 'c0.c' would be overwritten by merge.\n") ('fatal: read-tree failed\n') ] ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'will not overwrite untracked file on unborn branch' span_id: 290 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:294) (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:295) (Token id:Id.Lit_Chars val:'\tgit rm -fr . &&\n' span_id:296) (Token id:Id.Lit_Chars val:'\tgit checkout --orphan new &&\n' span_id:297) (Token id:Id.Lit_Chars val:'\tcp important c0.c &&\n' span_id:298) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge c0 2>out &&\n' span_id: 299 ) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp out expect\n' span_id:300) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'will not overwrite untracked file on unborn branch .git/MERGE_HEAD sanity etc.' span_id: 307 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:311) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm c0.c" &&\n' span_id:312) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/MERGE_HEAD &&\n' span_id:313) (Token id:Id.Lit_Chars val:'\ttest_cmp important c0.c\n' span_id:314) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'failed merge leaves unborn branch in the womb' span_id:321))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:325) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify HEAD\n' span_id: 326 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'set up unborn branch and content' span_id:333))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:337) (Token id: Id.Lit_Chars val: '\tgit symbolic-ref HEAD refs/heads/unborn &&\n' span_id: 338 ) (Token id:Id.Lit_Chars val:'\trm -f .git/index &&\n' span_id:339) (Token id:Id.Lit_Chars val:'\techo foo > tracked-file &&\n' span_id:340) (Token id:Id.Lit_Chars val:'\tgit add tracked-file &&\n' span_id:341) (Token id:Id.Lit_Chars val:'\techo bar > untracked-file\n' span_id:342) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'will not clobber WT/index when merging into unborn' span_id: 349 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:353) (Token id:Id.Lit_Chars val:'\tgit merge master &&\n' span_id:354) (Token id:Id.Lit_Chars val:'\tgrep foo tracked-file &&\n' span_id:355) (Token id:Id.Lit_Chars val:'\tgit show :tracked-file >expect &&\n' span_id:356) (Token id:Id.Lit_Chars val:'\tgrep foo expect &&\n' span_id:357) (Token id:Id.Lit_Chars val:'\tgrep bar untracked-file\n' span_id:358) ) } ) (C {(test_done)}) ] )