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>
This commit is contained in:
parent
740001a578
commit
264474f29a
@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
# FIXME: Test the various index usages, -i and -o, test reflog,
|
# FIXME: Test the various index usages, -i and -o, test reflog,
|
||||||
# signoff, hooks
|
# signoff
|
||||||
|
|
||||||
test_description='git-commit'
|
test_description='git-commit'
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
64
t/t7503-pre-commit-hook.sh
Executable file
64
t/t7503-pre-commit-hook.sh
Executable file
@ -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
|
88
t/t7504-commit-msg-hook.sh
Executable file
88
t/t7504-commit-msg-hook.sh
Executable file
@ -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
|
Loading…
Reference in New Issue
Block a user