(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: { (DQ ('git merge\n') ('\n') ('Testing a custom strategy.\n') ('\n') ("* (HEAD, master) Merge commit 'c3'\n") ('|') ('| * (tag: c3) c3\n') ('* | (tag: c1) c1\n') ('|/\n') ('| * tag: c2) c2\n') ('|/\n') ('* (tag: c0) c0\n') ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'set up custom strategy' span_id:30))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:34) (Token id:Id.Lit_Chars val:'\tcat >git-merge-theirs <<-EOF &&\n' span_id:35) (Token id:Id.Lit_Chars val:'\t#!$SHELL_PATH\n' span_id:36) (Token id: Id.Lit_Chars val: '\teval git read-tree --reset -u \\\\\\$\\$#\n' span_id: 37 ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:38) (Token id:Id.Lit_Chars val:'\n' span_id:39) (Token id:Id.Lit_Chars val:'\tchmod +x git-merge-theirs &&\n' span_id:40) (Token id:Id.Lit_Chars val:'\tPATH=.:$PATH &&\n' span_id:41) (Token id:Id.Lit_Chars val:'\texport PATH\n' span_id:42) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:49))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:53) (Token id:Id.Lit_Chars val:'\ttest_commit c0 c0.c &&\n' span_id:54) (Token id:Id.Lit_Chars val:'\ttest_commit c1 c1.c &&\n' span_id:55) (Token id:Id.Lit_Chars val:'\tgit reset --keep c0 &&\n' span_id:56) (Token id:Id.Lit_Chars val:'\techo c1c1 >c1.c &&\n' span_id:57) (Token id:Id.Lit_Chars val:'\tgit add c1.c &&\n' span_id:58) (Token id:Id.Lit_Chars val:'\ttest_commit c2 c2.c &&\n' span_id:59) (Token id:Id.Lit_Chars val:'\tgit reset --keep c0 &&\n' span_id:60) (Token id:Id.Lit_Chars val:'\ttest_commit c3 c3.c\n' span_id:61) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge c2 with a custom strategy' span_id:68))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:72) (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:73) (Token id:Id.Lit_Chars val:'\n' span_id:74) (Token id:Id.Lit_Chars val:'\tgit rev-parse c1 >head.old &&\n' span_id:75) (Token id:Id.Lit_Chars val:'\tgit rev-parse c2 >second-parent.expected &&\n' span_id:76) (Token id: Id.Lit_Chars val: '\tgit rev-parse c2^{tree} >tree.expected &&\n' span_id: 77 ) (Token id:Id.Lit_Chars val:'\tgit merge -s theirs c2 &&\n' span_id:78) (Token id:Id.Lit_Chars val:'\n' span_id:79) (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD >head.new &&\n' span_id:80) (Token id: Id.Lit_Chars val: '\tgit rev-parse HEAD^1 >first-parent &&\n' span_id: 81 ) (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD^2 >second-parent &&\n' span_id:82) (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD^{tree} >tree &&\n' span_id:83) (Token id:Id.Lit_Chars val:'\tgit update-index --refresh &&\n' span_id:84) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code &&\n' span_id:85) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code c2 HEAD &&\n' span_id:86) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code c2 &&\n' span_id:87) (Token id:Id.Lit_Chars val:'\n' span_id:88) (Token id:Id.Lit_Chars val:'\t! test_cmp head.old head.new &&\n' span_id:89) (Token id:Id.Lit_Chars val:'\ttest_cmp head.old first-parent &&\n' span_id:90) (Token id: Id.Lit_Chars val: '\ttest_cmp second-parent.expected second-parent &&\n' span_id: 91 ) (Token id:Id.Lit_Chars val:'\ttest_cmp tree.expected tree &&\n' span_id:92) (Token id:Id.Lit_Chars val:'\ttest -f c0.c &&\n' span_id:93) (Token id:Id.Lit_Chars val:'\tgrep c1c1 c1.c &&\n' span_id:94) (Token id:Id.Lit_Chars val:'\ttest -f c2.c\n' span_id:95) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'trivial merge with custom strategy' span_id:102))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:106) (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:107) (Token id:Id.Lit_Chars val:'\n' span_id:108) (Token id:Id.Lit_Chars val:'\tgit rev-parse c1 >head.old &&\n' span_id:109) (Token id:Id.Lit_Chars val:'\tgit rev-parse c3 >second-parent.expected &&\n' span_id:110) (Token id: Id.Lit_Chars val: '\tgit rev-parse c3^{tree} >tree.expected &&\n' span_id: 111 ) (Token id:Id.Lit_Chars val:'\tgit merge -s theirs c3 &&\n' span_id:112) (Token id:Id.Lit_Chars val:'\n' span_id:113) (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD >head.new &&\n' span_id:114) (Token id: Id.Lit_Chars val: '\tgit rev-parse HEAD^1 >first-parent &&\n' span_id: 115 ) (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD^2 >second-parent &&\n' span_id:116) (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD^{tree} >tree &&\n' span_id:117) (Token id:Id.Lit_Chars val:'\tgit update-index --refresh &&\n' span_id:118) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code &&\n' span_id:119) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code c3 HEAD &&\n' span_id:120) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code c3 &&\n' span_id:121) (Token id:Id.Lit_Chars val:'\n' span_id:122) (Token id:Id.Lit_Chars val:'\t! test_cmp head.old head.new &&\n' span_id:123) (Token id:Id.Lit_Chars val:'\ttest_cmp head.old first-parent &&\n' span_id:124) (Token id: Id.Lit_Chars val: '\ttest_cmp second-parent.expected second-parent &&\n' span_id: 125 ) (Token id:Id.Lit_Chars val:'\ttest_cmp tree.expected tree &&\n' span_id:126) (Token id:Id.Lit_Chars val:'\ttest -f c0.c &&\n' span_id:127) (Token id:Id.Lit_Chars val:'\t! test -e c1.c &&\n' span_id:128) (Token id:Id.Lit_Chars val:'\ttest -f c3.c\n' span_id:129) ) } ) (C {(test_done)}) ] )