16 October 2007

Hooks SVN en Linux

Este articulo viene a raíz de uno anterior llamado

Hooks para SVN - Comprobación de propiedades - Bloqueo de ficheros

Se basa en el mismo caso, pero esta vez en lugar de haberlo hecho en windows + .net se ha implementado en un Red Hat + bash y se accede bajo el protocolo http con un servidor Apache.

Lo que hay que tener en cuenta es que el usuario con el que se este ejecutando el servidor Apache tenga permisos de ejecución sobre el hook.

El código del pre-commit es el siguiente:


#!/bin/bash


function log(){


echo "$1" >> /opt/repos/proyecto/hooks/pre-commit-log.txt

}



log "-------------------------------------------------------------------"

log "Usuario : $(who) "

log "Fecha : $(date --d=now +"%Y-%m-%d %T %z") "


log "Repos : $1"

log "TXN : $2"

log ""


svnlooktool=$(echo "/opt/CollabNet_Subversion/bin/svnlook changed ${1} -t ${2}" )

log "Comando : $svnlooktool"


psoutsvnlook=$($svnlooktool)


log "RAW OUTPUT : "

log "$psoutsvnlook"

log ""


psoutsvnlook=$(echo "$psoutsvnlook" awk '{for (i=2; i<=NF && $1 !="D" ; i++) s=s " " $i; print s; s=""}') log "PROCESS RAW OUTPUT : " log "$psoutsvnlook" log "" log "PROCESS OUTPUT :" declare ok=0 echo "$psoutsvnlook" while read ii; do

len_ii=${#ii}
if [ "$len_ii" -gt 0 ]; then

svnlooktool_prop=$(echo "/opt/CollabNet_Subversion/bin/svnlook propget ${1} svn:needs-lock ${ii} -t ${2}" )

log "Comando : ${svnlooktool_prop}"


psoutsvnlook_prop=$(/opt/CollabNet_Subversion/bin/svnlook propget ${1} svn:needs-lock "${ii}" -t ${2})

log "svn:needs-lock($?) : ${psoutsvnlook_prop}"


len=${#psoutsvnlook_prop}

if [ "$len" -lt 1 ]; then


log "No se ha encontrado la propiedad svn:needs-lock "


#fichero de error

#echo "El fichero \"${ii}\" necesita tener la propiedad svn:needs-lock!" > ${filename_error}


let ok=$ok+1

exit $ok

else

log "svn:needs-lock encontrado!"


fi
fi

log ""

done



if [ $? -gt 0 ]


then

echo "Se debe informar la propiedad svn:needs-lock!" >&2

exit 1

fi


exit 0


Por cierto sr Guardiola, gracias por sus conocimientos de awk. Y ud. maestro Sebas claro, el rey de los asados :-)

- FIN -

No comments: