He comenzado a usar Gerrit 2.16 como herramienta de revisión de código y quiero configurar los ganchos del lado del servidor para validar el mensaje de confirmación git cuando se confirma / empuja un cambio a gerrit.

Intenté usar ganchos copiando scripts a $ GIT_DIR / hooks (scripts como ref-update, patchset-created, change-merged), dieron permiso en el servidor gerrit pero nada funciona.

Commit-msg hook se puede habilitar en el repositorio local mediante el comando give en la interfaz de usuario gerrit

Ejemplo: git clone ssh: // @: 29418 / Project1 && scp -p -P 29418 @: hooks / commit-msg /.git/hooks/

Change_ID se generará automáticamente si este enlace está habilitado.

Este script commit-msg se descarga al repositorio local cuando se ejecuta el comando anterior.
Mi pregunta; ¿podemos encontrar la ruta de este script en el servidor gerrit, para que pueda modificar y aplicar la validación del mensaje git commit?

¿O hay alguna otra forma de habilitar los ganchos del lado del servidor gerrit?

2
cloudops 20 ene. 2018 a las 01:29

3 respuestas

La mejor respuesta
#!/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
1
cloudops 24 ene. 2018 a las 16:36
#!/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
0
cloudops 24 ene. 2018 a las 16:41

No, no encontrará la ruta commit-msg en el servidor Gerrit y Git / Gerrit no usará ningún enlace que coloque en $ GIT_DIR / hooks automáticamente. Si desea tener enlaces locales, deberá instalarlos manualmente en el directorio local REPOSITORY / .git / hooks.

Gerrit no ejecuta ninguno de los ganchos git estándar en los repositorios con los que trabaja, pero tiene su propio mecanismo de gancho incluido a través de Complemento de ganchos. Consulte aquí más información sobre los ganchos Gerrit compatibles. El complemento Hooks es un complemento central (está empaquetado dentro del archivo de guerra de Gerrit y se puede instalar fácilmente durante la inicialización de Gerrit).

Le sugiero que eche un vistazo al Git :: Hooks (un marco Perl para implementar ganchos Git / Gerrit). Usamos en nuestra empresa y es realmente genial. Puedes usarlo para implementar lo que quieras y mucho más ...

3
Marcelo Ávila de Oliveira 20 ene. 2018 a las 17:26