Browse Source
* maint: Update release notes for 1.6.0.3 Teach rebase -i to honor pre-rebase hook docs: describe pre-rebase hook do not segfault if make_cache_entry failed make prefix_path() never return NULL fix bogus "diff --git" header from "diff --no-index" Fix fetch/clone --quiet when stdout is connected builtin-blame: Fix blame -C -C with submodules. bash: remove fetch, push, pull dashed form leftovers Conflicts: diff.cmaint

11 changed files with 246 additions and 44 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