El enlace de precomisión para Subversion falla

Necesito el gancho más básico para evitar verificaciones de comentarios vacías. Googled, script de bash de muestra encontrado. Lo hizo corto y aquí está lo que tengo:

#!/bin/sh REPOS="$1" TXN="$2" # Make sure that the log message contains some text. SVNLOOK=/usr/bin/svnlook ICONV=/usr/bin/iconv SVNLOOKOK=1 $SVNLOOK log -t "$TXN" "$REPOS" | \ grep "[a-zA-Z0-9]" > /dev/null || SVNLOOKOK=0 if [ $SVNLOOKOK = 0 ]; then echo "Empty log messages are not allowed. Please provide a proper log message." >&2 exit 1 fi # Comments should have more than 5 characters LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep [a-zA-Z0-9] | wc -c) if [ "$LOGMSG" -lt 6 ]; then echo -e "Please provide a meaningful comment when committing changes." 1>&2 exit 1 fi 

Ahora lo estoy probando con Tortoise SVN y aquí está lo que veo:

Error de confirmación (detalles a continuación): Confirmado bloqueado por el enlace de precompilation (código de salida 1) con salida: / home / svn / repos / apress / hooks / pre-commit: línea 11:: command no encontrado Los posts de logging vacíos no están permitidos . Proporcione un post de logging adecuado. Este error fue generado por un script de enlace personalizado en el server de Subversion. Comuníquese con el administrador de su server para que lo ayude a resolver este problema.

¿Cuál es el error? svnlook está en / usr / bin. Soy muy nuevo en Linux, no entiendo lo que sucede …

Para depurar su script, deberá ejecutarlo manualmente. Para hacerlo, tendrá que get los valores de muestra para los parameters que se le pasen. Cambia el comienzo de tu script a algo como

 #!/bin/sh REPOS="$1" TXN="$2" echo "REPOS = $REPOS, TXN = $TXN" >/tmp/svnhookparams.txt 

Realice una confirmación y compruebe el file /tmp/svnhookparams.txt para ver los valores.

Luego haga otro cambio en el script:

 #!/bin/sh set -x REPOS="$1" TXN="$2" 

Esto habilitará el eco de todos los commands ejecutados por el shell.

Ahora ejecute su script directamente desde la terminal pasando a los valores que obtuvo anteriormente.

Compruebe la salida en busca de commands no válidos o asignaciones de variables vacías. Si tiene problemas con eso, publique el resultado aquí.

$PATH está vacío cuando se ejecutan scripts de enlace. Por lo tanto, debe especificar routes completas para cada command externo. Mi suposition, es que grep no se encuentra.

Estoy respondiendo mi propia pregunta.

Esto no funcionó:

 $SVNLOOK log -t "$TXN" "$REPOS" | \ grep "[a-zA-Z0-9]" > /dev/null || SVNLOOKOK=0 

Tenía que ser 1 línea:

 $SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" > /dev/null || SVNLOOKOK=0