2021-12-22 06:59:27 +03:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
test_description='git-hook command'
|
|
|
|
|
|
|
|
TEST_PASSES_SANITIZE_LEAK=true
|
|
|
|
. ./test-lib.sh
|
|
|
|
|
|
|
|
test_expect_success 'git hook usage' '
|
|
|
|
test_expect_code 129 git hook &&
|
|
|
|
test_expect_code 129 git hook run &&
|
|
|
|
test_expect_code 129 git hook run -h &&
|
|
|
|
test_expect_code 129 git hook run --unknown 2>err &&
|
|
|
|
grep "unknown option" err
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'git hook run: nonexistent hook' '
|
|
|
|
cat >stderr.expect <<-\EOF &&
|
|
|
|
error: cannot find a hook named test-hook
|
|
|
|
EOF
|
|
|
|
test_expect_code 1 git hook run test-hook 2>stderr.actual &&
|
|
|
|
test_cmp stderr.expect stderr.actual
|
|
|
|
'
|
|
|
|
|
2021-12-22 06:59:37 +03:00
|
|
|
test_expect_success 'git hook run: nonexistent hook with --ignore-missing' '
|
|
|
|
git hook run --ignore-missing does-not-exist 2>stderr.actual &&
|
|
|
|
test_must_be_empty stderr.actual
|
|
|
|
'
|
|
|
|
|
2021-12-22 06:59:27 +03:00
|
|
|
test_expect_success 'git hook run: basic' '
|
2022-03-17 13:13:06 +03:00
|
|
|
test_hook test-hook <<-EOF &&
|
2021-12-22 06:59:27 +03:00
|
|
|
echo Test hook
|
|
|
|
EOF
|
|
|
|
|
|
|
|
cat >expect <<-\EOF &&
|
|
|
|
Test hook
|
|
|
|
EOF
|
|
|
|
git hook run test-hook 2>actual &&
|
|
|
|
test_cmp expect actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'git hook run: stdout and stderr both write to our stderr' '
|
2022-03-17 13:13:06 +03:00
|
|
|
test_hook test-hook <<-EOF &&
|
2021-12-22 06:59:27 +03:00
|
|
|
echo >&1 Will end up on stderr
|
|
|
|
echo >&2 Will end up on stderr
|
|
|
|
EOF
|
|
|
|
|
|
|
|
cat >stderr.expect <<-\EOF &&
|
|
|
|
Will end up on stderr
|
|
|
|
Will end up on stderr
|
|
|
|
EOF
|
|
|
|
git hook run test-hook >stdout.actual 2>stderr.actual &&
|
|
|
|
test_cmp stderr.expect stderr.actual &&
|
|
|
|
test_must_be_empty stdout.actual
|
|
|
|
'
|
|
|
|
|
2022-03-17 13:13:07 +03:00
|
|
|
for code in 1 2 128 129
|
|
|
|
do
|
|
|
|
test_expect_success "git hook run: exit code $code is passed along" '
|
|
|
|
test_hook test-hook <<-EOF &&
|
|
|
|
exit $code
|
|
|
|
EOF
|
|
|
|
|
|
|
|
test_expect_code $code git hook run test-hook
|
|
|
|
'
|
|
|
|
done
|
2021-12-22 06:59:27 +03:00
|
|
|
|
|
|
|
test_expect_success 'git hook run arg u ments without -- is not allowed' '
|
|
|
|
test_expect_code 129 git hook run test-hook arg u ments
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'git hook run -- pass arguments' '
|
2022-03-17 13:13:06 +03:00
|
|
|
test_hook test-hook <<-\EOF &&
|
2021-12-22 06:59:27 +03:00
|
|
|
echo $1
|
|
|
|
echo $2
|
|
|
|
EOF
|
|
|
|
|
|
|
|
cat >expect <<-EOF &&
|
|
|
|
arg
|
|
|
|
u ments
|
|
|
|
EOF
|
|
|
|
|
|
|
|
git hook run test-hook -- arg "u ments" 2>actual &&
|
|
|
|
test_cmp expect actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'git hook run -- out-of-repo runs excluded' '
|
2022-03-17 13:13:06 +03:00
|
|
|
test_hook test-hook <<-EOF &&
|
2021-12-22 06:59:27 +03:00
|
|
|
echo Test hook
|
|
|
|
EOF
|
|
|
|
|
|
|
|
nongit test_must_fail git hook run test-hook
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'git -c core.hooksPath=<PATH> hook run' '
|
|
|
|
mkdir my-hooks &&
|
|
|
|
write_script my-hooks/test-hook <<-\EOF &&
|
|
|
|
echo Hook ran $1 >>actual
|
|
|
|
EOF
|
|
|
|
|
|
|
|
cat >expect <<-\EOF &&
|
|
|
|
Test hook
|
|
|
|
Hook ran one
|
|
|
|
Hook ran two
|
|
|
|
Hook ran three
|
|
|
|
Hook ran four
|
|
|
|
EOF
|
|
|
|
|
2022-03-17 13:13:06 +03:00
|
|
|
test_hook test-hook <<-EOF &&
|
|
|
|
echo Test hook
|
|
|
|
EOF
|
|
|
|
|
2021-12-22 06:59:27 +03:00
|
|
|
# Test various ways of specifying the path. See also
|
|
|
|
# t1350-config-hooks-path.sh
|
|
|
|
>actual &&
|
|
|
|
git hook run test-hook -- ignored 2>>actual &&
|
|
|
|
git -c core.hooksPath=my-hooks hook run test-hook -- one 2>>actual &&
|
|
|
|
git -c core.hooksPath=my-hooks/ hook run test-hook -- two 2>>actual &&
|
|
|
|
git -c core.hooksPath="$PWD/my-hooks" hook run test-hook -- three 2>>actual &&
|
|
|
|
git -c core.hooksPath="$PWD/my-hooks/" hook run test-hook -- four 2>>actual &&
|
|
|
|
test_cmp expect actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_done
|