diff options
author | Wincent Colaiuta <win@wincent.com> | 2007-12-08 13:29:47 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-12-09 00:55:55 -0800 |
commit | 264474f29a3f41124f98e955b41ebe4e36d14b53 (patch) | |
tree | 67b4e863c0427b80e390212bbbd55fad0314c1d2 | |
parent | 740001a5780a12972c83c99f25c49c8d8cebdb43 (diff) | |
download | git-264474f29a3f41124f98e955b41ebe4e36d14b53.tar.gz git-264474f29a3f41124f98e955b41ebe4e36d14b53.tar.xz |
Add tests for pre-commit and commit-msg hooks
As desired, these pass for git-commit.sh, fail for builtin-commit (prior
to the fixes), and succeeded for builtin-commit (after the fixes).
Signed-off-by: Wincent Colaiuta <win@wincent.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rwxr-xr-x | t/t7501-commit.sh | 2 | ||||
-rwxr-xr-x | t/t7503-pre-commit-hook.sh | 64 | ||||
-rwxr-xr-x | t/t7504-commit-msg-hook.sh | 88 |
3 files changed, 153 insertions, 1 deletions
diff --git a/t/t7501-commit.sh b/t/t7501-commit.sh index 19c4b2c55..05aa97d6f 100755 --- a/t/t7501-commit.sh +++ b/t/t7501-commit.sh @@ -4,7 +4,7 @@ # # FIXME: Test the various index usages, -i and -o, test reflog, -# signoff, hooks +# signoff test_description='git-commit' . ./test-lib.sh diff --git a/t/t7503-pre-commit-hook.sh b/t/t7503-pre-commit-hook.sh new file mode 100755 index 000000000..c8097a72d --- /dev/null +++ b/t/t7503-pre-commit-hook.sh @@ -0,0 +1,64 @@ +#!/bin/sh + +test_description='pre-commit 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/pre-commit" +mkdir -p "$HOOKDIR" +cat > "$HOOK" <<EOF +#!/bin/sh +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 "--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" <<EOF +#!/bin/sh +exit 1 +EOF + +test_expect_failure "with failing hook" \ + "echo 'another' >> 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'" + +test_done diff --git a/t/t7504-commit-msg-hook.sh b/t/t7504-commit-msg-hook.sh new file mode 100755 index 000000000..17aad7c10 --- /dev/null +++ b/t/t7504-commit-msg-hook.sh @@ -0,0 +1,88 @@ +#!/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" <<EOF +#!/bin/sh +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 "--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" <<EOF +#!/bin/sh +exit 1 +EOF + +test_expect_failure "with failing hook" \ + "echo 'another' >> 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 |