(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)}) ] )