This text is a work in progress—highly subject to change—and may not accurately describe any released version of the Apache™ Subversion® software. Bookmarking or otherwise referring others to this page is probably not such a smart idea. Please visit http://www.svnbook.com/ for stable versions of this book.
Subversion a la capacité de substituer des mots-clés dans les fichiers suivis en versions par des informations dynamiques et utiles. Les mots-clés fournissent généralement des indications sur les dernières modifications faites au fichier. Comme ces informations changent à chaque fois que le fichier change et, plus spécifiquement, juste après que le fichier change, c'est compliqué pour tout processus, excepté pour le système de gestion de versions, de garder les données à jour. Sans outil automatique, adieu la pertinence de ces informations !
Par exemple, prenons un document dont vous voulez
afficher la date de dernière modification. Vous pouvez charger
chaque contributeur du document de renseigner le champ
correspondant juste avant de propager ses changements. Mais un
jour ou l'autre, quelqu'un oubliera de le faire. Demandez plutôt
à Subversion de substituer le mot-clé
LastChangedDate
. Vous contrôlez où est inséré
le mot-clé dans votre document en plaçant un signet à l'endroit
voulu dans le fichier. Ce signet est juste une chaîne de
caractères formatée comme ceci :
$
NomDuMotClé
$
.
Ajouter un signet dans votre fichier ne fait rien de particulier. Subversion n"essayera jamais de le substituer tant que vous ne lui demandez pas explicitement de le faire. Après tout, vous êtes peut-être en train de rédiger un document[26] sur l'utilisation des mots-clés et vous ne voulez pas que Subversion substitue à vos beaux exemples de signets non substitués leur valeur réelle !.
Pour indiquer à Subversion que vous voulez substituer les
mots-clés d'un fichier particulier, nous nous tournons une fois
de plus vers les sous-commandes relatives aux propriétés. La
propriété svn:keywords
, quand elle est définie
sur un fichier suivi en versions, contrôle quels mots-clés doivent
être substitués dans ce fichier. Elle doit contenir une liste de
mots-clés ou d'alias séparés par des espaces.
Par exemple, admettons que vous ayez un fichier suivi en
versions nommé météo.txt
qui ressemble à
ceci :
Voici les dernières prévisions de nos spécialistes : $LastChangedDate$ $Rev$ Les cumulus sont de plus en plus nombreux au fur et à mesure que l'été approche.
Sans la propriété svn:keywords
définie sur
ce fichier, Subversion ne fait rien de spécial. À présent, si
nous activons les substitutions pour le mot-clé
LastChangedDate
:
$ svn propset svn:keywords "Date Author" météo.txt Propriété 'svn:keywords' définie sur 'météo.txt' $
Vous venez d'effectuer une modification locale des propriétés
du fichier météo.txt
. Vous ne verrez aucun
changement dans le contenu du fichier (à moins d'avoir fait des
modifications avant d'activer la propriété). Notez que le fichier
contenait un signet pour le mot-clé Rev
et que
nous n'avons pas inclus ce mot-clé dans la valeur de la propriété.
Subversion ignore simplement les requêtes de substitutions de
mots-clés qui ne sont pas présents dans le fichier et ne
substitue pas de mot-clé qui ne soit pas présent dans la valeur
de la propriété svn:keywords
.
Immédiatement après avoir propagé cette modification de
propriété, Subversion met à jour votre copie de travail avec le
nouveau texte substitué. Au lieu de voir votre signet
$LastChangedDate$
, vous voyez le résultat de la
substitution. Ce résultat contient aussi le nom du mot-clé et est
toujours entouré par des caractères dollar ($
).
Comme prévu, le mot-clé Rev
n'a pas été
substitué parce que nous n'avons pas demandé qu'il le soit.
Notez également que la substitution s'est bien passée alors
que nous avons indiqué Date Author
comme valeur
de propriété svn:keywords
et que le signet
utilisait l'alias
$LastChangedDate$
:
Voici les dernières prévisions de nos spécialistes : $LastChangedDate: 2006-07-22 21:42:37 -0700 (sam. 22 juil. 2006) $ $Rev$ Les cumulus sont de plus en plus nombreux au fur et à mesure que l'été approche.
Si quelqu'un d'autre propage une modification de
météo.txt
, votre copie de ce fichier
continue à afficher la même valeur substituée de mot-clé,
jusqu'à ce que vous mettiez à jour votre copie de travail. Aux
mots-clés de météo.txt
sont alors à nouveau
substituées les informations qui se rapportent à la plus récente
propagation du fichier.
Tous les mots-clés sont sensibles à la casse des caractères
quand ils apparaissent en tant que signets : vous devez
placer les majuscules aux bons endroits pour que le mot-clé soit
effectivement remplacé. Vous devez aussi considérer que la
valeur de la propriété svn:keywords
est
sensible à la casse (case-sensitive
en anglais) : certains mots-clés sont reconnus
indépendamment de la casse, mais ce comportement est
obsolète.
Subversion définit la liste des mots-clés disponibles pour les substitutions. Cette liste contient les cinq mots-clés suivants (certains d'entre eux ont des alias que vous pouvez aussi utiliser) :
Date
Ce mot-clé indique la date du dernier changement connu
dans le dépôt. Il est de la forme
$Date: 2006-07-22 21:42:37 -0700 (sam.
22 juil. 2006) $
. Il peut également être spécifié
en tant que LastChangedDate
.
Contrairement au mot-clé Id
, qui utilise
l'heure UTC, le mot-clé Date
affiche la
date et l'heure locales.
Revision
Ce mot-clé indique la dernière révision connue pour
laquelle le fichier a changé dans le dépôt. Il fournit une
réponse du type $Revision: 144 $
.
Il peut aussi être spécifié en tant que
LastChangedRevision
ou
Rev
..
Author
Ce mot-clé indique le nom du dernier utilisateur qui a
modifié le fichier dans le dépôt et retourne une valeur du
type $Author: harry $
. Il peut aussi être
spécifié en tant que
LastChangedBy
.
HeadURL
Ce mot-clé décrit l'URL complète de la dernière version
du fichier dans le dépôt et ressemble à $HeadURL:
http://svn.exemple.com/depot/trunk/calc.c $
. Il
peut être abrégé en URL
.
Id
Ce mot-clé est une combinaison abrégée des autres
mots-clés. Sa substitution donne quelque chose comme
$Id: calc.c 148 2006-07-28 21:30:43Z sally $
,
que l'on interprète comme suit : « Le fichier
calc.c
a été modifié en dernier par
l'utilisateur sally
lors de la révision
148 le 28 juillet 2006 au soir. » La date et l'heure
affichées sont en heure UTC, contrairement au mot-clé
Date
qui utilise l'heure locale.
Header
Ce mot-clé est similaire au mot-clé
Id
, mais contient l'URL complète de la
dernière révision de l'élément, à l'identique de
HeadURL
. Sa substitution donne un
résultat du type $Header:
http://svn.exemple.com/depot/trunk/calc.c 148 2006-07-28
21:30:43Z sally $
.
Une bonne partie des définitions qui précèdent utilisent la locution « dernière … connue » ou quelque chose d'équivalent. Rappelez-vous que la substitution des mots-clés est une opération effectuée côté client et que votre client ne connaît pas les changements qui ont eu lieu dans le dépôt depuis votre dernière mise à jour. Si vous ne mettez jamais à jour de votre copie de travail locale, vos mots-clés restent figés à la même valeur même si des changements ont lieu régulièrement dans le dépôt.
En complément de ces mots-clés et alias prédéfinis,
Subversion 1.8 vous permet de définir et d'utiliser les mots-clés
personnalisés. Pour définir un mot-clé personnalisé, ajoutez une
jeton à la propriété svn:keywords
avec la
syntaxe suivante :
.
MyMot-Clé
=FORMAT
MyMot-Clé
est le nom du mot-clé (celui
que vous utiliserez dans le signet) et
FORMAT
est une chaine formatée dans
laquelle l'information sera insérée lorsque le mot-clé sera
substitué dans votre fichier.
La syntaxe de la chaine formatée utilisée pour les mots-clés personnalisés accepte les codes de substitution suivants :
%a
L'auteur de la révision
%r
.
%b
Le nom de fichier de l'URL du fichier.
%d
La date de la révision
%r
au format court.
%D
La date de la révision
%r
au format long.
%P
Le chemin du fichier, relativement à la racine du dépôt.
%r
La dernière révision connue pour laquelle ce fichier a
été modifié dans le dépôt (c'est la même révision que pour
le mot-clé Revision
).
%R
L'URL de la racine du dépôt.
%u
L'URL du fichier.
%_
Un caractère « espace » (la définition d'un mot-clé ne peut pas contenir d'espace).
%%
Le caractère pourcent ('%
').
%H
Équivaut à %P%_%r%_%d%_%a
.
%I
Équivaut à %b%_%r%_%d%_%a
.
Comme vous pouvez le constater, beaucoup de codes de format reprennent les informations disponibles dans les mots-clés prédéfinis. Mais bien ûr, les mots-clés personnalisés vous offrent plus de souplesse dans l'organisation de l'information. Par exemple, vous pouvez avoir envie d'avoir un mot-clé dans vos fichiers qui donne le chemin relatif dans le dépôt du fichier et la dernière révision qui le modifie, formattée à votre convenance pour une meilleure lisibilité. Pour ce faire, vous devez d'abord définir votre mot-clé personnalisé :
$ svn pset svn:keywords "CheminRev=%P,%_r%r" calc/bouton.c Propriété 'svn:keywords' définie sur 'bouton.c' $
Ensuite, vous devez éditer votre fichier pour ajouter le
signet pour votre mot-clé, ce qui nous donne dans ce cas
$CheminRev$
. Après avoir propagé ces
modifications, si vous regardez le contenu du fichier, vous
constaterez que le mot-clé a été substitué conformément au
résultat attendu : où le fichier contenait
$CheminRev$
, il contient maintenant
$cheminRev: trunk/calc/bouton.c, r23 $
.
Note | |
---|---|
Subversion tronque automatiquement toute expansion de mot-clé qui dépasse 255 caractères de long. Les définitions de mots-clés dont le nom dépasse 255 caractères sont aussi ignorées. |
Vous pouvez aussi demander à Subversion de conserver une
longueur constante (en nombre d'octets consommés) pour la
substitution d'un mot-clé. En utilisant la séquence double
deux-points (::
), suivi par le nombre
de caractères désiré, vous définissez la largeur voulue. Quand
Subversion substituera le mot-clé pour le mot-clé et sa valeur, il
ne remplacera que les caractères espaces, laissant le reste du
champ de mot-clé inchangé. Si la valeur de substitution est plus
courte que la largeur définie, il y aura des caractères de
remplissage à la fin du champ substitué ; si elle est trop
longue, elle sera tronquée avec un caractère spécial
« dièse » (#
) juste avant le caractère
dollar qui sert de délimiteur de fin.
Par exemple, supposons que vous ayez un document dans lequel vous avez un paragraphe avec des données tabulées qui représentent les mots-clés Subversion du document. Si vous utilisez la syntaxe originale Subversion pour la substitution des mots-clés, votre fichier ressemblera à :
$Rev$: Révision de la dernière propagation $Author$: Auteur de la dernière propagation $Date$: Date de la dernière propagation
Tel quel, cela semble joli et bien aligné. Mais quand vous allez propager ce fichier (avec la substitution des mots-clés activée, bien évidemment), vous verrez :
$Rev: 12 $: révision de la dernière propagation $Author: harry $: auteur de la dernière propagation $Date: 2006-03-15 02:33:03 -0500 (mer. 15 Mar 2006) $: date de la dernière propagation
Le résultat n'est pas très heureux. Vous êtes alors tenté d'ajuster le fichier après la substitution pour le remettre en forme. Mais cela ne fonctionne que tant que les substitutions de mots-clés gardent la même longueur. Si le numéro de la dernière révision propagée passe de 99 à 100 par exemple, ou si une autre personne avec un nom d'utilisateur plus long propage le fichier, tout le travail est à refaire. Cependant, si vous travaillez avec Subversion 1.2 ou plus récent, vous pouvez utiliser la nouvelle syntaxe des mots-clés à longueur fixe et spécifier la largeur adéquate de certains champs ; le fichier ressemble alors à ceci :
$Rev:: $: révision de la dernière propagation $Author:: $: auteur de la dernière propagation $Date:: $: date de la dernière propagation
Propagez les modifications du fichier. Cette fois, Subversion prend
en compte la nouvelle syntaxe des mots-clés à longueur fixe et conserve
la largeur des champs telle que définie en complétant en tant que de
besoin entre le double deux-points et le dollar de fin. Après
substitution, la largeur des champs n'a pas changé : les valeurs
courtes comme Rev
et Author
sont
complétées avec des espaces et le champ Date
, trop
long, est tronqué par un caractère dièse :
$Rev:: 13 $: révision de la dernière propagation $Author:: harry $: auteur de la dernière propagation $Date:: 2006-03-15 0#$: date de la dernière propagation
L'utilisation de champs de mots-clés à longueur fixe est particulièrement utile lorsque vous faites des substitutions dans des fichiers dont le format est complexe et fait lui-même usage de champs à longueurs fixes ou lorsque la place disponible pour le stockage du champ de donnée est vraiment trop difficile à changer en dehors de l'application native elle-même. Bien sûr, dans le cas de fichiers binaires, vous devez toujours faire très attention à ce que les substitutions de mots-clés (à longueur fixe ou non) ne cassent pas l'intégrité du fichier. Bien que cela semble facile, cela peut être étonnament difficile pour la plupart des formats de fichiers binaires utilisés de nos jours et vous ne devez pas sous-estimer l'ampleur de cette tâche !
Avertissement | |
---|---|
Soyez conscient que, comme la taille d'un mot-clé est mesurée en octets, les valeurs utilisant des données codées sur plusieurs octets peuvent être corrompues. Par exemple, un nom d'utilisateur qui contient des caractères au format UTF-8 codés sur plusieurs octets risque d'être tronqué en plein milieu d'un de ces caractères multi-octets. Cette troncature est valide au niveau du traitement des octets mais résulte en une chaîne UTF-8 incorrecte en raison du caractère final tronqué. Il est ainsi possible que certaines applications, au moment de charger le fichier, remarquent que le texte UTF-8 est invalide, considèrent tout le fichier comme corrompu et refusent de travailler dessus. En conséquence, lorsque vous utilisez les mots-clés à longueur fixe, veillez à choisir une taille adaptée à des valeurs pouvant contenir des caractères éventuellement codés sur plusieurs octets. |