Browse Source
The original git-rebase honored pre-rebase hook so that public branches can be protected from getting rebased, but rebase --interactive ignored the hook entirely. This fixes it. Signed-off-by: Nanako Shiraishi <nanako3@lavabit.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>maint
Nanako Shiraishi
16 years ago
committed by
Shawn O. Pearce
3 changed files with 148 additions and 7 deletions
@ -0,0 +1,126 @@
@@ -0,0 +1,126 @@
|
||||
#!/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=true 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_done |
Loading…
Reference in new issue