(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'test_description='> name:test_description) op: assign_op.Equal rhs: {(SQ <'rebase topology tests with merges'>)} spids: [4] ) ] redirects: [] ) (C {<.>} {<'./test-lib.sh'>}) (C {<.>} {(DQ ($ Id.VSub_DollarName TEST_DIRECTORY)) <'/lib-rebase.sh'>}) (command.ShFunction name: test_revision_subjects body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'expected='> name:expected) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} spids: [29] ) ] redirects: [] ) (C {<shift>}) (C {<set>} {<-->} { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<git>} {<log>} {<--format> <Id.Lit_Equals '='> <Id.Lit_Other '%'> <s>} {<--no-walk> <Id.Lit_Equals '='> <unsorted>} {(DQ ($ Id.VSub_At '@'))} ) right: <Id.Eof_RParen _> ) } ) (C {<test>} {(DQ ($ Id.VSub_DollarName expected))} {<Id.Lit_Equals '='>} {(DQ ($ Id.VSub_Star '*'))} ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (C {<test_expect_success>} {(SQ <'setup of non-linear-history'>)} { (SQ <'\n'> <'\ttest_commit a &&\n'> <'\ttest_commit b &&\n'> <'\ttest_commit c &&\n'> <'\tgit checkout b &&\n'> <'\ttest_commit d &&\n'> <'\ttest_commit e &&\n'> <'\n'> <'\tgit checkout c &&\n'> <'\ttest_commit g &&\n'> <'\trevert h g &&\n'> <'\tgit checkout d &&\n'> <'\tcherry_pick gp g &&\n'> <'\ttest_commit i &&\n'> <'\tgit checkout b &&\n'> <'\ttest_commit f &&\n'> <'\n'> <'\tgit checkout d &&\n'> <'\ttest_commit n &&\n'> <'\ttest_commit o &&\n'> <'\ttest_merge w e &&\n'> <'\ttest_merge v c &&\n'> <'\tgit checkout o &&\n'> <'\ttest_commit z\n'> ) } ) (command.ShFunction name: test_run_rebase body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'result='> name:result) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} spids: [140] ) ] redirects: [] ) (C {<shift>}) (C {<test_expect_> ($ Id.VSub_DollarName result)} {(DQ <'rebase '> ($ Id.VSub_Star '*') <' after merge from upstream'>)} { (DQ <'\n'> <'\t\treset_rebase &&\n'> <'\t\tgit rebase '> ($ Id.VSub_Star '*') <' e w &&\n'> <'\t\ttest_cmp_rev e HEAD~2 &&\n'> <'\t\ttest_linear_range \'n o\' e..\n'> <'\t'> ) } ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (C {<test_run_rebase>} {<success>} {(SQ )}) (C {<test_run_rebase>} {<success>} {<-m>}) (C {<test_run_rebase>} {<success>} {<-i>}) (command.ShFunction name: test_run_rebase body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'result='> name:result) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} spids: [197] ) ] redirects: [] ) (C {<shift>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'expected='> name:expected) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} spids: [204] ) ] redirects: [] ) (C {<shift>}) (C {<test_expect_> ($ Id.VSub_DollarName result)} { (DQ <'rebase '> ($ Id.VSub_Star '*') <' of non-linear history is linearized in place'>) } { (DQ <'\n'> <'\t\treset_rebase &&\n'> <'\t\tgit rebase '> ($ Id.VSub_Star '*') <' d w &&\n'> <'\t\ttest_cmp_rev d HEAD~3 &&\n'> <'\t\ttest_linear_range '> ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (DQ ($ Id.VSub_DollarName expected)) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (DQ <' d..\n'> <'\t'>) } ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (C {<test_run_rebase>} {<success>} {(SQ <'e n o'>)} {(SQ )}) (C {<test_run_rebase>} {<success>} {(SQ <'e n o'>)} {<-m>}) (C {<test_run_rebase>} {<success>} {(SQ <'n o e'>)} {<-i>}) (command.ShFunction name: test_run_rebase body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'result='> name:result) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} spids: [284] ) ] redirects: [] ) (C {<shift>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'expected='> name:expected) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} spids: [291] ) ] redirects: [] ) (C {<shift>}) (C {<test_expect_> ($ Id.VSub_DollarName result)} { (DQ <'rebase '> ($ Id.VSub_Star '*') <' of non-linear history is linearized upstream'>) } { (DQ <'\n'> <'\t\treset_rebase &&\n'> <'\t\tgit rebase '> ($ Id.VSub_Star '*') <' c w &&\n'> <'\t\ttest_cmp_rev c HEAD~4 &&\n'> <'\t\ttest_linear_range '> ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (DQ ($ Id.VSub_DollarName expected)) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (DQ <' c..\n'> <'\t'>) } ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (C {<test_run_rebase>} {<success>} {(SQ <'d e n o'>)} {(SQ )}) (C {<test_run_rebase>} {<success>} {(SQ <'d e n o'>)} {<-m>}) (C {<test_run_rebase>} {<success>} {(SQ <'d n o e'>)} {<-i>}) (command.ShFunction name: test_run_rebase body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'result='> name:result) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} spids: [371] ) ] redirects: [] ) (C {<shift>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'expected='> name:expected) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} spids: [378] ) ] redirects: [] ) (C {<shift>}) (C {<test_expect_> ($ Id.VSub_DollarName result)} { (DQ <'rebase '> ($ Id.VSub_Star '*') <' of non-linear history with merges after upstream merge is linearized'> ) } { (DQ <'\n'> <'\t\treset_rebase &&\n'> <'\t\tgit rebase '> ($ Id.VSub_Star '*') <' c v &&\n'> <'\t\ttest_cmp_rev c HEAD~4 &&\n'> <'\t\ttest_linear_range '> ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (DQ ($ Id.VSub_DollarName expected)) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (DQ <' c..\n'> <'\t'>) } ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (C {<test_run_rebase>} {<success>} {(SQ <'d e n o'>)} {(SQ )}) (C {<test_run_rebase>} {<success>} {(SQ <'d e n o'>)} {<-m>}) (C {<test_run_rebase>} {<success>} {(SQ <'d n o e'>)} {<-i>}) (C {<test_expect_success>} {(DQ <'rebase -p is no-op in non-linear history'>)} {(DQ <'\n'> <'\treset_rebase &&\n'> <'\tgit rebase -p d w &&\n'> <'\ttest_cmp_rev w HEAD\n'>)} ) (C {<test_expect_success>} {(DQ <'rebase -p is no-op when base inside second parent'>)} {(DQ <'\n'> <'\treset_rebase &&\n'> <'\tgit rebase -p e w &&\n'> <'\ttest_cmp_rev w HEAD\n'>)} ) (C {<test_expect_failure>} {(DQ <'rebase -p --root on non-linear history is a no-op'>)} { (DQ <'\n'> <'\treset_rebase &&\n'> <'\tgit rebase -p --root w &&\n'> <'\ttest_cmp_rev w HEAD\n'>) } ) (C {<test_expect_success>} {(DQ <'rebase -p re-creates merge from side branch'>)} { (DQ <'\n'> <'\treset_rebase &&\n'> <'\tgit rebase -p z w &&\n'> <'\ttest_cmp_rev z HEAD^ &&\n'> <'\ttest_cmp_rev w^2 HEAD^2\n'> ) } ) (C {<test_expect_success>} {(DQ <'rebase -p re-creates internal merge'>)} { (DQ <'\n'> <'\treset_rebase &&\n'> <'\tgit rebase -p c w &&\n'> <'\ttest_cmp_rev c HEAD~4 &&\n'> <'\ttest_cmp_rev HEAD^2^ HEAD~3 &&\n'> <'\ttest_revision_subjects \'d n e o w\' HEAD~3 HEAD~2 HEAD^2 HEAD^ HEAD\n'> ) } ) (C {<test_expect_success>} {(DQ <'rebase -p can re-create two branches on onto'>)} { (DQ <'\n'> <'\treset_rebase &&\n'> <'\tgit rebase -p --onto c d w &&\n'> <'\ttest_cmp_rev c HEAD~3 &&\n'> <'\ttest_cmp_rev c HEAD^2^ &&\n'> <'\ttest_revision_subjects \'n e o w\' HEAD~2 HEAD^2 HEAD^ HEAD\n'> ) } ) (C {<test_expect_success>} {(SQ <'setup of non-linear-history for patch-equivalence tests'>)} {(SQ <'\n'> <'\tgit checkout e &&\n'> <'\ttest_merge u i\n'>)} ) (C {<test_expect_success>} {(DQ <'rebase -p re-creates history around dropped commit matching upstream'>)} { (DQ <'\n'> <'\treset_rebase &&\n'> <'\tgit rebase -p h u &&\n'> <'\ttest_cmp_rev h HEAD~3 &&\n'> <'\ttest_cmp_rev HEAD^2^ HEAD~2 &&\n'> <'\ttest_revision_subjects \'d i e u\' HEAD~2 HEAD^2 HEAD^ HEAD\n'> ) } ) (C {<test_expect_success>} {(DQ <'rebase -p --onto in merged history drops patches in upstream'>)} { (DQ <'\n'> <'\treset_rebase &&\n'> <'\tgit rebase -p --onto f h u &&\n'> <'\ttest_cmp_rev f HEAD~3 &&\n'> <'\ttest_cmp_rev HEAD^2^ HEAD~2 &&\n'> <'\ttest_revision_subjects \'d i e u\' HEAD~2 HEAD^2 HEAD^ HEAD\n'> ) } ) (C {<test_expect_success>} {(DQ <'rebase -p --onto in merged history does not drop patches in onto'>)} { (DQ <'\n'> <'\treset_rebase &&\n'> <'\tgit rebase -p --onto h f u &&\n'> <'\ttest_cmp_rev h HEAD~3 &&\n'> <'\ttest_cmp_rev HEAD^2~2 HEAD~2 &&\n'> <'\ttest_revision_subjects \'d gp i e u\' HEAD~2 HEAD^2^ HEAD^2 HEAD^ HEAD\n'> ) } ) (C {<test_expect_success>} {(SQ <'setup of non-linear-history for dropping whole side'>)} { (SQ <'\n'> <'\tgit checkout gp &&\n'> <'\ttest_merge s e &&\n'> <'\tgit checkout e &&\n'> <'\ttest_merge t gp\n'> ) } ) (C {<test_expect_failure>} {(DQ <'rebase -p drops merge commit when entire first-parent side is dropped'>)} { (DQ <'\n'> <'\treset_rebase &&\n'> <'\tgit rebase -p h s &&\n'> <'\ttest_cmp_rev h HEAD~2 &&\n'> <'\ttest_linear_range \'d e\' h..\n'> ) } ) (C {<test_expect_success>} {(DQ <'rebase -p drops merge commit when entire second-parent side is dropped'>)} { (DQ <'\n'> <'\treset_rebase &&\n'> <'\tgit rebase -p h t &&\n'> <'\ttest_cmp_rev h HEAD~2 &&\n'> <'\ttest_linear_range \'d e\' h..\n'> ) } ) (C {<test_expect_success>} {(SQ <'setup of non-linear-history for empty commits'>)} { (SQ <'\n'> <'\tgit checkout n &&\n'> <'\tgit merge --no-commit e &&\n'> <'\tgit reset n . &&\n'> <'\tgit commit -m r &&\n'> <'\tgit reset --hard &&\n'> <'\tgit clean -f &&\n'> <'\tgit tag r\n'> ) } ) (C {<test_expect_success>} {(DQ <'rebase -p re-creates empty internal merge commit'>)} { (DQ <'\n'> <'\treset_rebase &&\n'> <'\tgit rebase -p c r &&\n'> <'\ttest_cmp_rev c HEAD~3 &&\n'> <'\ttest_cmp_rev HEAD^2^ HEAD~2 &&\n'> <'\ttest_revision_subjects \'d e n r\' HEAD~2 HEAD^2 HEAD^ HEAD\n'> ) } ) (C {<test_expect_success>} {(DQ <'rebase -p re-creates empty merge commit'>)} { (DQ <'\n'> <'\treset_rebase &&\n'> <'\tgit rebase -p o r &&\n'> <'\ttest_cmp_rev e HEAD^2 &&\n'> <'\ttest_cmp_rev o HEAD^ &&\n'> <'\ttest_revision_subjects \'r\' HEAD\n'> ) } ) (C {<test_done>}) ] )