Dans ce chapitre (dans la section intitulée « Stratégies de déploiement d'un dépôt »), nous avons passé en revue quelques décisions importantes à prendre avant de créer et de configurer votre dépôt Subversion. Maintenant nous allons enfin mettre les mains dans le cambouis ! Dans cette section, nous voyons comment créer un dépôt Subversion et comment le configurer pour qu'il effectue des actions personnalisées lorsque certains événements ont lieu.
La création d'un dépôt Subversion est une tâche incroyablement simple. L'utilitaire svnadmin, fourni avec Subversion, dispose d'une sous-commande qui est justement destinée à cela (svnadmin create) :
$ # Créer un dépôt $ svnadmin create /var/svn/depot $
Cette commande crée un dépôt dans le répertoire
/var/svn/depot
avec le magasin de données
par défaut. Avant la version 1.2 de Subversion, le choix par
défaut était l'utilisation d'une base de données Berkeley
DB ; maintenant c'est FSFS. Vous pouvez choisir
explicitement le type de système de fichiers avec l'option
--fs-type
qui accepte comme argument soit
fsfs
, soit bdb
.
$ # Créer un dépôt FSFS $ svnadmin create --fs-type fsfs /var/svn/depot $
$ # Créer un dépôt Berkeley DB $ svnadmin create --fs-type bdb /var/svn/depot $
Après l'exécution de cette simple commande, vous disposez d'un dépôt Subversion.
Astuce | |
---|---|
Le chemin en argument de svnadmin est
juste un chemin classique du système de fichiers, pas une URL
comme celles que le client svn utilise pour
spécifier un dépôt. Les commandes svnadmin
et svnlook sont toutes les deux considérées
comme des utilitaires coté serveur : elles sont utilisées
sur la machine qui héberge le dépôt pour examiner ou modifier
certains aspects du dépôt et ne sont pas capables d'effectuer
des actions via le réseau. Une erreur classique des nouveaux
utilisateurs de Subversion est d'essayer de passer une URL
(même « locale » comme |
Dans le sous-répertoire db/
de votre
dépôt, vous trouvez l'implémentation du système de fichiers
suivi en versions. Le nouveau système de fichiers suivi en
versions de votre dépôt commence sa vie à la révision 0, qui est
définie comme contenant le répertoire racine
(/
) et lui seul. Initialement, la révision 0
possède une seule propriété de révision,
svn:date
, dont la valeur est la date de
création du dépôt.
Maintenant que vous disposez d'un dépôt, il est temps de le personnaliser.
Avertissement | |
---|---|
Alors que certaines parties d'un dépôt Subversion sont conçues pour être examinées et modifiées « à la main » (comme les fichiers de configuration et les procédures automatiques), vous ne devez pas (et vous ne devriez pas avoir besoin de) modifier les autres parties « à la main ». L'outil svnadmin est censé être suffisant pour toutes les modifications à apporter à votre dépôt, mais vous pouvez également vous servir d'outils tiers (comme la suite d'outils Berkeley DB) pour configurer les parties adéquates du dépôt. Ne tentez surtout pas de manipuler manuellement l'historique du suivi de versions en touchant aux fichiers du magasin de données du dépôt ! |
Une procédure automatique (hook en anglais) est un programme activé par certains événements du dépôt, comme la création d'une nouvelle révision ou la modification d'une propriété non suivie en versions. Certaines procédures automatiques (appelées « pre hooks ») sont déclenchées avant l'opération sur le dépôt et permettent à la fois de rendre compte de ce qui va se passer et d'empêcher que cela se passe. D'autres procédures automatiques (appelées « post hooks ») sont déclenchées après la fin d'un événement et servent à effectuer des tâches de surveillance (mais pas de modification) du dépôt. Chaque procédure automatique reçoit suffisamment d'informations pour déterminer la nature de l'événement, les modifications proposées (ou effectuées) du dépôt et le nom d'utilisateur de la personne qui a déclenché l'événement.
Le sous-répertoire hooks
contient, par
défaut, des modèles pour diverses procédures
automatiques :
$ ls depot/hooks/ post-commit.tmpl post-unlock.tmpl pre-revprop-change.tmpl post-lock.tmpl pre-commit.tmpl pre-unlock.tmpl post-revprop-change.tmpl pre-lock.tmpl start-commit.tmpl $
Il y a un modèle pour chaque type de procédure automatique
que le dépôt Subversion sait prendre en charge ; en
examinant le contenu de ces modèles de scripts, vous pouvez
voir ce qui déclenche le script et quelles données sont passées
en paramètres. Vous trouvez également dans beaucoup de ces
scripts des exemples d'utilisation permettant de réaliser des
tâches récurrentes utiles, en conjonction avec d'autres
programmes fournis avec Subversion. Concrètement, pour activer
une procédure automatique, il suffit de placer dans le
répertoire depot/hooks
un programme ou un
script exécutable, qui sera invoqué via le nom de la procédure
automatique (comme start-commit pour le début
d'une propagation ou post-commit pour la fin
d'une propagation).
Sur les plateformes Unix, cela veut dire fournir un
programme ou un script (pouvant être un script shell, un
programme Python, l'exécutable binaire d'un programme en C ou
tout un tas d'autres choses) dont le nom est exactement le nom
de la procédure automatique. Bien sûr, les modèles qui sont
fournis ne le sont pas juste à titre d'information. Le moyen le
plus facile pour mettre en place une procédure automatique sur
les plateformes Unix consiste tout simplement à copier le
fichier du modèle adéquat vers un nouveau fichier qui n'aura
pas l'extension .tmpl
, d'adapter son
contenu à votre environnement et de vous assurer qu'il est
exécutable. Sous Windows, comme l'extension du fichier détermine
s'il est exécutable ou non, vous devez fournir un programme
dont la base du nom est le nom de la procédure automatique et
dont l'extension est l'une de celles reconnue comme exécutable
par Windows, comme .exe
pour les programmes
ou .bat
pour les fichiers batch.
Astuce | |
---|---|
Pour des raisons de sécurité, le dépôt Subversion exécute
les procédures automatiques avec un environnement vide —
c'est-à-dire sans aucune variable d'environnement définie,
même pas |
Les procédures automatiques de Subversion sont lancées par l'utilisateur propriétaire du processus ayant accès au dépôt Subversion. La plupart du temps, on accède au dépôt via un serveur Subversion, donc cet utilisateur est le même que celui qui fait tourner le processus serveur sur le système. Les procédures automatiques elles-mêmes doivent être configurées pour être exécutables, au niveau du système d'exploitation, par ledit utilisateur. Cela implique également que tout programme ou fichier (y compris le dépôt Subversion) utilisé directement ou indirectement par la procédure automatique l'est par ledit utilisateur. En d'autres termes, faites bien attention aux problèmes de droits d'exécution qui peuvent empêcher les scripts d'effectuer correctement les tâches pour lesquelles ils ont été conçus.
Il y a plusieurs procédures automatiques implémentées dans le dépôt Subversion et vous pouvez obtenir des détails sur chacune d'elles dans la section intitulée « Procédures automatiques du dépôt ». En tant qu'administrateur du dépôt, vous devez décider quelles procédures automatiques vous voulez mettre en œuvre (c'est-à-dire les nommer correctement et leur donner les droits appropriés) et de quelle manière. Lorsque vous prennez cette décision, gardez à l'esprit l'architecture de votre dépôt. Par exemple, si vous vous servez de la configuration du serveur pour déterminer les droits de propagation sur votre dépôt, vous n'avez pas besoin de mettre en place un contrôle d'accès de ce style via les procédures automatiques.
Les exemples de procédures automatiques librement accessibles sont légions, fournis par la communauté Subversion elle-même ou par d'autres. Ces scripts couvrent une large variété de besoins tels que le contrôle d'accès basique, le contrôle de cohérence, l'intégration avec les outils de suivis de bogues, les notifications de propagation par e-mail ou flux RSS, etc. Sinon, si vous voulez écrire votre propre programme, penchez-vous sur le Chapitre 8, Intégration de Subversion.
Avertissement | |
---|---|
Bien que les procédures automatiques soient capables de
faire tout et n'importe quoi, leurs auteurs devraient faire
preuve de modération dans un domaine précis :
ne modifiez pas une transaction de
propagation en utilisant une procédure automatique. Bien que
cela soit tentant de corriger automatiquement certaines
erreurs, raccourcis ou violations de politique constatées dans
les fichiers propagés, cela peut causer des problèmes.
Subversion conserve en cache, côté client, certaines parties
des données du dépôt et si vous modifiez une transaction de
propagation de cette façon, ces caches seront périmés sans que
cela ne puisse être détecté. De telles incohérences peuvent
aboutir à des comportements surprenants et inattendus. Au lieu
de modifier la transaction, contentez-vous de vérifier la
transaction dans la procédure automatique
|
Un environnement Berkeley DB peut encapsuler une ou plusieurs bases de données, fichiers de journalisation, de région et de configuration. L'environnement Berkeley DB a un ensemble propre de valeurs configurées par défaut comme par exemple le nombre de verrous autorisés à un instant donné, la taille maximum des fichiers de journalisation, etc. La logique du système de fichiers Subversion ajoute des valeurs par défaut pour différentes options de configuration du gestionnaire Berkeley DB. Cependant, il se peut que votre dépôt nécessite une configuration différente en raison de l'architecture de vos données et des méthodes d'accès.
Les concepteurs du gestionnaire de bases de données Berkeley
DB comprennent que les besoins varient entre les différentes
applications et environnements de bases de données, c'est
pourquoi ils fournissent des mécanismes pour modifier, à
l'exécution, une grande partie des valeurs des options de
configuration. BDB vérifie la présence d'un fichier nommé
DB_CONFIG
dans le répertoire
d'environnement (à savoir le sous-répertoire db
du dépôt) et en extrait les valeurs des options. Subversion crée
ce fichier lorsqu'il crée le reste du dépôt. Le fichier contient
initialement des options par défaut ainsi que des pointeurs vers
la documentation en ligne de Berkeley DB afin de vous renseigner
sur l'utilisation de ces options. Bien sûr, vous êtes libre
d'ajouter n'importe quelle option prise en compte par Berkeley
DB dans votre fichier DB_CONFIG
. Soyez
juste attentif au fait que, bien que Subversion n'essaie jamais
de lire ou interpréter le contenu de ce fichier et qu'il n'en
utilise pas directement la configuration, les changements
induits dans le comportement de Berkeley DB ne doivent pas aller
à l'encontre du comportement attendu par Subversion. Par
ailleurs, les changements effectués dans
DB_CONFIG
ne sont pris en considération
qu'après avoir effectué une restauration de l'environnement de
la base de données avec la commande
svnadmin recover.