Je suis développeur web freelance et propose des formations à Symfony2 ! Contactez-moi pour en discuter.

Il est facile d’ajouter des fichiers invalides dans un système de contrôle de version si on ne fait pas attention. Un des moyens d’éviter ça, c’est d’utiliser les hooks de git.

On peut « s’accrocher » à un événement, et exécuter du code à ce moment. Git permet de le faire à peu près n’importe quand : avant un commit, avant un push, après un checkout… La liste complète des possibilités est dans la doc.
Pour cela, il suffit d’ajouter un script shell dans le répertoire .git/hooks d’un dépôt git. On peut d’ailleurs y trouver quelques exemples (inactifs, il faut les renommer pour les « activer »).

Pour éviter de soumettre des fichiers à la syntaxe invalide, on peut donc écrire un hook pre-commit en creant le fichier pre-commit dans ce répertoire. Ce script s’exécutera avant que le commit soit réalisé lorsque l’on exécute la commande commit.

Voici son code :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/sh
# On récupère la liste des fichiers modifiés
modifiedFiles=`git diff --cached --name-only --diff-filter=ACM`;
error=false;

for file in $modifiedFiles; do
# On vérifie la syntaxe des fichiers PHP avec php -l
   if [[ $file =~ .*\.php ]]; then
      result=`php -l $file 2>&1`;
      if [[ $result =~ .*'Parse error'.* ]];
      then
         echo $file;
         echo $result;
         error=true;
      fi;
   fi;
done

if [ $error != false ]; then
   # En cas d'erreur on empêche le commit
   echo "Erreur de syntaxe dans l'un des fichiers";
   exit 1;
fi;

Le code est simple et commenté, le comprendre ne devrait pas poser de problème (l’écrire a demandé quelques coups de main à google ceci-dit. bash, quelle galère…). La vérification de syntaxe se fait avec php -l, le linter de PHP, en parsant le texte de sortie car il n’y a pas de code de retour qui permette de déduire une erreur de syntaxe. En cas d’erreur, on interrompt le commit et on affiche les fichiers à corriger. Simple et efficace.

On pourrait bien sûr faire d’autre vérifications : validation de la syntaxe des fichiers JavaScript avec jslint, assurer le bon respect des règles de codage avec PHPCS

Plus d’informations sur les hooks dans la documentation.

Répondre

Unable to load the Are You a Human PlayThru™. Please contact the site owner to report the problem.