Как настроить серверные перехватчики в 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
Другие вопросы по тегам