| #!/bin/sh |
| |
| test_description='git rebase with its hook(s)' |
| |
| . ./test-lib.sh |
| |
| test_expect_success setup ' |
| echo hello >file && |
| git add file && |
| test_tick && |
| git commit -m initial && |
| echo goodbye >file && |
| git add file && |
| test_tick && |
| git commit -m second && |
| git checkout -b side HEAD^ && |
| echo world >git && |
| git add git && |
| test_tick && |
| git commit -m side && |
| git checkout master && |
| git log --pretty=oneline --abbrev-commit --graph --all && |
| git branch test side |
| ' |
| |
| test_expect_success 'rebase' ' |
| git checkout test && |
| git reset --hard side && |
| git rebase master && |
| test "z$(cat git)" = zworld |
| ' |
| |
| test_expect_success 'rebase -i' ' |
| git checkout test && |
| git reset --hard side && |
| EDITOR=true git rebase -i master && |
| test "z$(cat git)" = zworld |
| ' |
| |
| test_expect_success 'setup pre-rebase hook' ' |
| mkdir -p .git/hooks && |
| cat >.git/hooks/pre-rebase <<EOF && |
| #!$SHELL_PATH |
| echo "\$1,\$2" >.git/PRE-REBASE-INPUT |
| EOF |
| chmod +x .git/hooks/pre-rebase |
| ' |
| |
| test_expect_success 'pre-rebase hook gets correct input (1)' ' |
| git checkout test && |
| git reset --hard side && |
| git rebase master && |
| test "z$(cat git)" = zworld && |
| test "z$(cat .git/PRE-REBASE-INPUT)" = zmaster, |
| |
| ' |
| |
| test_expect_success 'pre-rebase hook gets correct input (2)' ' |
| git checkout test && |
| git reset --hard side && |
| git rebase master test && |
| test "z$(cat git)" = zworld && |
| test "z$(cat .git/PRE-REBASE-INPUT)" = zmaster,test |
| ' |
| |
| test_expect_success 'pre-rebase hook gets correct input (3)' ' |
| git checkout test && |
| git reset --hard side && |
| git checkout master && |
| git rebase master test && |
| test "z$(cat git)" = zworld && |
| test "z$(cat .git/PRE-REBASE-INPUT)" = zmaster,test |
| ' |
| |
| test_expect_success 'pre-rebase hook gets correct input (4)' ' |
| git checkout test && |
| git reset --hard side && |
| EDITOR=true git rebase -i master && |
| test "z$(cat git)" = zworld && |
| test "z$(cat .git/PRE-REBASE-INPUT)" = zmaster, |
| |
| ' |
| |
| test_expect_success 'pre-rebase hook gets correct input (5)' ' |
| git checkout test && |
| git reset --hard side && |
| EDITOR=true git rebase -i master test && |
| test "z$(cat git)" = zworld && |
| test "z$(cat .git/PRE-REBASE-INPUT)" = zmaster,test |
| ' |
| |
| test_expect_success 'pre-rebase hook gets correct input (6)' ' |
| git checkout test && |
| git reset --hard side && |
| git checkout master && |
| EDITOR=true git rebase -i master test && |
| test "z$(cat git)" = zworld && |
| test "z$(cat .git/PRE-REBASE-INPUT)" = zmaster,test |
| ' |
| |
| test_expect_success 'setup pre-rebase hook that fails' ' |
| mkdir -p .git/hooks && |
| cat >.git/hooks/pre-rebase <<EOF && |
| #!$SHELL_PATH |
| false |
| EOF |
| chmod +x .git/hooks/pre-rebase |
| ' |
| |
| test_expect_success 'pre-rebase hook stops rebase (1)' ' |
| git checkout test && |
| git reset --hard side && |
| test_must_fail git rebase master && |
| test "z$(git symbolic-ref HEAD)" = zrefs/heads/test && |
| test 0 = $(git rev-list HEAD...side | wc -l) |
| ' |
| |
| test_expect_success 'pre-rebase hook stops rebase (2)' ' |
| git checkout test && |
| git reset --hard side && |
| ( |
| EDITOR=: |
| export EDITOR |
| test_must_fail git rebase -i master |
| ) && |
| test "z$(git symbolic-ref HEAD)" = zrefs/heads/test && |
| test 0 = $(git rev-list HEAD...side | wc -l) |
| ' |
| |
| test_expect_success 'rebase --no-verify overrides pre-rebase (1)' ' |
| git checkout test && |
| git reset --hard side && |
| git rebase --no-verify master && |
| test "z$(git symbolic-ref HEAD)" = zrefs/heads/test && |
| test "z$(cat git)" = zworld |
| ' |
| |
| test_expect_success 'rebase --no-verify overrides pre-rebase (2)' ' |
| git checkout test && |
| git reset --hard side && |
| EDITOR=true git rebase --no-verify -i master && |
| test "z$(git symbolic-ref HEAD)" = zrefs/heads/test && |
| test "z$(cat git)" = zworld |
| ' |
| |
| test_done |