#!/bin/sh 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 "--no-verify with no hook" \ "echo 'bar' > file && git add file && git commit --no-verify -m 'bar'" # now install hook that always succeeds HOOKDIR="$(git rev-parse --git-dir)/hooks" HOOK="$HOOKDIR/commit-msg" mkdir -p "$HOOKDIR" cat > "$HOOK" <> file && git add file && git commit -m 'more'" test_expect_success "--no-verify with succeeding hook" \ "echo 'even more' >> file && git add file && git commit --no-verify -m 'even more'" # now a hook that fails cat > "$HOOK" <> file && git add file && git commit -m 'another'" test_expect_success "--no-verify with failing hook" \ "echo 'stuff' >> file && git add file && git commit --no-verify -m 'stuff'" chmod -x "$HOOK" test_expect_success "with non-executable hook" \ "echo 'content' >> file && git add file && git commit -m 'content'" test_expect_success "--no-verify with non-executable hook" \ "echo 'more content' >> file && git add file && git commit --no-verify -m 'more content'" # now a hook that edits the commit message cat > "$HOOK" <<'EOF' #!/bin/sh echo "new message" > "$1" exit 0 EOF chmod +x "$HOOK" 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_done