Vérification de syntaxe lors d'un commit SVN

Lorsque l’on travaille en équipe avec subversion le commit d’un fichier PHP syntaxiquement incorrect ne devrait jamais arriver, mais pourtant une erreur est vite arrivée. C’est pour cela, que j’ai configuré svn pour qu’il refuse les commit de fichier PHP avec des erreurs de syntaxe.

Pour cela on va utiliser l’option -l de PHP qui permet de vérifier la syntaxe.

Subversion possède un système de hook permettant de se brancher à diverses étapes d’une opération. Le hook qui nous intéresse est celui de pre-commit. Il se situe après le start-commit qui permet de verifier qu’une personne a le droit de commiter et avant le post-commit qui est lancée une fois que la révision a été ajoutée au SVN.

Un hook est un programme (un script shell suffit) qui reçoit de SVN des arguments en ligne de commande et qui renvoi le code d’erreur 0 en cas de succés et 1 sinon.

#Le hook de pre-commit Pour créer un hook de pre-commit allez dans le répertoire hooks de votre SVN sur le serveur et créez un fichier pre-commit avec les droits d’exécution.

Voici le contenu du fichier pre-commit pour la vérification de la syntaxe PHP:

#!/bin/sh

REPOS="$1"
TXN="$2"

changed=`$SVNLOOK changed -t "$TXN" "$REPOS"`
phpfile=`echo $changed | awk '*print $2*'`
if echo $phpfile | grep .php
then
    $SVNLOOK cat -t "$TXN" "$REPOS" "$phpfile" | php -l
    if [ $? -ne 0 ]
        then
        echo "Syntax error in $phpfile." 1>&2
        exit 1
    fi
fi

# All checks passed, so allow the commit.
exit 0