(command.CommandList children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:test_description) op: Equal rhs: {(SQ <'git rebase --merge test'>)} ) ] ) (C {(.)} {(./test-lib.sh)}) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:T) op: Equal rhs: {(DQ ('A quick brown fox\n') ('jumps over the lazy dog.'))} ) ] ) (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 ($ VSub_DollarName '$i') (' ') ($ VSub_DollarName '$T'))})] ) redirects: [(redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(original)})] ) (C {(test_expect_success)} {(setup)} { (SQ <'\n'> <'\tgit add original &&\n'> <'\tgit commit -m"initial" &&\n'> <'\tgit branch side &&\n'> <'\techo "11 $T" >>original &&\n'> <'\tgit commit -a -m"master updates a bit." &&\n'> <'\n'> <'\techo "12 $T" >>original &&\n'> <'\tgit commit -a -m"master updates a bit more." &&\n'> <'\n'> <'\tgit checkout side &&\n'> <'\t(echo "0 $T" ; cat original) >renamed &&\n'> <'\tgit add renamed &&\n'> <'\tgit update-index --force-remove original &&\n'> <'\tgit commit -a -m"side renames and edits." &&\n'> <'\n'> <'\ttr "[a-z]" "[A-Z]" <original >newfile &&\n'> <'\tgit add newfile &&\n'> <'\tgit commit -a -m"side edits further." &&\n'> <'\tgit branch second-side &&\n'> <'\n'> <'\ttr "[a-m]" "[A-M]" <original >newfile &&\n'> <'\trm -f original &&\n'> <'\tgit commit -a -m"side edits once again." &&\n'> <'\n'> <'\tgit branch test-rebase side &&\n'> <'\tgit branch test-rebase-pick side &&\n'> <'\tgit branch test-reference-pick side &&\n'> <'\tgit branch test-conflicts side &&\n'> <'\tgit checkout -b test-merge side\n'> ) } ) (C {(test_expect_success)} {(SQ <'reference merge'>)} {(SQ <'\n'> <'\tgit merge -s recursive -m "reference merge" master\n'>)} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PRE_REBASE) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(git)} {(rev-parse)} {(test-rebase)})] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (C {(test_expect_success)} {(rebase)} {(SQ <'\n'> <'\tgit checkout test-rebase &&\n'> <'\tGIT_TRACE=1 git rebase --merge master\n'>)} ) (C {(test_expect_success)} {(SQ <'test-rebase@{1} is pre rebase'>)} {(SQ <'\n'> <'\ttest $PRE_REBASE = $(git rev-parse test-rebase@{1})\n'>)} ) (C {(test_expect_success)} {(SQ <'merge and rebase should match'>)} { (SQ <'\n'> <'\tgit diff-tree -r test-rebase test-merge >difference &&\n'> <'\tif test -s difference\n'> <'\tthen\n'> <'\t\tcat difference\n'> <'\t\t(exit 1)\n'> <'\telse\n'> <'\t\techo happy\n'> <'\tfi\n'> ) } ) (C {(test_expect_success)} {(SQ <'rebase the other way'>)} {(SQ <'\n'> <'\tgit reset --hard master &&\n'> <'\tgit rebase --merge side\n'>)} ) (C {(test_expect_success)} {(SQ <'rebase -Xtheirs'>)} { (SQ <'\n'> <'\tgit checkout -b conflicting master~2 &&\n'> <'\techo "AB $T" >> original &&\n'> <'\tgit commit -mconflicting original &&\n'> <'\tgit rebase -Xtheirs master &&\n'> <'\tgrep AB original &&\n'> <'\t! grep 11 original\n'> ) } ) (C {(test_expect_success)} {(SQ <'rebase -Xtheirs from orphan'>)} { (SQ <'\n'> <'\tgit checkout --orphan orphan-conflicting master~2 &&\n'> <'\techo "AB $T" >> original &&\n'> <'\tgit commit -morphan-conflicting original &&\n'> <'\tgit rebase -Xtheirs master &&\n'> <'\tgrep AB original &&\n'> <'\t! grep 11 original\n'> ) } ) (C {(test_expect_success)} {(SQ <'merge and rebase should match'>)} { (SQ <'\n'> <'\tgit diff-tree -r test-rebase test-merge >difference &&\n'> <'\tif test -s difference\n'> <'\tthen\n'> <'\t\tcat difference\n'> <'\t\t(exit 1)\n'> <'\telse\n'> <'\t\techo happy\n'> <'\tfi\n'> ) } ) (C {(test_expect_success)} {(SQ <'picking rebase'>)} { (SQ <'\n'> <'\tgit reset --hard side &&\n'> <'\tgit rebase --merge --onto master side^^ &&\n'> <'\tmb=$(git merge-base master HEAD) &&\n'> <'\tif test "$mb" = "$(git rev-parse master)"\n'> <'\tthen\n'> <'\t\techo happy\n'> <'\telse\n'> <'\t\tgit show-branch\n'> <'\t\t(exit 1)\n'> <'\tfi &&\n'> <'\tf=$(git diff-tree --name-only HEAD^ HEAD) &&\n'> <'\tg=$(git diff-tree --name-only HEAD^^ HEAD^) &&\n'> <'\tcase "$f,$g" in\n'> <'\tnewfile,newfile)\n'> <'\t\techo happy ;;\n'> <'\t*)\n'> <'\t\techo "$f"\n'> <'\t\techo "$g"\n'> <'\t\t(exit 1)\n'> <'\tesac\n'> ) } ) (C {(test_expect_success)} {(SQ <'rebase -s funny -Xopt'>)} { (SQ <'\n'> <'\ttest_when_finished "rm -fr test-bin funny.was.run" &&\n'> <'\tmkdir test-bin &&\n'> <'\tcat >test-bin/git-merge-funny <<-EOF &&\n'> <'\t#!$SHELL_PATH\n'> <'\tcase "\\$1" in --opt) ;; *) exit 2 ;; esac\n'> <'\tshift &&\n'> <'\t>funny.was.run &&\n'> <'\texec git merge-recursive "\\$@"\n'> <'\tEOF\n'> <'\tchmod +x test-bin/git-merge-funny &&\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout -b test-funny master^ &&\n'> <'\ttest_commit funny &&\n'> <'\t(\n'> <'\t\tPATH=./test-bin:$PATH\n'> <'\t\tgit rebase -s funny -Xopt master\n'> <'\t) &&\n'> <'\ttest -f funny.was.run\n'> ) } ) (C {(test_expect_success)} {(SQ <'rebase --skip works with two conflicts in a row'>)} { (SQ <'\n'> <'\tgit checkout second-side &&\n'> <'\ttr "[A-Z]" "[a-z]" <newfile >tmp &&\n'> <'\tmv tmp newfile &&\n'> <'\tgit commit -a -m"edit conflicting with side" &&\n'> <'\ttr "[d-f]" "[D-F]" <newfile >tmp &&\n'> <'\tmv tmp newfile &&\n'> <'\tgit commit -a -m"another edit conflicting with side" &&\n'> <'\ttest_must_fail git rebase --merge test-conflicts &&\n'> <'\ttest_must_fail git rebase --skip &&\n'> <'\tgit rebase --skip\n'> ) } ) (C {(test_done)}) ] )