Configurer Apache pour de multiples dépôts Subversion

J’ai commencé à faire joujou avec Subversion dans le but de versionner mes développements et y adjoindre l’excellent Trac pour gérer les projets, les incidents et la documentation. Seulement voilà, je pars dans une optique où chaque projet dispose de son propre dépôt Subversion pour me faciliter la vie dans les fusions et autres manipulations amenant à croiser de nombreux fichiers.

S’il me paraissait logique de créer chaque dépôt manuellement dans Subversion, ça l’était en revanche beaucoup moins pour le serveur Web Apache. Je souhaite en effet disposer d’un accès HTTP, pour tester les différents protocoles SVN entre autre. Flemme oblige, je n’avais vraiment pas envie de configurer également des alias et configurations de répertoires pour chaque dépôt.

Une fois de plus, la flemme a vaincu.

Après avoir lu des billets intéressants sur l’installation de Subversion sur Ubuntu ainsi que l’installation de Subversion sur Ubuntu ou Debian, je devais me rendre à l’évidence : pour chaque dépôt créé, il faut également modifier (à la main) le fichier de configuration d’Apache.

§Directive DirectoryMatch

J’ai tenté de contourner le problème en utilisant la directive DirectoryMatch d’Apache mais impossible de récupérer le résultat du masque.
Si vous comptiez faire ceci, oubliez de suite, ce n’est pas possible :

1
2
3
4
5
<directorymatch "/chemin/vers/racine/svn/([a-z0-9-]*)>
DAV svn
SVNPath /chemin/vers/racine/svn/$1
...
</directorymatch>

En effet, DirectoryMatch ne fait que vérifier l’existence d’un chemin par rapport à un masque ; il n’en récupère pas le contenu pour une exploitation ultérieure. C’est bien dommage.

§Solution : SVNParentPath

Heureusement tout a été prévu (mais rarement mentionné). Au lieu d’utiliser SVNPath pour renseigner le chemin d’un seul dépôt, il vaut mieux utiliser SVNParentPath qui, lui, spécifie la racine des dépôts Subversion. En gros, tous les répertoires enfants à SVNParentPath sont considérés comme étant des dépôts (référentiels) indépendants.

Exactement ce qu’il me fallait.

Au final, après avoir cherché à configurer Subversion pour Windows, voici ce que j’ai rajouté dans ma config Apache :

1
2
3
4
5
6
7
8
9
10
<Location /svn>
DAV svn
# any /svn/foo URL will map to a repository D:/svn/foo
SVNParentPath D:/svn

#AuthType Basic
#AuthName "Subversion repository"
#AuthUserFile d:/svn/.htaccess
#Require valid-user
</Location>

Je ferai très probablement d’autres billets sur Subversion. Depuis le temps que je voulais m’y mettre, apprendre ses rouages et sa rigueur ne sont pas forcément faciles.