X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=t%2Ft7504-commit-msg-hook.sh;h=751b11300bb887d552697879201217ca1dcff648;hb=7fec10b7f41fa32e71aa6377bd04cd7c6fb419e0;hp=17aad7c10ddadbf2fe65c98e62619d9a3789aa2b;hpb=05e74f4111b5ce5995dd1145f83398fe40a318e0;p=git.git diff --git a/t/t7504-commit-msg-hook.sh b/t/t7504-commit-msg-hook.sh index 17aad7c10..751b11300 100755 --- a/t/t7504-commit-msg-hook.sh +++ b/t/t7504-commit-msg-hook.sh @@ -4,15 +4,49 @@ test_description='commit-msg hook' . ./test-lib.sh -test_expect_success "with no hook" \ - "echo 'foo' > file && - git add file && - git commit -m 'first'" +test_expect_success 'with no hook' ' -test_expect_success "--no-verify with no hook" \ - "echo 'bar' > file && - git add file && - git commit --no-verify -m 'bar'" + echo "foo" > file && + git add file && + git commit -m "first" + +' + +# set up fake editor for interactive editing +cat > fake-editor <<'EOF' +#!/bin/sh +cp FAKE_MSG "$1" +exit 0 +EOF +chmod +x fake-editor +FAKE_EDITOR="$(pwd)/fake-editor" +export FAKE_EDITOR + +test_expect_success 'with no hook (editor)' ' + + echo "more foo" >> file && + git add file && + echo "more foo" > FAKE_MSG && + GIT_EDITOR="$FAKE_EDITOR" git commit + +' + +test_expect_success '--no-verify with no hook' ' + + echo "bar" > file && + git add file && + git commit --no-verify -m "bar" + +' + +test_expect_success '--no-verify with no hook (editor)' ' + + echo "more bar" > file && + git add file && + echo "more bar" > FAKE_MSG && + GIT_EDITOR="$FAKE_EDITOR" git commit --no-verify + +' # now install hook that always succeeds HOOKDIR="$(git rev-parse --git-dir)/hooks" @@ -24,15 +58,39 @@ exit 0 EOF chmod +x "$HOOK" -test_expect_success "with succeeding hook" \ - "echo 'more' >> file && - git add file && - git commit -m 'more'" +test_expect_success 'with succeeding hook' ' -test_expect_success "--no-verify with succeeding hook" \ - "echo 'even more' >> file && - git add file && - git commit --no-verify -m 'even more'" + echo "more" >> file && + git add file && + git commit -m "more" + +' + +test_expect_success 'with succeeding hook (editor)' ' + + echo "more more" >> file && + git add file && + echo "more more" > FAKE_MSG && + GIT_EDITOR="$FAKE_EDITOR" git commit + +' + +test_expect_success '--no-verify with succeeding hook' ' + + echo "even more" >> file && + git add file && + git commit --no-verify -m "even more" + +' + +test_expect_success '--no-verify with succeeding hook (editor)' ' + + echo "even more more" >> file && + git add file && + echo "even more more" > FAKE_MSG && + GIT_EDITOR="$FAKE_EDITOR" git commit --no-verify + +' # now a hook that fails cat > "$HOOK" < "$HOOK" <> file && - git add file && - git commit -m 'another'" +test_expect_failure 'with failing hook' ' + + echo "another" >> file && + git add file && + git commit -m "another" + +' + +test_expect_failure 'with failing hook (editor)' ' + + echo "more another" >> file && + git add file && + echo "more another" > FAKE_MSG && + GIT_EDITOR="$FAKE_EDITOR" git commit -test_expect_success "--no-verify with failing hook" \ - "echo 'stuff' >> file && - git add file && - git commit --no-verify -m 'stuff'" +' + +test_expect_success '--no-verify with failing hook' ' + + echo "stuff" >> file && + git add file && + git commit --no-verify -m "stuff" + +' + +test_expect_success '--no-verify with failing hook (editor)' ' + + echo "more stuff" >> file && + git add file && + echo "more stuff" > FAKE_MSG && + GIT_EDITOR="$FAKE_EDITOR" git commit --no-verify + +' chmod -x "$HOOK" -test_expect_success "with non-executable hook" \ - "echo 'content' >> file && - git add file && - git commit -m 'content'" +test_expect_success 'with non-executable hook' ' + + echo "content" >> file && + git add file && + git commit -m "content" + +' + +test_expect_success 'with non-executable hook (editor)' ' + + echo "content again" >> file && + git add file && + echo "content again" > FAKE_MSG && + GIT_EDITOR="$FAKE_EDITOR" git commit -m "content again" + +' + +test_expect_success '--no-verify with non-executable hook' ' + + echo "more content" >> file && + git add file && + git commit --no-verify -m "more content" + +' -test_expect_success "--no-verify with non-executable hook" \ - "echo 'more content' >> file && - git add file && - git commit --no-verify -m 'more content'" +test_expect_success '--no-verify with non-executable hook (editor)' ' + + echo "even more content" >> file && + git add file && + echo "even more content" > FAKE_MSG && + GIT_EDITOR="$FAKE_EDITOR" git commit --no-verify + +' # now a hook that edits the commit message cat > "$HOOK" <<'EOF' @@ -73,16 +179,42 @@ commit_msg_is () { test "`git log --pretty=format:%s%b -1`" = "$1" } -test_expect_success "hook edits commit message" \ - "echo 'additional' >> file && - git add file && - git commit -m 'additional' && - commit_msg_is 'new message'" - -test_expect_success "hook doesn't edit commit message" \ - "echo 'plus' >> file && - git add file && - git commit --no-verify -m 'plus' && - commit_msg_is 'plus'" +test_expect_success 'hook edits commit message' ' + + echo "additional" >> file && + git add file && + git commit -m "additional" && + commit_msg_is "new message" + +' + +test_expect_success 'hook edits commit message (editor)' ' + + echo "additional content" >> file && + git add file && + echo "additional content" > FAKE_MSG && + GIT_EDITOR="$FAKE_EDITOR" git commit && + commit_msg_is "new message" + +' + +test_expect_success "hook doesn't edit commit message" ' + + echo "plus" >> file && + git add file && + git commit --no-verify -m "plus" && + commit_msg_is "plus" + +' + +test_expect_success "hook doesn't edit commit message (editor)" ' + + echo "more plus" >> file && + git add file && + echo "more plus" > FAKE_MSG && + GIT_EDITOR="$FAKE_EDITOR" git commit --no-verify && + commit_msg_is "more plus" + +' test_done