Вызов одного git hook из другого hook
Я использую Gitolite с крюком пост-получения для развертывания веб-сайта.
В настоящее время сценарий очень прост, но мы хотим добавить более сложные вещи, такие как тестирование, развертывание, этапы компиляции и т. Д.
Чтобы сделать это, я хотел бы разделить хук пост-получения на несколько отдельных файлов. то есть post-receive.deploy, post-receive.compile, post-receive.test и т. д. И один центральный хук post-receive, чтобы вызывать их последовательно. Таким образом, мы могли бы легче управлять шагами.
Вопрос есть; как мне вызвать отдельные (суб) хуки от центральной пост-получения хука? Я даже не могу заставить их исполниться, и, как я понимаю, мне нужно передать STDIN на вспомогательные хуки. Я в значительной степени n00b, что касается сценариев оболочки.
1 ответ
Вы можете иметь свой post-receive
hook будет скрипт-оберткой, подобный следующему:
#!/bin/sh
log() { printf %s\\n "$*"; }
warn() { log "WARNING: $@" >&2; }
mydir=${0%/*}
add_hook() {
case $1 in
/*) h=$1;;
*) h=${mydir}/$1;;
esac
[ -x "${h}" ] || {
warn "ignoring hook '$1' (not executable)"
continue
}
# XXX ${h} must not contain anything in ${IFS}
hooks="${hooks} ${h}"
}
run_hooks() {
# read input from Git, preserving trailing newlines if any
input=$(cat && echo eoi)
input=${input%eoi}
for h in ${hooks}; do
# no need to break the loop if a hook returns error -- the
# exit codes are ignored
printf %s "${input}" | "${h}" "$@"
done
}
add_hook git_multimail.py
add_hook some-other-post-receive-hook
add_hook yet-another-post-receive-hook
run_hooks "$@"
С помощью этой обёртки вы объявляете все крючки, которые хотите запустить через add_hook
функция. Когда run_hooks
Когда вызывается функция, оболочка читает входные данные из Git и сохраняет их в переменной, чтобы можно было воспроизвести ввод для каждого объявленного хука.