Как настроить серверные перехватчики в Gerrit 2.16
Я начал использовать Gerrit 2.16 в качестве инструмента просмотра кода и хочу настроить перехватчики на стороне сервера для проверки сообщения git commit, когда изменение зафиксировано / отправлено в gerrit.
Пробовал использовать ловушки, копируя сценарии в $GIT_DIR/hooks (такие сценарии, как ref-update, patchset-made, change-merged), давал разрешение на сервере gerrit, но ничего не работает.
Хук commit-msg можно включить в локальном репозитории с помощью команды give в пользовательском интерфейсе gerrit
пример: git clone ssh://@:29418/Project1 && scp -p -P -P 29418 @: hooks / commit-msg /.git/hooks/
change_ID будет автоматически сгенерирован, если этот хук включен.
Этот скрипт commit-msg загружается в локальный репозиторий при выполнении вышеуказанной команды.
Мой вопрос; можем ли мы найти путь к этому сценарию на сервере gerrit, чтобы я мог изменить и применить проверку сообщений git commit?
Или есть какой-нибудь другой способ включить серверные перехватчики Gerrit?
3 ответа
#!/bin/bash
echo "Executing hook from Gerrit_DIR "
bold=$(tput bold)
normal=$(tput sgr0)
RED='\033[0;31m'
NC='\033[0m' # No Color
GIT_DIR="/opt/gerrit/site/git"
PROJECT=$2
REFNAME=$4
UPLOADER=$6
OLDREV=$8
NEWREV="${10}"
BASE="<baseDir>"
RepoDir="$GIT_DIR/$PROJECT.git"
echo $RepoDir
echo $PROJECT
echo $8
echo ${10}
# execute the project specific hook
if [ -f "$RepoDir/hooks/commit-received" ]
then
echo "Executing the project specific hook"
$RepoDir/hooks/commit-received $RepoDir ${10}
else
echo "There is no project specific hook"
fi
Нет, вы не найдете пути commit-msg на сервере Gerrit, и Git/Gerrit не будет использовать никаких хуков, которые вы автоматически добавляете в $GIT_DIR/hooks. Если вы хотите иметь локальные хуки, вам нужно будет вручную установить их в локальном каталоге REPOSITORY/.git/hooks.
Gerrit не запускает ни одной из стандартных перехватчиков git в репозиториях, с которыми работает, но у него есть собственный механизм перехвата, включаемый через плагин Hooks. Смотрите здесь больше информации о поддерживаемых хуках Gerrit. Плагин Hooks является основным плагином (он упакован в военный файл Gerrit и может быть легко установлен во время инициализации Gerrit).
Я предлагаю вам взглянуть на Git:: Hooks (Perl-фреймворк для реализации хитов Git/Gerrit). Мы используем в нашей компании, и это действительно здорово. Вы можете использовать это, чтобы реализовать то, что вы хотите, и многое другое...
#!/bin/bash
echo "Executing hook for patchset"
bold=$(tput bold)
normal=$(tput sgr0)
RED='\033[0;31m'
NC='\033[0m' # No Color
RepoDir=$1
NEWREV=$2
MSG=$(git --git-dir=$RepoDir log --format=%B -n 1 $NEWREV | awk -F"Change-Id:" '{print $1}')
Val=`echo $MSG | cut -c1-3`
if [ $Val == "TR_" ] || [ $Val == "CR_" ] || [ $Val == "PU_" ] || [ $Val == "FR_" ] || [ $Val == "CSR" ]
then
echo "The commit message is valid"
exit 0
else
echo -e "The commit message ${RED}\"$MSG\"${NC} is not valid, please enter a valid commit message"
exit 1
fi