SVN post-commit se ejecuta secuencias de comandos de línea de comandos, pero no cuando la comisión de archivos) a SVN

StackOverflow https://stackoverflow.com/questions/2555098

Pregunta

Tengo un gancho post-commit en el SVN que funciona muy bien desde la línea de comandos cuando corro

env - ./foo.sh /path/to/svn/repos/ 12345

pero cuando la secuencia de comandos se llama desde SVN no parece al trabajo.

Lo que básicamente estoy haciendo está comprobando los archivos comprometidos y si se modifica un archivo en particular, hago una exportación de SVN a un recurso compartido de red. Funciona bien desde la línea de comandos.

El script de post-commit es como sigue:

#!/bin/sh

REPOS="$1"
REV="$2"

CHANGED=`/usr/bin/svnlook changed -r "$REV" "$REPOS"`
SOURCE="svn+ssh://localhost/path/to/svn/repos/somefile.zip"
DEST="/mnt/build/somefile-r$REV.zip"

if [[ "$CHANGED" =~ "trunk/somedir/somefile.zip" ]]
then
        `/usr/bin/svn export --non-interactive --trust-server-cert $SOURCE $DEST`
fi

exit 0

¿Hay una manera de salida de cualquier mensaje de error en un archivo cuando se ejecuta el script, o específicamente la línea de exportación de SVN (donde creo que podría ser un problema)?

¿Fue útil?

Solución

La salida estándar de un script gancho se descarta, pero el error estándar se remonta al cliente, al menos en las últimas versiones de Subversion. Pensé que había sido así durante un tiempo, pero el libro de SVN 1.4 dice que la salida se descarta, por lo que le gustaría comprobar que se está ejecutando una versión actualizada del servidor - ver el error estándar corriente es una buena manera de obtener una alerta temprana de los tipos comunes de error.

Para enviar la salida de un comando a un archivo, e incluyen la salida de error estándar en el archivo demasiado para mantener todo en un solo lugar, hacer

command >/path/to/logfile 2>&1

Uso >> en lugar de > para anexar al archivo:

command >>/path/to/logfile 2>&1

Debido a que la salida de error estándar se envía de vuelta al cliente SVN, también puede pasar la información de la parte posterior salida estándar de esa manera, ya sea por un solo comando,

command 1>&2

o para toda la secuencia de comandos, poniendo

exec 1>&2

en la parte superior de la secuencia de comandos.

A primera vista, veo un problema con la secuencia de comandos: asumiendo los acentos graves en la línea de exportación de SVN no son un artefacto del margen de beneficio, usted debe eliminarlos. (Se ejecutará el comando de exportación que usted ha escrito, y luego tomar su salida, y ejecutar esa salida como otro comando -. Casi seguro que no lo que pretende)

if [[ "$CHANGED" =~ "trunk/somedir/somefile.zip" ]]
then
        /usr/bin/svn export --non-interactive --trust-server-cert $SOURCE $DEST 1>&2
fi

(yo no sabía acerca de la sintaxis prueba doble de corchetes en bash, que es un buen nuevo descubrimiento para mí!)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top