PHP Tree Match : Vérifiez que vos arborescences projets sont standardisées !
"Et alors, mes 18 projets ont tous la même arborescence ? Ils sont tous standard (i.e. respectent "nos" standards) et sont tous "faits" de la même façon ?" Certains d'entre vous se sont déjà vus poser cette question ? Si, c'est la cas, PHP Tree Match pourra probablement vous aider...
PHP Tree Match, ou PHPTM de son petit nom, est un nouvel outil "basique" (dans la série des phpcpd, phpmd...) qui permet de vérifier que l'arborescence de votre/vos projets respectent bien une norme que vous vous donnez. Par exemple, vous avez l'habitude mettre une arborescence du type :
/
application/
default/
controllers/
models/
views/
config/
application.ini
html/
index.php
.htaccess
...
Vous devez gérer 1, 5, 10 ... projets similaires et vous voulez vérifier d'un seul coup que tous vos projets respectent bien vos conventions, que le fichier config/application.ini contient bien la section "production", que le fichier .project n'existe pas en prod...
Installation
à partir du Channel PEAR
$ pear channel-discover pear.phppro.fr $ pear install phppro/phptm
mise à jour
$ pear upgrade phppro/phptm
à partir du package compatible PEAR en téléchargement sur Google Code
$ wget http://phptreematch.googlecode.com/files/phptm-0.1.0.tgz $ pear install phptm-0.1.0.tgz
Usage
Avant d'utiliser phptm vous devez "décrire" votre arborescence projet dans un fichier de description au format xml. Voici un exemple :
<?xml version="1.0" encoding="UTF-8"?>
<tree>
<item name=".project" present="false"/>
<item name="bin/phptm.bat" hash="8c8d25cde4142e4b945792c2ca9a31cc"/>
<item name="bin/phptm.php" hash="635f67483f575310a904c02a2068d0dd"/>
<item name="build/package.xml" hash="ca34d98facbc5ff461976d5f18910cbe"/>
<item name="build.xml" hash="a25ebe507f99623d266aeee4d1ed4463"/>
<item name="config/build.properties">
<contains>version=</contains>
<contains>name=</contains>
</item>
<item name="config/package.xml"/>
<item name="docs/README.markdown"/>
<item name="library/PHPTM/Analyzer.php"/>
<item name="library/PHPTM/Log/XML/XML.php"/>
<item name="library/PHPTM/Log/XML.php"/>
<item name="library/PHPTM/TextUI/Command.php"/>
<item name="library/PHPTM/TextUI/Getopt.php"/>
<item name="library/PHPTM/TextUI/ResultPrinter.php"/>
<item name="library/PHPTM/Util/FilterIterator.php"/>
</tree>
Le fichier ci-dessus permet notamment de vérifier que certains fichier sont bien absent(present=false), que certains fichiers existent et ont un contenu précis (calculé à partir de "hash"), que certains fichiers existent et contiennent une chaîne de caractère précise ("contains", mais vous pouvez aussi utiliser "notcontains")...
Inspirez vous de l'exemple ci-dessus pour construire votre fichier de description, ou bien exécutez la commande suivante sur une arborescence type :
$ phptm --build-tree my-typical-directory > typical-tree.xml
Pour "passer" ensuite phptm sur votre application, exécutez :
$ phptm --expected-tree=typical-tree.xml my-directory
ou bien pour exporter aussi le résultat sous forme xml :
$ phptm --log-xml=phptm-report.xml --expected-tree=typical-tree.xml my-directory
Description du rapport calculé
Le rapport en ligne de commande ou bien le rapport xml vous indique alors si des erreurs de cohérences sont détectées et si oui, lesquelles :
- missing : absence de fichier listé
- present : présence de fichier listé comme devant être absent
- hash : contenu de fichier non identique à celui attendu
- contains : fichier contenant une chaîne marquée comme devant ne pas être dans le fichier
- not-contains : fichier ne contenant pas une chaîne attendue
Limitations
PHPTM est loin d'être un outil parfait et exhaustif, n'hésitez pas à remonter des éventuels bugs et des demandes d'évolutions sur l'espace du projet sur Google Code http://code.google.com/p/phptreematch/issues/list ! ou à partir la documentation sur http://code.google.com/p/phptreematch
Bonne utilisation !
Commentaires
Ca sert plutôt comme outils 'a posteriori', non? Par exemple pour comme indicateurs.