(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 rebase --merge test' span_id:15))} spids: [13] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:T) op: assign_op.Equal rhs: {(DQ ('A quick brown fox\n') ('jumps over the lazy dog.'))} spids: [24] ) ] ) (command.ForEach iter_name: i iter_words: [{(1)} {(2)} {(3)} {(4)} {(5)} {(6)} {(7)} {(8)} {(9)} {(10)}] do_arg_iter: F body: (command.DoGroup children: [(C {(echo)} {(DQ ($ Id.VSub_DollarName '$i') (' ') ($ Id.VSub_DollarName '$T'))})] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:69) fd: -1 arg_word: {(original)} ) ] ) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:78) (Token id:Id.Lit_Chars val:'\tgit add original &&\n' span_id:79) (Token id:Id.Lit_Chars val:'\tgit commit -m"initial" &&\n' span_id:80) (Token id:Id.Lit_Chars val:'\tgit branch side &&\n' span_id:81) (Token id:Id.Lit_Chars val:'\techo "11 $T" >>original &&\n' span_id:82) (Token id: Id.Lit_Chars val: '\tgit commit -a -m"master updates a bit." &&\n' span_id: 83 ) (Token id:Id.Lit_Chars val:'\n' span_id:84) (Token id:Id.Lit_Chars val:'\techo "12 $T" >>original &&\n' span_id:85) (Token id:Id.Lit_Chars val:'\tgit commit -a -m"master updates a bit more." &&\n' span_id:86) (Token id:Id.Lit_Chars val:'\n' span_id:87) (Token id:Id.Lit_Chars val:'\tgit checkout side &&\n' span_id:88) (Token id: Id.Lit_Chars val: '\t(echo "0 $T" ; cat original) >renamed &&\n' span_id: 89 ) (Token id:Id.Lit_Chars val:'\tgit add renamed &&\n' span_id:90) (Token id: Id.Lit_Chars val: '\tgit update-index --force-remove original &&\n' span_id: 91 ) (Token id:Id.Lit_Chars val:'\tgit commit -a -m"side renames and edits." &&\n' span_id:92) (Token id:Id.Lit_Chars val:'\n' span_id:93) (Token id:Id.Lit_Chars val:'\ttr "[a-z]" "[A-Z]" <original >newfile &&\n' span_id:94) (Token id:Id.Lit_Chars val:'\tgit add newfile &&\n' span_id:95) (Token id:Id.Lit_Chars val:'\tgit commit -a -m"side edits further." &&\n' span_id:96) (Token id:Id.Lit_Chars val:'\tgit branch second-side &&\n' span_id:97) (Token id:Id.Lit_Chars val:'\n' span_id:98) (Token id: Id.Lit_Chars val: '\ttr "[a-m]" "[A-M]" <original >newfile &&\n' span_id: 99 ) (Token id:Id.Lit_Chars val:'\trm -f original &&\n' span_id:100) (Token id: Id.Lit_Chars val: '\tgit commit -a -m"side edits once again." &&\n' span_id: 101 ) (Token id:Id.Lit_Chars val:'\n' span_id:102) (Token id:Id.Lit_Chars val:'\tgit branch test-rebase side &&\n' span_id:103) (Token id:Id.Lit_Chars val:'\tgit branch test-rebase-pick side &&\n' span_id:104) (Token id: Id.Lit_Chars val: '\tgit branch test-reference-pick side &&\n' span_id: 105 ) (Token id:Id.Lit_Chars val:'\tgit branch test-conflicts side &&\n' span_id:106) (Token id:Id.Lit_Chars val:'\tgit checkout -b test-merge side\n' span_id:107) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'reference merge' span_id:114))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:118) (Token id: Id.Lit_Chars val: '\tgit merge -s recursive -m "reference merge" master\n' span_id: 119 ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PRE_REBASE) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:124) command_list: (command.CommandList children: [(C {(git)} {(rev-parse)} {(test-rebase)})] ) ) } spids: [123] ) ] ) (C {(test_expect_success)} {(rebase)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:137) (Token id:Id.Lit_Chars val:'\tgit checkout test-rebase &&\n' span_id:138) (Token id:Id.Lit_Chars val:'\tGIT_TRACE=1 git rebase --merge master\n' span_id:139) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'test-rebase@{1} is pre rebase' span_id:146))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:150) (Token id: Id.Lit_Chars val: '\ttest $PRE_REBASE = $(git rev-parse test-rebase@{1})\n' span_id: 151 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge and rebase should match' span_id:158))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:162) (Token id: Id.Lit_Chars val: '\tgit diff-tree -r test-rebase test-merge >difference &&\n' span_id: 163 ) (Token id:Id.Lit_Chars val:'\tif test -s difference\n' span_id:164) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:165) (Token id:Id.Lit_Chars val:'\t\tcat difference\n' span_id:166) (Token id:Id.Lit_Chars val:'\t\t(exit 1)\n' span_id:167) (Token id:Id.Lit_Chars val:'\telse\n' span_id:168) (Token id:Id.Lit_Chars val:'\t\techo happy\n' span_id:169) (Token id:Id.Lit_Chars val:'\tfi\n' span_id:170) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rebase the other way' span_id:177))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:181) (Token id:Id.Lit_Chars val:'\tgit reset --hard master &&\n' span_id:182) (Token id:Id.Lit_Chars val:'\tgit rebase --merge side\n' span_id:183) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rebase -Xtheirs' span_id:190))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:194) (Token id: Id.Lit_Chars val: '\tgit checkout -b conflicting master~2 &&\n' span_id: 195 ) (Token id:Id.Lit_Chars val:'\techo "AB $T" >> original &&\n' span_id:196) (Token id: Id.Lit_Chars val: '\tgit commit -mconflicting original &&\n' span_id: 197 ) (Token id:Id.Lit_Chars val:'\tgit rebase -Xtheirs master &&\n' span_id:198) (Token id:Id.Lit_Chars val:'\tgrep AB original &&\n' span_id:199) (Token id:Id.Lit_Chars val:'\t! grep 11 original\n' span_id:200) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rebase -Xtheirs from orphan' span_id:207))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:211) (Token id: Id.Lit_Chars val: '\tgit checkout --orphan orphan-conflicting master~2 &&\n' span_id: 212 ) (Token id:Id.Lit_Chars val:'\techo "AB $T" >> original &&\n' span_id:213) (Token id: Id.Lit_Chars val: '\tgit commit -morphan-conflicting original &&\n' span_id: 214 ) (Token id:Id.Lit_Chars val:'\tgit rebase -Xtheirs master &&\n' span_id:215) (Token id:Id.Lit_Chars val:'\tgrep AB original &&\n' span_id:216) (Token id:Id.Lit_Chars val:'\t! grep 11 original\n' span_id:217) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge and rebase should match' span_id:224))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:228) (Token id: Id.Lit_Chars val: '\tgit diff-tree -r test-rebase test-merge >difference &&\n' span_id: 229 ) (Token id:Id.Lit_Chars val:'\tif test -s difference\n' span_id:230) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:231) (Token id:Id.Lit_Chars val:'\t\tcat difference\n' span_id:232) (Token id:Id.Lit_Chars val:'\t\t(exit 1)\n' span_id:233) (Token id:Id.Lit_Chars val:'\telse\n' span_id:234) (Token id:Id.Lit_Chars val:'\t\techo happy\n' span_id:235) (Token id:Id.Lit_Chars val:'\tfi\n' span_id:236) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'picking rebase' span_id:243))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:247) (Token id:Id.Lit_Chars val:'\tgit reset --hard side &&\n' span_id:248) (Token id:Id.Lit_Chars val:'\tgit rebase --merge --onto master side^^ &&\n' span_id:249) (Token id:Id.Lit_Chars val:'\tmb=$(git merge-base master HEAD) &&\n' span_id:250) (Token id:Id.Lit_Chars val:'\tif test "$mb" = "$(git rev-parse master)"\n' span_id:251) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:252) (Token id:Id.Lit_Chars val:'\t\techo happy\n' span_id:253) (Token id:Id.Lit_Chars val:'\telse\n' span_id:254) (Token id:Id.Lit_Chars val:'\t\tgit show-branch\n' span_id:255) (Token id:Id.Lit_Chars val:'\t\t(exit 1)\n' span_id:256) (Token id:Id.Lit_Chars val:'\tfi &&\n' span_id:257) (Token id: Id.Lit_Chars val: '\tf=$(git diff-tree --name-only HEAD^ HEAD) &&\n' span_id: 258 ) (Token id:Id.Lit_Chars val:'\tg=$(git diff-tree --name-only HEAD^^ HEAD^) &&\n' span_id:259) (Token id:Id.Lit_Chars val:'\tcase "$f,$g" in\n' span_id:260) (Token id:Id.Lit_Chars val:'\tnewfile,newfile)\n' span_id:261) (Token id:Id.Lit_Chars val:'\t\techo happy ;;\n' span_id:262) (Token id:Id.Lit_Chars val:'\t*)\n' span_id:263) (Token id:Id.Lit_Chars val:'\t\techo "$f"\n' span_id:264) (Token id:Id.Lit_Chars val:'\t\techo "$g"\n' span_id:265) (Token id:Id.Lit_Chars val:'\t\t(exit 1)\n' span_id:266) (Token id:Id.Lit_Chars val:'\tesac\n' span_id:267) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rebase -s funny -Xopt' span_id:274))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:278) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -fr test-bin funny.was.run" &&\n' span_id: 279 ) (Token id:Id.Lit_Chars val:'\tmkdir test-bin &&\n' span_id:280) (Token id: Id.Lit_Chars val: '\tcat >test-bin/git-merge-funny <<-EOF &&\n' span_id: 281 ) (Token id:Id.Lit_Chars val:'\t#!$SHELL_PATH\n' span_id:282) (Token id: Id.Lit_Chars val: '\tcase "\\$1" in --opt) ;; *) exit 2 ;; esac\n' span_id: 283 ) (Token id:Id.Lit_Chars val:'\tshift &&\n' span_id:284) (Token id:Id.Lit_Chars val:'\t>funny.was.run &&\n' span_id:285) (Token id:Id.Lit_Chars val:'\texec git merge-recursive "\\$@"\n' span_id:286) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:287) (Token id:Id.Lit_Chars val:'\tchmod +x test-bin/git-merge-funny &&\n' span_id:288) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:289) (Token id:Id.Lit_Chars val:'\tgit checkout -b test-funny master^ &&\n' span_id:290) (Token id:Id.Lit_Chars val:'\ttest_commit funny &&\n' span_id:291) (Token id:Id.Lit_Chars val:'\t(\n' span_id:292) (Token id:Id.Lit_Chars val:'\t\tPATH=./test-bin:$PATH\n' span_id:293) (Token id:Id.Lit_Chars val:'\t\tgit rebase -s funny -Xopt master\n' span_id:294) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:295) (Token id:Id.Lit_Chars val:'\ttest -f funny.was.run\n' span_id:296) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rebase --skip works with two conflicts in a row' span_id:303))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:307) (Token id:Id.Lit_Chars val:'\tgit checkout second-side &&\n' span_id:308) (Token id:Id.Lit_Chars val:'\ttr "[A-Z]" "[a-z]" <newfile >tmp &&\n' span_id:309) (Token id:Id.Lit_Chars val:'\tmv tmp newfile &&\n' span_id:310) (Token id:Id.Lit_Chars val:'\tgit commit -a -m"edit conflicting with side" &&\n' span_id:311) (Token id:Id.Lit_Chars val:'\ttr "[d-f]" "[D-F]" <newfile >tmp &&\n' span_id:312) (Token id:Id.Lit_Chars val:'\tmv tmp newfile &&\n' span_id:313) (Token id: Id.Lit_Chars val: '\tgit commit -a -m"another edit conflicting with side" &&\n' span_id: 314 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rebase --merge test-conflicts &&\n' span_id:315) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rebase --skip &&\n' span_id:316) (Token id:Id.Lit_Chars val:'\tgit rebase --skip\n' span_id:317) ) } ) (C {(test_done)}) ] )