This causes cgit to serve error pages, which is undesirable. This reverts commit5229c9b232, reversing changes made tof2b211131f.
139 lines
2.5 KiB
Bash
Executable file
139 lines
2.5 KiB
Bash
Executable file
#!/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_success 'with failing hook' '
|
|
|
|
echo "another" >> file &&
|
|
git add file &&
|
|
test_must_fail 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 POSIXPERM 'with non-executable hook' '
|
|
|
|
echo "content" >> file &&
|
|
git add file &&
|
|
git commit -m "content"
|
|
|
|
'
|
|
|
|
test_expect_success POSIXPERM '--no-verify with non-executable hook' '
|
|
|
|
echo "more content" >> file &&
|
|
git add file &&
|
|
git commit --no-verify -m "more content"
|
|
|
|
'
|
|
chmod +x "$HOOK"
|
|
|
|
# a hook that checks $GIT_PREFIX and succeeds inside the
|
|
# success/ subdirectory only
|
|
cat > "$HOOK" <<EOF
|
|
#!/bin/sh
|
|
test \$GIT_PREFIX = success/
|
|
EOF
|
|
|
|
test_expect_success 'with hook requiring GIT_PREFIX' '
|
|
|
|
echo "more content" >> file &&
|
|
git add file &&
|
|
mkdir success &&
|
|
(
|
|
cd success &&
|
|
git commit -m "hook requires GIT_PREFIX = success/"
|
|
) &&
|
|
rmdir success
|
|
'
|
|
|
|
test_expect_success 'with failing hook requiring GIT_PREFIX' '
|
|
|
|
echo "more content" >> file &&
|
|
git add file &&
|
|
mkdir fail &&
|
|
(
|
|
cd fail &&
|
|
test_must_fail git commit -m "hook must fail"
|
|
) &&
|
|
rmdir fail &&
|
|
git checkout -- file
|
|
'
|
|
|
|
test_expect_success 'check the author in hook' '
|
|
write_script "$HOOK" <<-\EOF &&
|
|
test "$GIT_AUTHOR_NAME" = "New Author" &&
|
|
test "$GIT_AUTHOR_EMAIL" = "newauthor@example.com"
|
|
EOF
|
|
test_must_fail git commit --allow-empty -m "by a.u.thor" &&
|
|
(
|
|
GIT_AUTHOR_NAME="New Author" &&
|
|
GIT_AUTHOR_EMAIL="newauthor@example.com" &&
|
|
export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL &&
|
|
git commit --allow-empty -m "by new.author via env" &&
|
|
git show -s
|
|
) &&
|
|
git commit --author="New Author <newauthor@example.com>" \
|
|
--allow-empty -m "by new.author via command line" &&
|
|
git show -s
|
|
'
|
|
|
|
test_done
|