(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description spids:[4]) op: Equal rhs: {(SQ <'rebase topology tests with merges'>)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (C {(.)} {(DQ ($ VSub_Name '$TEST_DIRECTORY')) (/lib-rebase.sh)}) (FuncDef name: test_revision_subjects body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:expected spids:[29]) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [29] ) ] spids: [29] ) (C {(shift)}) (C {(set)} {(--)} { (CommandSubPart command_list: (CommandList children: [ (C {(git)} {(log)} {(--format) (Lit_Other '=') (Lit_Other '%') (s)} {(--no-walk) (Lit_Other '=') (unsorted)} {(DQ ($ VSub_At '$@'))} ) ] ) left_token: <Left_CommandSub '$('> spids: [42 59] ) } ) (C {(test)} {(DQ ($ VSub_Name '$expected'))} {(Lit_Other '=')} {(DQ ($ VSub_Star '$*'))}) ] spids: [26] ) spids: [21 25] ) (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'> ) } ) (FuncDef name: test_run_rebase body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:result spids:[140]) op: Equal rhs: {($ VSub_Number '$1')} spids: [140] ) ] spids: [140] ) (C {(shift)}) (C {(test_expect_) ($ VSub_Name '$result')} {(DQ ('rebase ') ($ VSub_Star '$*') (' after merge from upstream'))} { (DQ ('\n') ('\t\treset_rebase &&\n') ('\t\tgit rebase ') ($ VSub_Star '$*') (' e w &&\n') ('\t\ttest_cmp_rev e HEAD~2 &&\n') ("\t\ttest_linear_range 'n o' e..\n") ('\t') ) } ) ] spids: [137] ) spids: [132 136] ) (C {(test_run_rebase)} {(success)} {(SQ )}) (C {(test_run_rebase)} {(success)} {(-m)}) (C {(test_run_rebase)} {(success)} {(-i)}) (FuncDef name: test_run_rebase body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:result spids:[197]) op: Equal rhs: {($ VSub_Number '$1')} spids: [197] ) ] spids: [197] ) (C {(shift)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:expected spids:[204]) op: Equal rhs: {($ VSub_Number '$1')} spids: [204] ) ] spids: [204] ) (C {(shift)}) (C {(test_expect_) ($ VSub_Name '$result')} {(DQ ('rebase ') ($ VSub_Star '$*') (' of non-linear history is linearized in place'))} { (DQ ('\n') ('\t\treset_rebase &&\n') ('\t\tgit rebase ') ($ VSub_Star '$*') (' d w &&\n') ('\t\ttest_cmp_rev d HEAD~3 &&\n') ('\t\ttest_linear_range ') ) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (DQ ($ VSub_Name '$expected')) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (DQ (' d..\n') ('\t')) } ) ] spids: [194] ) spids: [189 193] ) (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)}) (FuncDef name: test_run_rebase body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:result spids:[284]) op: Equal rhs: {($ VSub_Number '$1')} spids: [284] ) ] spids: [284] ) (C {(shift)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:expected spids:[291]) op: Equal rhs: {($ VSub_Number '$1')} spids: [291] ) ] spids: [291] ) (C {(shift)}) (C {(test_expect_) ($ VSub_Name '$result')} {(DQ ('rebase ') ($ VSub_Star '$*') (' of non-linear history is linearized upstream'))} { (DQ ('\n') ('\t\treset_rebase &&\n') ('\t\tgit rebase ') ($ VSub_Star '$*') (' c w &&\n') ('\t\ttest_cmp_rev c HEAD~4 &&\n') ('\t\ttest_linear_range ') ) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (DQ ($ VSub_Name '$expected')) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (DQ (' c..\n') ('\t')) } ) ] spids: [281] ) spids: [276 280] ) (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)}) (FuncDef name: test_run_rebase body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:result spids:[371]) op: Equal rhs: {($ VSub_Number '$1')} spids: [371] ) ] spids: [371] ) (C {(shift)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:expected spids:[378]) op: Equal rhs: {($ VSub_Number '$1')} spids: [378] ) ] spids: [378] ) (C {(shift)}) (C {(test_expect_) ($ VSub_Name '$result')} { (DQ ('rebase ') ($ VSub_Star '$*') (' of non-linear history with merges after upstream merge is linearized') ) } { (DQ ('\n') ('\t\treset_rebase &&\n') ('\t\tgit rebase ') ($ VSub_Star '$*') (' c v &&\n') ('\t\ttest_cmp_rev c HEAD~4 &&\n') ('\t\ttest_linear_range ') ) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (DQ ($ VSub_Name '$expected')) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (DQ (' c..\n') ('\t')) } ) ] spids: [368] ) spids: [363 367] ) (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)}) ] )