path.c: refactor relative_path(), not only strip prefix
[gitweb.git] / t / t7503-pre-commit-hook.sh
index c8097a72d947ecbaadf307687d5fcc2608fe4b45..984889b39d3f8e9941a2aadc8cec833fe42176a2 100755 (executable)
@@ -4,15 +4,21 @@ 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 '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"
+
+'
+
+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"
@@ -24,15 +30,21 @@ 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' '
+
+       echo "more" >> file &&
+       git add file &&
+       git commit -m "more"
+
+'
+
+test_expect_success '--no-verify 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 "even more" >> file &&
+       git add file &&
+       git commit --no-verify -m "even more"
+
+'
 
 # now a hook that fails
 cat > "$HOOK" <<EOF
@@ -40,25 +52,88 @@ cat > "$HOOK" <<EOF
 exit 1
 EOF
 
-test_expect_failure "with failing hook" \
-       "echo 'another' >> file &&
-        git add file &&
-        git commit -m 'another'"
+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' '
 
-test_expect_success "--no-verify with failing hook" \
-       "echo 'stuff' >> file &&
-        git add file &&
-        git commit --no-verify -m 'stuff'"
+       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_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