Zone de configuration des exécutables

Subversion permet à l'utilisateur de contrôler finement son comportement. Beaucoup d'options ont vocation à s'appliquer à l'ensemble des opérations de Subversion. Ainsi, plutôt que de forcer les utilisateurs à se souvenir d'arguments en ligne de commande pour spécifier ces options et de les utiliser à chaque invocation, Subversion utilise des fichiers de configuration, tenus à l'écart dans une zone de configuration spécifique à Subversion.

La zone de configuration Subversion consiste en une hiérarchie à deux niveaux constituée de noms d'options et de leurs valeurs. Habituellement, cela se traduit par un répertoire dédié qui contient les fichiers de configuration (le premier niveau) : des fichiers texte au format standard INI (dont les « sections » constituent le deuxième niveau). Vous pouvez facilement éditer ces fichiers à l'aide de votre éditeur de texte favori (tel qu'Emacs ou vi). Ils contiennent des directives lues par le client Subversion afin de déterminer le comportement par défaut choisi par l'utilisateur.

Agencement de la zone de configuration

La première fois que le client svn en ligne de commande est exécuté, il crée une zone de configuration propre à l'utilisateur. Sur les systèmes de type Unix, cette zone est un répertoire nommé .subversion dans le répertoire personnel de l'utilisateur. Sur les systèmes Windows, Subversion crée un dossier nommé Subversion, généralement dans la zone Application Data du répertoire qui contient le profil de l'utilisateur (qui est habituellement, au passage, un répertoire caché). Cependant, sur cette plateforme, l'emplacement exact du profil utilisateur varie d'un système à l'autre et est dicté par la base de registre Windows [51]. Nous nous référerons à cette zone de configuration propre à l'utilisateur en utilisant son nom Unix : .subversion.

En plus de la zone de configuration propre à l'utilisateur, Subversion reconnaît l'existence d'une zone de configuration globale pour le système. Cela permet aux administrateurs du système d'établir une configuration par défaut pour l'ensemble des utilisateurs d'une machine donnée. Notez que la zone de configuration globale seule ne fixe pas de politique définitive : les réglages de l'utilisateur sont prioritaires par rapport aux réglages globaux et les options de la ligne de commande ont toujours le dernier mot. Sur les plateformes de type Unix, la zone de configuration globale doit se trouver dans le répertoire /etc/subversion ; sur les machines Windows, Subversion cherche un répertoire Subversion dans le dossier commun Application Data (là encore, l'endroit exact dépend de la base de registre Windows). Au contraire de la zone propre à l'utilisateur, le programme svn ne tente pas de créer la zone de configuration globale.

La zone de configuration propre à l'utilisateur contient actuellement trois fichiers : deux fichiers de configuration (config et servers) et un fichier README.txt qui décrit le format INI. Lors de leur création, ces fichiers contiennent les valeurs par défaut de toutes les options supportées par Subversion, généralement mises en commentaire et groupées avec une description textuelle de l'effet de la clé sur le fonctionnement de Subversion. Pour modifier un comportement précis, il suffit de charger le fichier de configuration dans un éditeur de texte et de changer la valeur de l'option correspondante. Si, par la suite, vous voulez rétablir les valeurs par défaut, vous n'avez qu'à supprimer ou renommer votre répertoire de configuration puis lancer une commande svn inoffensive, telle que svn --version. Un nouveau répertoire de configuration sera créé, qui contiendra les valeurs par défaut.

La zone de configuration propre à l'utilisateur contient également un cache pour les données d'authentification. Le répertoire auth héberge un ensemble de sous-répertoires qui contiennent des informations mises en cache, relatives aux différentes méthodes d'authentification utilisées par Subversion. Ce répertoire est créé de telle manière que seul l'utilisateur ait accès à son contenu.

Configuration via la base de registre Windows

En plus de la zone de configuration classique contenant les fichiers INI, les clients Subversion qui tournent sur une plateforme Windows peuvent aussi utiliser la base de registre Windows pour stocker leurs données de configuration. Les noms des options et leurs valeurs sont les mêmes que dans les fichiers INI. La hiérarchie « fichier/section » est également présente, bien que traitée de manière légèrement différente : dans ce cas, les fichiers et les sections sont juste des niveaux dans l'arborescence des clés de registres.

Subversion cherche les valeurs de configuration applicables à tout le système sous la clé HKEY_LOCAL_MACHINE\Software\Tigris.org\Subversion. Par exemple, l'option global-ignores, qui se trouve dans la section miscellany du fichier de configuration, est située dans HKEY_LOCAL_MACHINE\Software\Tigris.org\Subversion\Config\Miscellany\global-ignores. Les valeurs propres à un utilisateur doivent être stockées sous HKEY_CURRENT_USER\Software\Tigris.org\Subversion.

Les options de configuration de la base de registre sont analysées avant les options des fichiers INI ; elles sont donc supplantées par les valeurs trouvées dans les fichiers de configuration. En d'autres termes, Subversion cherche les options de configuration dans l'ordre suivant sur un système Windows (les plus prioritaires sont citées en premier) :

  1. les options en ligne de commande ;

  2. les fichiers INI propres à l'utilisateur ;

  3. les valeurs de la base de registre propres à l'utilisateur ;

  4. les fichiers INI applicables à l'ensemble du système ;

  5. les valeurs de la base de registre applicables à l'ensemble du système.

Par ailleurs, la base de registre Windows ne supporte pas vraiment la notion de « mise en commentaire ». Cependant, Subversion ignorera toute clé dont le nom commence par le caractère dièse (#). Cela vous permet de mettre en commentaire efficacement une option Subversion sans avoir à effacer entièrement la clé de la base de registre, ce qui simplifie manifestement la procédure de restauration de l'option.

Le client en ligne de commande svn n'écrit jamais dans la base de registre et ne tentera pas d'y créer une zone de configuration par défaut. Vous pouvez créer les clés dont vous avez besoin en utilisant le programme REGEDIT. Une autre alternative consiste à créer un fichier .reg (tel que celui donné dans l'Exemple 7.1, « Exemple de fichier de modification de la base de registre (.reg) ») puis à double-cliquer sur l'icône de ce fichier dans l'explorateur Windows afin d'appliquer les modifications à votre base de registre.

Exemple 7.1. Exemple de fichier de modification de la base de registre (.reg)

REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Tigris.org\Subversion\Servers\groups]

[HKEY_LOCAL_MACHINE\Software\Tigris.org\Subversion\Servers\global]
"#http-proxy-host"=""
"#http-proxy-port"=""
"#http-proxy-username"=""
"#http-proxy-password"=""
"#http-proxy-exceptions"=""
"#http-timeout"="0"
"#http-compression"="yes"
"#neon-debug-mask"=""
"#ssl-authority-files"=""
"#ssl-trust-default-ca"=""
"#ssl-client-cert-file"=""
"#ssl-client-cert-password"=""

[HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\auth]
"#store-passwords"="yes"
"#store-auth-creds"="yes"

[HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\helpers]
"#editor-cmd"="notepad"
"#diff-cmd"=""
"#diff3-cmd"=""
"#diff3-has-program-arg"=""

[HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\tunnels]

[HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\miscellany]
"#global-ignores"="*.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store"
"#log-encoding"=""
"#use-commit-times"=""
"#no-unlock"=""
"#enable-auto-props"=""

[HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\auto-props]

L'exemple précédent présente le contenu d'un fichier .reg qui contient quelques unes des options les plus communément utilisées et leurs valeurs par défaut. Notez la présence de réglages propres à l'utilisateur (notamment l'éditeur de texte et le stockage des mots de passe) ainsi que de réglages applicables à l'ensemble du système (comme les options relatives au mandataire réseau). Notez également que toutes les options sont mises en commentaire. Il ne vous reste qu'à supprimer le caractère dièse (#) initial des noms d'options et à leur affecter la valeur que vous souhaitez.

Options de configuration

Dans cette section, nous allons nous intéresser aux options de configuration des programmes supportées par la version actuelle de Subversion.

Fichier servers

Le fichier servers contient les options de configuration relatives aux couches réseau. Il y a deux sections spéciales dans ce fichier : groups et global. La section groups n'est rien d'autre qu'un tableau de références croisées. Les clés de cette section sont les noms des autres sections du fichier ; ses valeurs sont des globs (des représentations textuelles qui peuvent contenir des caractères joker) qui sont comparés aux noms des machines auxquelles des requêtes Subversion sont envoyées.

[groups]
serveurs-red-beans = *.red-bean.com
collabnet = svn.collab.net

[serveurs-red-beans]
…

[collabnet]
…

Quand vous utilisez Subversion en réseau, il essaie de faire correspondre le nom du serveur auquel il tente de se connecter avec un nom de groupe de la section groups. Si une correspondance existe, Subversion vérifie alors s'il existe dans le fichier servers une section dont le nom est le nom du groupe correspondant. Le cas échéant, il tire de cette section la configuration réseau à appliquer.

La section global contient la configuration à appliquer à tous les serveurs qui ne correspondent à aucun glob de la section groups. Les options disponibles dans cette section sont exactement les mêmes que pour les autres sections du fichier (exceptée bien sûr la section spéciale groups) et sont :

http-proxy-exceptions

Cette option contient une liste de motifs (séparés par des virgules) de noms de machines qui doivent être contactées directement, sans passer par le mandataire. La syntaxe des motifs est la même que celle utilisée par le shell Unix pour les noms de fichiers. L'accès aux dépôts d'une machine dont le nom correspond à l'un de ces motifs se fera sans passer par un mandataire.

http-proxy-host

Cette option contient le nom de la machine mandataire pour les requêtes HTTP de Subversion. La valeur par défaut est vide, ce qui signifie que Subversion ne tentera pas de faire passer ses requêtes par un mandataire mais essaiera de contacter la machine de destination directement.

http-proxy-port

Cette option contient le numéro du port à utiliser sur la machine mandataire. Par défaut, la valeur est vide.

http-proxy-username

Cette option contient le nom d'utilisateur à fournir à la machine mandataire. Par défaut, la valeur est vide.

http-proxy-password

cette option contient le mot de passe à fournir à la machine mandataire. Par défaut, la valeur est vide.

http-timeout

Cette option contient la durée maximum, en secondes, pendant laquelle Subversion attend la réponse du serveur. Si vous rencontrez des problèmes d'opérations Subversion qui expirent à cause d'une connexion réseau trop lente, vous devez augmenter cette valeur. Par défaut, la valeur est 0, ce qui conduit la bibliothèque HTTP sous-jacente (Neon) à utiliser sa propre valeur par défaut.

http-compression

Cette option indique si oui ou non Subversion doit essayer de compresser les requêtes réseaux à destination de serveurs DAV. La valeur par défaut est yes. Notez que la compression ne sera effective que si la couche réseau a été compilée avec le support de la compression. Mettez no pour ne pas activer la compression, par exemple lorsque vous analysez les transmissions réseaux.

http-library

Subversion est fourni avec deux modules d'accès aux dépôts qui utilisent le protocole réseau WebDAV. Le module originel, fourni avec Subversion 1.0, est libsvn_ra_neon (bien qu'en ce temps-là, il s'appelait libsvn_ra_dav). Les nouvelles versions de Subversion fournissent également libsvn_ra_serf, qui utilise une implémentation sous-jacente différente et qui vise à supporter certains des concepts HTTP les plus récents.

Actuellement, libsvn_ra_serf est toujours considérée en version expérimentale, bien qu'elle semble fonctionner correctement dans les cas usuels. Afin d'inciter les gens à l'essayer, Subversion fournit l'option de configuration http-library pour permettre aux utilisateurs de définir (globalement ou par groupe de serveurs) quel module d'accès WebDAV ils veulent utiliser : neon ou serf.

http-auth-types

Cette option liste les méthodes d'authentification (séparées par des points-virgules) supportées par les module d'accès aux dépôts WebDAV basés sur Neon. Les valeurs valides sont : basic, digest et negotiate.

neon-debug-mask

Cette option contient un entier qui représente un masque que la bibliothèque HTTP sous-jacente (Neon) utilise pour choisir quel type d'affichage de débogage autoriser. La valeur par défaut est 0, ce qui interdit tout affichage de débogage. Pour plus d'informations sur l'utilisation de Neon par Subversion, reportez-vous au Chapitre 8, Intégration de Subversion.

ssl-authority-files

Cette option contient une liste de chemins (séparés par des points-virgules) vers les fichiers contenant les certificats des autorités de certifications (AC) qui doivent être reconnues comme de confiance par le client Subversion lors des accès aux dépôts en HTTPS.

ssl-trust-default-ca

Mettez cette variable à yes si vous voulez que Subversion fasse automatiquement confiance à l'ensemble des autorités de certification livrées par défaut avec OpenSSL.

ssl-client-cert-file

Si un hôte (ou un ensemble d'hôtes) demande un certificat SSL au client, vous serez sollicité pour fournir le chemin de votre certificat. Dès que cette variable contient ce chemin, Subversion sera capable de trouver automatiquement votre certificat et ne vous sollicitera pas. Il n'existe pas d'emplacement standard pour stocker un certificat utilisateur sur le disque ; Subversion va le chercher à l'endroit que vous lui spécifiez.

ssl-client-cert-password

Si votre certificat client SSL est protégé par une phrase de passe, Subversion vous la demandera à chaque fois que le certificat est utilisé. Si vous trouvez cela pénible (et que cela ne vous dérange pas que cette phrase de passe soit stockée dans le fichier servers), vous pouvez placer dans cette variable la phrase de passe de votre certificat. Vous ne serez plus sollicité.

Fichier config

Le fichier config contient le reste des options du programme Subversion disponibles actuellement, c'est-à-dire celles qui ne se rapportent pas au réseau. Au moment où ces lignes sont écrites, seules quelques options sont utilisées, mais elles sont quand même regroupées en sections en prévision d'ajouts futurs.

La section auth contient les paramètres relatifs à l'authentification et au contrôle d'accès de Subversion pour les dépôts. Elle comprend les options suivantes :

store-passwords

Cette option demande à Subversion de garder en cache (ou non) les mots de passe qui sont tapés par l'utilisateur en réponse aux demandes d'authentification des serveurs. La valeur par défaut est yes. Remplacez cette valeur par no pour désactiver la mise en cache sur le disque. Vous pouvez outrepasser cette option pour un appel donné d'une commande svn en utilisant l'option de ligne de commande --no-auth-cache (pour les sous-commandes qui acceptent cette option). Pour plus d'informations, consultez la section intitulée « Mise en cache des éléments d'authentification du client ».

store-auth-creds

cette option est équivalente à store-passwords sauf qu'elle applique la mise en cache sur le disque (ou non) à l'ensemble des informations d'authentification : identifiants, mots de passe, certificats serveur et tout autre type d'élément pouvant être mis en cache.

La section helpers définit quelles sont les applications externes utilisées par Subversion pour accomplir ses tâches. Les options valides dans cette section sont :

editor-cmd

Cette option indique le programme utilisé par l'utilisateur auquel Subversion demande d'entrer des méta-données textuelles ou de résoudre les conflits de manière interactive. Consultez la section intitulée « Utilisation d'éditeurs externes » pour plus de détails sur l'utilisation d'un éditeur de texte externe avec Subversion.

diff-cmd

Cette option contient le chemin absolu du programme de comparaison qui est utilisé lorsque Subversion doit afficher à l'utilisateur plusieurs fichiers à comparer (par exemple lors de l'utilisation de la commande svn diff). Par défaut, Subversion utilise une bibliothèque interne de comparaison. Définir cette option le forcera à utiliser un programme externe pour effectuer cette tâche. Consultez la section intitulée « Utilisation des outils externes de comparaison et de fusion » pour plus de détails sur l'utilisation de tels programmes.

diff3-cmd

Cette option contient le chemin absolu d'un programme de comparaison à trois entrées. Subversion utilise ce programme pour fusionner les changements effectués par l'utilisateur avec ceux en provenance du dépôt. Par défaut, Subversion utilise une bibliothèque interne de comparaison. Définir cette option le forcera à utiliser un programme externe pour effectuer cette tâche. Consultez la section intitulée « Utilisation des outils externes de comparaison et de fusion » pour plus de détails sur l'utilisation de tels programmes.

diff3-has-program-arg

Ce drapeau doit être mis à true si le programme spécifié par l'option diff3-cmd accepte l'option --diff-program en ligne de commande.

merge-tool-cmd

Cette option contient le programme que Subversion utilise pour effectuer les opérations de fusion à trois sources sur vos fichiers suivis en versions. Consultez la section intitulée « Utilisation des outils externes de comparaison et de fusion » pour plus de détails sur l'utilisation de tels programmes.

La section tunnels vous permet de définir de nouveaux tunnels à utiliser avec les connexions clientes svnserve et svn://. Pour plus de détails, consultez la section intitulée « Encapsulation de svnserve dans un tunnel SSH ».

La section miscellany récolte tout ce qui n'a pas sa place ailleurs [52] Dans cette section, vous trouvez :

global-ignores

Quand vous exécutez la commande svn status, Subversion affiche la liste des fichiers et répertoires non suivis en versions avec ceux qui sont suivis en versions, en les marquant d'un caractère ? (voir la section intitulée « Avoir une vue d'ensemble des changements effectués »). Parfois, ces éléments inutiles et non suivis en version ne font que rendre l'affichage plus confus, par exemple dans le cas des fichiers objets générés par les compilations. L'option global-ignores contient une liste de globs séparés par des espaces qui décrivent les noms de fichiers et de répertoires que Subversion ne doit pas afficher, sauf s'ils sont suivis en versions. La valeur par défaut est *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store.

Tout comme svn status, les commandes svn add et svn import ignorent les fichiers qui entrent en correspondance avec la liste lors du parcours d'un répertoire. Vous pouvez bloquer ce comportement pour une instance donnée de ces commandes en spécifiant explicitement le nom de fichier ou en utilisant l'option --no-ignore en ligne de commande.

Vous pouvez trouvez des informations pour contrôler plus finement les éléments ignorés dans la section intitulée « Occultation des éléments non suivis en versions ».

enable-auto-props

Cette option demande à Subversion d'ajouter automatiquement des propriétés sur les fichiers nouvellement ajoutés ou importés. La valeur par défaut est no, vous devez donc lui affecter la valeur yes pour activer cette fonctionnalité. La section auto-props de ce fichier spécifie quelles propriétés doivent être définies sur quels fichiers.

log-encoding

Cette option définit la valeur par défaut du codage des caractères des messages de propagation. C'est le pendant permanent de l'option --encoding (voir la section intitulée « Options de svn »). Le dépôt Subversion stocke les messages de propagation en UTF-8 et suppose que votre message est écrit en utilisant le codage défini par votre système d'exploitation. Vous devez spécifier un codage différent si vos messages de propagation sont rédigés avec un autre codage.

use-commit-times

Normalement, les fichiers de votre copie de travail sont datés de manière à indiquer la dernière fois qu'ils ont été manipulés par n'importe quel processus, que ce soit votre éditeur de texte ou une sous-commande svn. C'est le comportement attendu généralement par les développeurs de logiciels, puisque les systèmes de compilation examinent souvent ces dates pour décider quels fichiers doivent être recompilés.

Dans d'autres situations, cependant, il est préférable d'avoir une date qui indique la dernière fois que le fichier a été modifié dans le dépôt. La commande svn export marque « la date de la dernière propagation » sur les arborescences qu'elle produit. En mettant cette variable de configuration à yes, les commandes svn checkout, svn update, svn switch et svn revert marqueront également les fichiers qu'elles modifient avec la date de dernière propagation.

mime-types-file

Cette option est apparue dans Subversion 1.5. Elle spécifie le chemin d'un fichier de correspondance pour les types MIME, de la même manière que le fichier mime.types fourni par le serveur HTTP Apache. Subversion utilise ce fichier pour associer des types MIME aux nouveaux fichiers ajoutés ou importés. Consultez la section intitulée « Configuration automatique des propriétés » et la section intitulée « Type de contenu des fichiers » pour plus d'informations sur la détection et l'utilisation des types de fichiers par Subversion.

preserved-conflict-file-exts

La valeur de cette option est une liste d'extensions de fichiers (séparées par des espaces) que Subversion doit préserver quand il génère des noms de fichiers lors des conflits. Par défaut, cette liste est vide. C'est une nouvelle option apparue dans Subversion 1.5.

Quand Subversion détecte des conflits dans les modifications effectuées sur un fichier, il soumet la résolution de ces conflits à l'utilisateur. Pour aider l'utilisateur à les résoudre, Subversion garde une copie originale des différentes versions en lice du fichier dans la copie de travail. Par défaut, ces fichiers ont des noms construits en ajoutant au nom de fichier original une extension particulière telle que .mine ou .REV (où REV est un numéro de révision). Ceci peut être gênant sur les systèmes d'exploitation qui utilisent les extensions de noms de fichiers pour déterminer l'application par défaut à utiliser pour ouvrir et éditer le fichier, le fichier avec la nouvelle extension n'étant plus automatiquement ouvert dans l'application prévue. Par exemple, si le fichier NotesDeVersion.pdf est en conflit, les fichiers générés risquent de s'appeler NotesDeVersion.pdf.mine ou NotesDeVersion.pdf.r4231. Bien que votre système soit peut-être configuré pour ouvrir les fichiers .pdf ave Acrobat Reader, il n'existe sûrement pas d'application préconfigurée pour ouvrir les fichiers avec l'extension .r4231.

Vous pouvez arranger cela en utilisant cette option de configuration. Pour les fichiers dont l'extension est spécifiée, Subversion ajoutera au nom des fichiers générés l'extension particulière liée au conflit, mais il rajoutera aussi à la suite l'extension originale. Dans l'exemple précédent, en supposant que pdf est une des extensions configurée dans la liste ci-dessus, les noms des fichiers générés pour NotesDeVersion.pdf vont être NotesDeVersion.pdf.mine.pdf et NotesDeVersion.pdf.r4231.pdf. Comme chaque fichier se termine par .pdf, l'application appropriée sera utilisée pour les visualiser.

interactive-conflicts

Cette option est une option booléenne qui indique si Subversion doit essayer de résoudre les conflits de manière interactive. Si la valeur est yes (qui est la valeur par défaut), Subversion demandera à l'utilisateur comment gérer les conflits, comme indiqué dans la section intitulée « Résoudre les conflits (fusionner des modifications) ». Autrement, il marquera simplement qu'il existe un conflit et continuera l'opération en cours, remettant sa résolution à plus tard.

no-unlock

Cette option booléenne correspond à l'option --no-unlock de svn commit. Elle indique à Subversion de ne pas libérer les verrous posés sur les fichiers que vous venez de propager. Si cette option est positionnée à yes, Subversion ne libérera jamais aucun verrou automatiquement, vous laissant le faire explicitement avec svn unlock. La valeur par défaut est no.

La section auto-props contrôle la possibilité par le client Subversion de positionner automatiquement certaines propriétés sur les fichiers qui sont ajoutés ou importés. Elle contient un nombre arbitraire de paires clé-valeur au format MOTIF = NOM_PROPRIETE=VALEUR[;NOM_PROPRIETE=VALEUR ...], où MOTIF est un motif de nom de fichier qui correspond à un ou plusieurs noms de fichiers et le reste de la ligne est une liste d'affectations (séparées par des points-virgules) de valeurs à des propriétés. Si un nom de fichier correspond à plusieurs motifs, autant de propriétés seront positionnées ; cependant, il n'y a aucune garantie que les auto-props seront appliquées dans l'ordre dans lequel elles apparaissent dans le fichier config ; il ne faut donc pas définir de règles susceptibles d'en écraser d'autres. Vous pouvez trouver de nombreux exemples d'utilisation d'auto-props dans le fichier config. Enfin, n'oubliez pas de positionner enable-auto-props à yes dans la section miscellany si vous voulez activer auto-props.



[51] La variable d'environnement APPDATA pointe vers la zone Application Data, vous pouvez donc toujours faire référence à ce dossier en utilisant %APPDATA%\Subversion.

[52] En clair, c'est un joyeux fourre-tout.