38 lines
963 B
Bash
Executable File
38 lines
963 B
Bash
Executable File
#!/usr/bin/env bash
|
|
set -u
|
|
set -e
|
|
|
|
# pre-receive
|
|
# this accepts multiple lines of input at a time
|
|
# it fails at the first of any child script failing
|
|
|
|
my_input=$(cat)
|
|
my_dir=$(dirname $0)
|
|
|
|
for my_hook in ${my_dir}/pre-receive.d/*; do
|
|
|
|
# Bail and let the user know if the hook isn't executable
|
|
if [ ! -x "${my_hook}" ] || [ ! -f "${my_hook}" ]; then
|
|
>&2 echo "${my_hook} is not (or does not point to) an executable file"
|
|
exit 155
|
|
fi
|
|
|
|
# Allow the script to fail so we can bubble the exit code and ensure an error message
|
|
# and subscript it so that any set -e won't cause this to fail
|
|
set +e
|
|
|
|
# foo="$(echo bar; exit 3)"; echo $?; echo $foo
|
|
#my_output="$(echo "${my_input}" | "${my_hook}")"
|
|
echo "${my_input}" | ("${my_hook}")
|
|
my_exit_code=$?
|
|
set -e
|
|
|
|
#echo my_output: $my_output
|
|
|
|
# Bail on the first script failure
|
|
if [ "0" != "${my_exit_code}" ]; then
|
|
>&2 echo "${my_hook} failed with exit code ${my_exit_code}"
|
|
exit ${my_exit_code}
|
|
fi
|
|
done
|