Un des gros avantages du framework Symfony, c'est qu'il est régulièrement mis à jour. En ce sens, l'utilisation de liaisons externes Subversion permet de s'affranchir des opérations récurrentes de mise à jour manuelles du code du framework.

Seul prérequis pour mettre en oeuvre la technique décrite ci-après, avoir accès à un dépôt Subversion pour y stocker son propre projet personnel.

Voyons donc comment créer un projet Symfony from scratch à partir des sources du dépôt officiel, sous Ubuntu par exemple...

Conventions

Nous admettrons que nous avons mis en place un dépôt Subversion et que celui-ci est accessible à l'URL http://trac.mondomaine.tld/svn/monprojet.

Création du projet subversion

$ mkdir monprojet  && cd monprojet

On versionne notre projet nouvellement créé dans Subversion et on en fait un checkout en suivant :

$ echo "Mon projet README" > README
$ svn import -m "Initial import" . http://trac.mondomaine.tld/svn/monprojet
$ rm README && svn co http://trac.mondomaine.tld/svn/monprojet .

Liaison des sources de Symfony

On récupère le contenu intégral du trunk de Symfony dans un répertoire virtuel vendor/symfony, grâce à un svn:externals :

$ mkdir vendor && svn add vendor
$ svn propset svn:externals "symfony http://svn.symfony-project.com/trunk/" vendor

On commite :

$ svn commit -m "Added svn:externals to sf trunk in vendor/" vendor/

On oublie pas d'updater :

$ svn up

L'intégralité du trunk de Symfony est alors téléchargé en local (cela peut prendre un peu de temps).

Création du projet Symfony

Pour bien utiliser les capacités de Subversion par la suite, on créé un répertoire trunk dans lequel nous allons initialiser notre projet Symfony :

$ mkdir trunk && cd trunk
$ ../vendor/symfony/data/bin/symfony init-project monprojet

De même, on crée en même temps les traditionnels répertoires branches et tags :

$ cd ..
$ mkdir branches tags

Pour l'heure, un ls -l nous donne à la racine du projet subversion :

$ ls -l
total 20
drwxr-xr-x  2 niko niko 4096 2007-02-07 17:02 branches
-rw-r--r--  1 niko niko   95 2007-02-07 16:47 README
drwxr-xr-x  2 niko niko 4096 2007-02-07 17:02 tags
drwxr-xr-x 13 niko niko 4096 2007-02-07 16:59 trunk
drwxr-xr-x  4 niko niko 4096 2007-02-07 16:56 vendor

Configuration du projet Symfony

Il faut maintenant configurer le projet Symfony pour qu'il sâche trouver les librairies de base que nous avons précédemment récupéré - et surtout que le projet soit portable -, en éditant le fichier trunk/config/config.php :

$sf_symfony_lib_dir  = dirname(__FILE__).'/../../vendor/symfony/lib';
$sf_symfony_data_dir = dirname(__FILE__).'/../../vendor/symfony/data';

On teste l'installation en lançant la commande ./symfony -T depuis la racine du projet Symfony :

$ cd trunk
$ ./symfony -T

Si ça marche, on ajoute tout ce qui est nouveau fichier, et on commite en suivant :

$ cd ..
$ svn stat | grep ? | awk '{ print $2 }' | xargs svn add
$ svn commit -m "File structure created, sf project initialized" .

On pourra également faire un lien symbolique vers le répertoire web/sf, ou bien le définir en tant qu'alias dans le vhost apache :

<VirtualHost toto.monprojet.tld>
  (...)
  alias /sf /path/to/vendor/data/web/sf
  (...)
</VirtualHost>

Conclusion

L'avantage de toutes ces manipulations est que désormais, un svn up mettra à jour non seulement les fichiers de notre application, mais également le framework en lui-même. Les éternels grincheux crieront au loup quand au danger de lier une version de développement (trunk), je leur répondrai qu'un svn:externals peut tout aussi bien pointer vers une révision ou un tag particulier.

Par exemple, si vous désirez éviter de lier le trunk de Symfony, vous pouvez lier la version 1.0RC2 en spécifiant son url dans votre svn:externals :

$ svn propset svn:externals "symfony http://svn.symfony-project.com/tags/RELEASE_1_0_0_rc2/" vendor

Pour la suite, je vous renvoie à la documentation officielle de Symfony :-)