mkdist.php

mkdist est un générateur d'arborescence. En suivant les instructions d'un fichier spécial appelé manifest, il permet de générer une arborescence complète à partir d'une autre, de copier des fichiers d'un endroit à un autre, en les passant éventuellement par le pré-processeur.

Cela est utile pour générer une version précise d'une application php. Par exemple, si on veut faire deux versions de son application, une à destination de développeurs, et une autre optimisée pour un usage en production, la première aura certainement plus de fichiers (fichier de tests, outils etc...) que la deuxième. En réalisant un manifest pour chacune des versions, vous pouvez alors générer vos deux versions avec deux simples commandes.

Combiné avec l'usage d'un Makefile, vous avez alors un système de génération de versions évolué et rapide.

Exécution

mkdist est un script à exécuter en ligne de commande. Il prend trois arguments :

  1. le nom du fichier manifest à analyser
  2. le chemin d'un répertoire source (A)
  3. le chemin d'un répertoire destination (B)

Il copiera alors tous les fichiers indiqués dans le manifest, de A vers B. En les passant éventuellement au préprocesseur.

  php mkdist.php monManifest.mn /home/laurent/sources/trunk/ /home/laurent/dist/

Vous avez aussi la possibilité d'indiquer l'option -v pour que mkdist affiche la liste des fichiers qu'il copiera

  php mkdist.php -v monManifest.mn /home/laurent/sources/trunk/ /home/laurent/dist/

Les manifests

Les fichiers manifests ne sont rien d'autre qu'une liste de fichiers que mkdist doit copier d'un répertoire à un autre.

Chaque ligne d'un fichier manifest indique une commande à mkdist. Voici ces commandes :

  • cd, dd ou sd suivi d'un chemin : indique des changements de répertoires à faire à partir des répertoires indiqués en argument à mkdist
  • un espace suivi d'un nom de fichier : copie le fichier indiquer à partir du répertoire source courant vers le répertoire destination courant.
  • une étoile (*) suivit d'un espace et d'un nom de fichier : idem que précédemment, mais passe aussi le fichier au préprocesseur.

Commandes cd, dd, sd

mkdist garde en mémoire à tout instant deux chemins de répertoires : un chemin de répertoire où prendre un fichier, et un chemin de répertoire où copier les fichiers. Au départ, ces deux chemins sont ceux donnés en argument, mais il est possible de les modifier en leur ajoutant des chemins de sous-répertoires. Ces modifications se font avec les commandes cd, dd, et sd.

  • cd permet d'indiquer un même sous répertoire aux deux chemins
  • dd permet de modifier uniquement le chemin du répertoire destination
  • sd permet de modifier uniquement le chemin du répertoire source.

Exemple. Imaginons que l'on appelle mkdist comme ceci :

  php mkdist.php monManifest.mn /home/laurent/sources/ /home/laurent/dist/

Voici ce que valent les chemins après chacune des commandes suivantes exécutées dans l'ordre :

­ commande chemin répertoire source chemin répertoire destination

cd foo /home/laurent/sources/foo/ /home/laurent/dist/foo
sd bar /home/laurent/sources/bar/ /home/laurent/dist/foo
dd blob /home/laurent/sources/bar/ /home/laurent/dist/blob
cd foo/lib /home/laurent/sources/foo/lib/ /home/laurent/dist/foo/lib/
dd foo/lib/core/ /home/laurent/sources/foo/lib/ /home/laurent/dist/foo/lib/core/

Bien sûr, normalement, après chaque commande cd/dd/sd, vous indiquez généralement une liste de fichiers à copier.

Exemple de fichier manifest

Voici un extrait d'un fichier manifest de jelix. La plupart du temps, l'arborescence du répertoire cible est la même que le répertoire source. C'est pourquoi on utilise souvent que la commande cd :

cd .
  README

cd lib
  .htaccess

cd lib/jelix
  CHANGELOG
  CREDITS
* init.php
  INSTALL
  LICENCE
  VERSION

cd lib/jelix/auth
  jAuth.class.php
  jAuthDriverDb.class.php
  jAuthUser.class.php

cd lib/jelix/acl
  jAcl.class.php
  jAclUserGroup.class.php
  jAclManager.class.php

cd lib/jelix/core
  jConfig.class.php
  jContext.class.php
  jController.class.php
  jCoordinator.class.php

Si on exécute mkdist comme ceci :

  php mkdist.php jelix.mn /home/laurent/sources/ /home/laurent/dist/

On obtient alors dans le répertoire /home/laurent/dist :

README
lib/.htaccess
lib/jelix/
lib/jelix/CHANGELOG
lib/jelix/CREDITS
lib/jelix/init.php
lib/jelix/INSTALL
lib/jelix/LICENCE
lib/jelix/VERSION
lib/jelix/auth/
lib/jelix/auth/jAuth.class.php
lib/jelix/auth/jAuthDriverDb.class.php
lib/jelix/auth/jAuthUser.class.php
lib/jelix/acl/
lib/jelix/acl/jAcl.class.php
lib/jelix/acl/jAclUserGroup.class.php
lib/jelix/acl/jAclManager.class.php
lib/jelix/core/
lib/jelix/core/jConfig.class.php
lib/jelix/core/jContext.class.php
lib/jelix/core/jController.class.php
lib/jelix/core/jCoordinator.class.php

Il arrive parfois que l'on veuille une arborescence différente dans le répertoire cible. Les commandes sd et dd sont alors utiles :

dd .
sd lib/jelix/tpl/
*  jTpl.class.php
*  jTplCompiler.class.php
   jtpl_standalone_prepend.php
   VERSION
   CREDITS
   LICENCE

sd lib/jelix/tpl/plugins/common
dd plugins/common
  function.include.php
  modifier.cat.php
  modifier.count_characters.php

sd lib/jelix/tpl/plugins/html
dd plugins/html
  modifier.nl2br.php

sd lib/jelix/tpl/plugins/text
dd plugins/text

Si on exécute mkdist comme ceci :

  php mkdist.php jtpl.mn /home/laurent/sources/ /home/laurent/dist/

mkdist s'attend alors à trouver dans /home/laurent/sources/ l'arborescence suivante :

lib/jelix/tpl/
lib/jelix/tpl/jTpl.class.php
lib/jelix/tpl/jTplCompiler.class.php
lib/jelix/tpl/jtpl_standalone_prepend.php
lib/jelix/tpl/VERSION
lib/jelix/tpl/CREDITS
lib/jelix/tpl/LICENCE
lib/jelix/tpl/plugins/common/
lib/jelix/tpl/plugins/common/function.include.php
lib/jelix/tpl/plugins/common/modifier.cat.php
lib/jelix/tpl/plugins/common/modifier.count_characters.php
lib/jelix/tpl/plugins/html/
lib/jelix/tpl/plugins/html/modifier.nl2br.php
lib/jelix/tpl/plugins/text/

et génèrera l'arborescence suivante dans /home/laurent/dist/ :

jTpl.class.php
jTplCompiler.class.php
jtpl_standalone_prepend.php
VERSION
CREDITS
LICENCE
plugins/common/
plugins/common/function.include.php
plugins/common/modifier.cat.php
plugins/common/modifier.count_characters.php
plugins/html/
plugins/html/modifier.nl2br.php
plugins/text/

Remarques

  • si vous indiquez un répertoire cible (avec dd ou cd), il sera créé, même si vous n'indiquez pas par la suite de fichiers à copier.
  • il n'y a pour le moment pas de possibilité de renommage de fichier
  • mkdist n'efface pas au préalable le contenu du répertoire cible. Il écrase les fichiers existants. Ce qui veut dire que les fichiers copiés par un manifest précédent mais non présents dans un nouveau manifest, ne seront pas effacés.

Retour au sommaire

Download in other formats: Plain Text