Ajouter automatiquement le bon auteur à une classe dans symfony

La ligne de commande de symfony permet de générer un nouveau module avec une arborescence et des fichiers basés sur des modèles. Si on ne fait rien de particulier, Fabien est alors l'auteur de tous les fichiers php. Il est fort mais quand même !

Quand je parle d'auteur, je parle du propriétaire du fichier, celui qui a crée le fichier dans subversion. Vous utilisez bien subversion pour gérer vos sources. Si ce n'est pas le cas, d'une part, ce n'est pas bien (à moins d'utiliser un autre gestionnaire de version) et d'autre part cet article ne va pas tellement vous intéresser !

Supposons que l'on crée le module wiki basé sur la class Article dans l'application frontend, ce qui donne la commande suivante :

nicolas $ ./symfony init-module frontend wiki Article

Cela va générer, notament la classe wikiActions suivante:

<?php

/**
 * wiki actions.
 *
 * @package    wiki
 * @subpackage wiki
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 2692 2006-11-15 21:03:55Z fabien $
 */
class wikiActions extends sfActions
{
  
/**
   * Executes index action
   *
   */
  
public function executeIndex()
  {
    
$this->forward('default''module');
  }
}

Il serait fort agréable qu'à la place de "Your name here" il y ait notre nom. Et bien cela est facile. Il suffit d'ajouter une propriété dans le fichier config/properties.ini de votre projet, du genre :

author=nicolas

Désormais lorsqu'on créera un nouveau module, l'auteur sera nicolas. C'est quand même mieux que Fabien ! Mais ce n'est pas encore parfait car désormais c'est nicolas qui est l'auteur de tout le code. Il faudrait que ce soit celui qui a créé le fichier. Pour cela il faut encore modifier le fichier config/properties.ini et remplacer la ligne précédemment modifiée par la suivante

author="$Author: $"

Lorsqu'on va générer un nouveau module, à la place de la ligne

* @author     Your name here

* @author     $Author: $

Cela semble moins bien au premier abord mais il suffit d'ajouter à la propriété svn:keywords le mot clé Author.

svn propset svn:keywords Author actions.class.php

Après le premier commit, la ligne sera :

* @author     $Author: nicolas $

La ligne version n'est pas très belle non plus ! Il faut la changer en :

* @version    SVN: $Id: $


Il faut ensuite ajouter à la propriété svn:keywords le mot clé Id

svn propset svn:keywords 'Author Id' actions.class.php

On peut aussi éditer la propriété svn:keywords (svn propedit) et ajouter Id

L'idéal serait de faire cela automatiquement via la ligne de commande. Pour faire cela il faudrait modifier la tâche symfony init-module pour autoriser la modification de la version dans le fichier config/properties.ini et pour positionner automatiquement la propriété svn:keywords avec les bonnes valeurs. Pour faire cela, il faut modifier le fichier data/tasks/sfPakeGenerator de symfony puisqu'on ne peut pas (à ma connaissance) surcahrger les tâches.

Au final, la classe ressemble à ça:

<?php

/**
 * wiki actions.
 *
 * @package    wiki
 * @subpackage wiki
 * @author     $Author: nicolas $
 * @version    SVN: $Id: actions.class.php 10 2008-06-02 18:58:54Z nicolas $
 */
class wikiActions extends sfActions
{
  
/**
   * Executes index action
   *
   */
  
public function executeIndex()
  {
    
$this->forward('default''module');
  }
}

Haut de page