Gestion de versions automatique

Bien que le client Subversion ne soit pas un client DeltaV complet et que le serveur Subversion n'implémente pas toutes les fonctionnalités d'un serveur DeltaV, il faut se féliciter de l'existence d'une petite lueur d'intéropérabilité WebDAV : la gestion de versions automatique.

La gestion de versions automatique est une fonctionnalité optionnelle définie dans le standard DeltaV. Un serveur DeltaV classique n'autorisera pas un client WebDAV non compatible à effectuer des opérations PUT sur un fichier suivi en versions. Pour modifier un tel fichier, le serveur exige un enchaînement précis de requêtes de gestion de versions : quelque chose comme MKACTIVITY, CHECKOUT, PUT, CHECKIN (c'est-à-dire : créer une activité, extraire le fichier suivi en versions, renvoyer le fichier modifié et assortir cette modification d'un commentaire). Mais si le serveur DeltaV supporte la fonctionnalité de gestion de versions automatique, les requêtes en écriture des clients WebDAV ordinaires sont acceptées. Le serveur agit comme si le client avait envoyé l'enchaînement de requêtes approprié, en faisant une propagation « sous le manteau ». En d'autres termes, la gestion de versions automatique permet à un serveur DeltaV de communiquer avec des clients WebDAV ordinaires qui ne disposent pas de fonctionnalités de gestion de versions.

Comme beaucoup de systèmes d'exploitation ont des clients WebDAV intégrés, cette fonctionnalité est particulièrement intéressante pour les administrateurs qui travaillent avec des utilisateurs non techniciens. Imaginez un bureau avec des utilisateurs « ordinaires » sous Microsoft Windows ou Mac OS. Chaque utilisateur « monte » le dépôt Subversion qui apparaît comme un lecteur réseau classique. Ils utilisent le partage réseau comme ils l'ont toujours fait : ils ouvrent les fichiers, les modifient et les sauvegardent. Pendant ce temps, le serveur assure automatiquement la gestion de versions. L'administrateur (ou tout autre utilisateur sachant le faire) peut toujours utiliser un client Subversion pour effectuer des requêtes sur l'historique des fichiers ou récupérer une vieille version.

Ce scénario n'est pas de la science-fiction : c'est du concret, qui fonctionne depuis la version 1.2 de Subversion. Pour activer la gestion de versions automatique dans mod_dav_svn, utilisez la directive SVNAutoversioning dans le bloc Location du fichier httpd.conf, comme dans l'exemple suivant :

<Location /depot>
  DAV svn
  SVNPath /var/svn/depot
  SVNAutoversioning on
</Location>

Quand la gestion de versions automatique de Subversion est active, les requêtes en écriture des clients WebDAV sont automatiquement transformées en propagations. Un message de propagation générique est créé et associé automatiquement à chaque révision.

Cependant, avant d'activer cette fonctionnalité, comprenez bien dans quoi vous vous engagez. Les clients WebDAV ont tendance à effectuer beaucoup de requêtes en écriture, ce qui engendre un nombre astronomique de propagations automatiques. Par exemple, lors d'une sauvegarde d'un fichier, beaucoup de clients effectuent un PUT pour un fichier de 0 octets (pour signifier qu'ils réservent le nom) suivi par un autre PUT avec les données effectives du fichier. La simple écriture d'un fichier entraîne ainsi deux propagations distinctes. Tenez également compte du fait que de nombreuses applications effectuent des sauvegardes automatiques régulièrement, toutes les cinq minutes par exemple, qui se traduisent par autant de propagations.

Si vous avez une procédure automatique qui envoie un e-mail après chaque propagation (post-commit), il est conseillé de désactiver cet envoi soit complètement soit au moins pour certaines parties du dépôt, selon que ces e-mails vous semblent apporter une plus-value ou pas. De plus, une procédure automatique post-commit bien pensée peut distinguer une propagation générée par la gestion de versions automatique d'une propagation classique. L'astuce consiste à examiner la propriété de révision dénommée svn:autoversioned. Si elle est présente, la propagation est issue d'un client WebDAV quelconque.

Une autre caractéristique utile et complémentaire de la gestion de versions automatique de Subversion est fournie par le module mod_mime d'Apache. Si un client WebDAV ajoute un nouveau fichier au dépôt, l'utilisateur n'a pas l'occasion de lui adjoindre la propriété svn:mime-type. Dans ce cas, il se peut que, lors de la navigation dans un répertoire partagé WebDAV, l'icône du fichier soit générique et qu'aucune application ne soit associée à ce fichier. Une solution peut être qu'un administrateur système (ou toute autre personne sachant utiliser Subversion) extraie une copie de travail et définisse manuellement la propriété svn:mime-type sur les fichiers concernés. Mais c'est un peu comme tenter de remplir le tonneau des Danaïdes, alors qu'il suffit de placer la directive ModMimeUsePathInfo dans le bloc <Location> de Subversion.

<Location /depot>
  DAV svn
  SVNPath /var/svn/depot
  SVNAutoversioning on

  ModMimeUsePathInfo on

</Location>

Cette directive autorise mod_mime à déduire automatiquement le type MIME des nouveaux fichiers qui entrent dans le dépôt de la gestion de versions automatique. Ce module examine l'extension du nom de fichier et éventuellement le contenu de celui-ci ; si certains motifs sont repérés, la propriété svn:mime-type est automatiquement renseignée.