¿Cómo verificar si los files comprometidos con SVN están codificados en UTF-8 con enlaces precompuestos?

Estoy intentando escribir un script de gancho precomstackdo de SVN en Linux Bash que rechazará una confirmación si los files no se pueden analizar como UTF-8.

Hasta ahora he escrito este guion:

REPOS="$1" TXN="$2" SVNLOOK=/usr/bin/svnlook ICONV=/usr/bin/iconv # Make sure that all files to be committed are encoded in UTF-8 for FILE in $($SVNLOOK changed -t "$TXN" "$REPOS"); do if [$ICONV -f UTF-8 $FILE -o /dev/null]; then echo "Only UTF-8 files can be committed ("$FILE")" 1>&2 exit 1 fi # All checks passed, so allow the commit. exit 0 

El problema es que iconv requiere la ruta a los files comprometidos (o el text de alguna otra forma), y no sé cómo getlo.

¿Alguien puede ayudar?

Use svnlook cat para get el contenido de un file de una transacción:

 $SVNLOOK cat -t "$TXN" "$REPOS" "$FILE" 

Por cierto, hay un problema en esta respuesta ! Necesita probar el resultado del command $ SVNLOOK ($?) Porque la instrucción "exit 1" está en un process secundario para que el script nunca bloquee la confirmación:

 #!/bin/bash REPOS="$1" TXN="$2" SVNLOOK=/usr/bin/svnlook ICONV=/usr/bin/iconv # Make sure that all files to be committed are encoded in UTF-8. $SVNLOOK changed -t "$TXN" "$REPOS" | while read changeline; do # Get just the file (not the add / update / etc. status). file=${changeline:4} # Only check source files. if [[ $file == *.cpp || $file == *.hpp || $file == *.c || $file == *.h ]] ; then $SVNLOOK cat -t "$TXN" "$REPOS" $file 2>&1 | iconv -f UTF-8 -t UTF-8 >& /dev/null if [ $? -ne 0 ] ; then exit 1 fi fi done test $? -eq 1 && echo "Only UTF-8 files can be committed" 1>&2 && exit 1 exit 0 

Basado en el guión de la pregunta original y esta respuesta , aquí hay un gancho precompromiso que reúne todo esto:

 #!/bin/bash REPOS="$1" TXN="$2" SVNLOOK=/usr/bin/svnlook ICONV=/usr/bin/iconv # Make sure that all files to be committed are encoded in UTF-8. $SVNLOOK changed -t "$TXN" "$REPOS" | while read changeline; do # Get just the file (not the add / update / etc. status). file=${changeline:4} # Only check source files. if [[ $file == *.cpp || $file == *.hpp || $file == *.c || $file == *.h ]] ; then $SVNLOOK cat -t "$TXN" "$REPOS" "$file" 2>&1 | iconv -f UTF-8 -t UTF-8 >& /dev/null if [ $? -ne 0 ] ; then echo "Only UTF-8 files can be committed ("$file")" 1>&2 exit 1 fi fi done # All checks passed, so allow the commit. exit 0