(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"git rebase with its hook(s)">)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(setup)} { (SQ <"\n"> <"\techo hello >file &&\n"> <"\tgit add file &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m initial &&\n"> <"\techo goodbye >file &&\n"> <"\tgit add file &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m second &&\n"> <"\tgit checkout -b side HEAD^ &&\n"> <"\techo world >git &&\n"> <"\tgit add git &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m side &&\n"> <"\tgit checkout master &&\n"> <"\tgit log --pretty=oneline --abbrev-commit --graph --all &&\n"> <"\tgit branch test side\n"> ) } ) (C {(test_expect_success)} {(SQ <rebase>)} { (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> <"\tgit rebase master &&\n"> <"\ttest \"z$(cat git)\" = zworld\n"> ) } ) (C {(test_expect_success)} {(SQ <"rebase -i">)} { (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> <"\tEDITOR=true git rebase -i master &&\n"> <"\ttest \"z$(cat git)\" = zworld\n"> ) } ) (C {(test_expect_success)} {(SQ <"setup pre-rebase hook">)} { (SQ <"\n"> <"\tmkdir -p .git/hooks &&\n"> <"\tcat >.git/hooks/pre-rebase <<EOF &&\n"> <"#!$SHELL_PATH\n"> <"echo \"\\$1,\\$2\" >.git/PRE-REBASE-INPUT\n"> <"EOF\n"> <"\tchmod +x .git/hooks/pre-rebase\n"> ) } ) (C {(test_expect_success)} {(SQ <"pre-rebase hook gets correct input (1)">)} { (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> <"\tgit rebase master &&\n"> <"\ttest \"z$(cat git)\" = zworld &&\n"> <"\ttest \"z$(cat .git/PRE-REBASE-INPUT)\" = zmaster,\n"> <"\n"> ) } ) (C {(test_expect_success)} {(SQ <"pre-rebase hook gets correct input (2)">)} { (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> <"\tgit rebase master test &&\n"> <"\ttest \"z$(cat git)\" = zworld &&\n"> <"\ttest \"z$(cat .git/PRE-REBASE-INPUT)\" = zmaster,test\n"> ) } ) (C {(test_expect_success)} {(SQ <"pre-rebase hook gets correct input (3)">)} { (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> <"\tgit checkout master &&\n"> <"\tgit rebase master test &&\n"> <"\ttest \"z$(cat git)\" = zworld &&\n"> <"\ttest \"z$(cat .git/PRE-REBASE-INPUT)\" = zmaster,test\n"> ) } ) (C {(test_expect_success)} {(SQ <"pre-rebase hook gets correct input (4)">)} { (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> <"\tEDITOR=true git rebase -i master &&\n"> <"\ttest \"z$(cat git)\" = zworld &&\n"> <"\ttest \"z$(cat .git/PRE-REBASE-INPUT)\" = zmaster,\n"> <"\n"> ) } ) (C {(test_expect_success)} {(SQ <"pre-rebase hook gets correct input (5)">)} { (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> <"\tEDITOR=true git rebase -i master test &&\n"> <"\ttest \"z$(cat git)\" = zworld &&\n"> <"\ttest \"z$(cat .git/PRE-REBASE-INPUT)\" = zmaster,test\n"> ) } ) (C {(test_expect_success)} {(SQ <"pre-rebase hook gets correct input (6)">)} { (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> <"\tgit checkout master &&\n"> <"\tEDITOR=true git rebase -i master test &&\n"> <"\ttest \"z$(cat git)\" = zworld &&\n"> <"\ttest \"z$(cat .git/PRE-REBASE-INPUT)\" = zmaster,test\n"> ) } ) (C {(test_expect_success)} {(SQ <"setup pre-rebase hook that fails">)} { (SQ <"\n"> <"\tmkdir -p .git/hooks &&\n"> <"\tcat >.git/hooks/pre-rebase <<EOF &&\n"> <"#!$SHELL_PATH\n"> <"false\n"> <"EOF\n"> <"\tchmod +x .git/hooks/pre-rebase\n"> ) } ) (C {(test_expect_success)} {(SQ <"pre-rebase hook stops rebase (1)">)} { (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> <"\ttest_must_fail git rebase master &&\n"> <"\ttest \"z$(git symbolic-ref HEAD)\" = zrefs/heads/test &&\n"> <"\ttest 0 = $(git rev-list HEAD...side | wc -l)\n"> ) } ) (C {(test_expect_success)} {(SQ <"pre-rebase hook stops rebase (2)">)} { (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> <"\ttest_must_fail env EDITOR=: git rebase -i master &&\n"> <"\ttest \"z$(git symbolic-ref HEAD)\" = zrefs/heads/test &&\n"> <"\ttest 0 = $(git rev-list HEAD...side | wc -l)\n"> ) } ) (C {(test_expect_success)} {(SQ <"rebase --no-verify overrides pre-rebase (1)">)} { (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> <"\tgit rebase --no-verify master &&\n"> <"\ttest \"z$(git symbolic-ref HEAD)\" = zrefs/heads/test &&\n"> <"\ttest \"z$(cat git)\" = zworld\n"> ) } ) (C {(test_expect_success)} {(SQ <"rebase --no-verify overrides pre-rebase (2)">)} { (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> <"\tEDITOR=true git rebase --no-verify -i master &&\n"> <"\ttest \"z$(git symbolic-ref HEAD)\" = zrefs/heads/test &&\n"> <"\ttest \"z$(cat git)\" = zworld\n"> ) } ) (C {(test_done)}) ] )