Attention!
Les concepts et les commandes présentés dans ce chapitre risquent de vous être peu familières, même si vous avez déjà utilisé d'autres systèmes de contrôle de révision. Ces commandes sont en fait vraiment simples une fois qu'on dépasse l'obstacle de leur apprentissage -- puis par la suite deviennent très pratiques.(The Name-based inventory Concept)
Dans une arborescence de projet, certains fichiers et répertoires « font partie du code source » -- ils intéressent particulièrement arch. D'autres fichiers peuvent être des fichiers temporaires (scratch files), des sauvegardes générées par votre éditeur de texte et des fichiers temporaires (ou intermédiaires) générés par vos programmes. Ces fichiers devraient être ignorés ou traités spécifiquement par la plupart des commandes de arch.
Ce chapitre étudie comment arch reconnaît les fichiers auxquels il lui faut prêter attention et ceux qu'ils peut ignorer.
On utilise la commande tla inventory --names --source pour afficher une liste de fichiers sources telle que déterminée par la convention de nommage. Cette commande reconnaît de nombreuses options, notamment les options qui permettent d'afficher d'autres types de de fichiers (telles que les listes de tous les fichiers de sauvegarde générés par l'éditeur de texte, ou une liste de tous les fichiers qui ne sont pas liés au code source).
Supposons qu'après l'avoir édité, notre arborescence ait cet air là :
% ls
hw.c hw.c.~1~ main.c {arch}
Le fichier hw.c.~1~ est un fichier de sauvegarde de l'éditeur de texte. tla le sait et omet ce fichier dans l'inventaire des sources :
% tla inventory --names --source ./hw.c ./main.c
tla peut afficher d'autres listes :
% tla inventory --names --backups ./hw.c.~1~
Cette section décrit les conventions de nommage par défaut utilisées par arch pour sélectionner les fichiers sources et les distinguer des autres types de fichiers. Dans un prochain chapitre nous décrirons comment personnaliser ces procédures pour une arborescence particulière (voir : « Personnaliser la convention de nommage de l'inventaire »).
La convention de nommage est basée sur plusieurs catégories de fichiers :
| . et .. | sont simplement ignorés par arch |
|
Les fichiers exclus sont normalement omis lors de l'affichage de l'inventaire, mais si l'option --all est passée à la commande inventory, ces fichiers sont alors rangés dans une des catégories suivantes et inclus dans la liste. |
| source | Ce sont les fichiers sources apparents. |
|
Fichiers non sources qui ne doivent pas être automatiquement effacés |
|
Fichiers non sources qui peuvent être effacés automatiquement |
|
Ce sont les fichiers non sources qui peuvent être automatiquement effacés, mais tout programme qui les efface devrait les traiter comme des fichiers de sauvegarde d'éditeur de texte (c'est-à-dire conserver le plus ancien et le plus récent des deux). |
|
Ce sont les fichiers qu'arch ne sait pas classer -- ils ne remplissent aucune des procédures de nommage ou ont des noms qui paraissent « suspects ». |
L'algorithme de classification des fichiers par nom a plusieurs règles. Pour chaque nom de fichier, chacune de ces règles est vérifiée dans l'ordre listé ci-dessus. La première règle rencontrée qui correspond au classement est alors utilisée.
? [ ] * \
^(.arch-ids|\{arch\})$
^,.*$
Astuce
Par ailleurs, ce motif par défaut donne lieu à une astuce pratique. Si on a besoin de créer un fichier d'essai dans une arborescence, on peut lui donner un nom qui commence par une virgule.^.*(~|\.~[0-9]+~)$ ^.*\.bak|\.orig|\.rej|\.original|\.modified|\.reject)$
^\+.*$ ^(\.gdbinit|\.#ckpts-lock)$ ^(=build\.*|=install\.*)$ ^(CVS|CVS\.adm|RCS|RCSLOG|SCCS|TAGS)$
.o .a .so .core
Par ailleurs, le nom de fichier « core » est (par défaut) traité comme « non reconnu ».
^([_=a-zA-Z0-9].*|\.arch-ids|\{arch\}|\.arch-project-tree)$
En d'autres termes, par défaut, les fichiers et les répertoires de contrôle d'arch sont les sources (si ils ne sont pas exclus). Les fichiers qui commencent par des lettres, des nombres, des underscores ou un signe équivalent sont des fichiers sources.
En s'appuyant sur notre exemple nous pouvons illustrer quelques-unes des conventions de nommage de fichiers.
Souvenez-vous que notre arborescence de projet a l'aspect suivant :
% ls
hw.c hw.c.~1~ main.c {arch}
Donc la liste standard des sources donne :
% tla inventory --names --source ./hw.c ./main.c
Et la liste de tous les fichiers sources (sans en exclure aucun) donne :
% tla inventory --names --source --all
./hw.c
./main.c
./{arch}/.arch-project-tree
./{arch}/=tagging-method
On peut inclure les répertoires dans la liste :
% tla inventory --names --source --all --both
./hw.c
./main.c
./{arch}
./{arch}/.arch-project-tree
./{arch}/=tagging-method
./{arch}/hello-world
./{arch}/hello-world/hello-world--mainline
[... sortie interrompue ...]
On peut aussi regarder les listes de fichiers non sources :
% tla inventory --names --backups ./hw.c.~1~
La commande inventory a de nombreuses options qu'on pourra explorer.
On peut modifier les motifs utilisés par inventory pour classer les fichiers. Ceci est expliqué dans un chapitre ultérieur (« Adaptation de la convention de nommage dans l'inventaire »).
De nombreux systèmes fournissent des conventions de nommage pour reconnaître les fichiers sources mais les utilisateurs qui débutent avec arch se demandent souvent pourquoi arch a besoin de tant de catégories de fichiers. Souvenons-nous que arch utilise les catégories :
excluded source precious junk backups unrecognized
Chaque catégorie est explicitée ci-dessous.
Il est souvent utile, lorsqu'on travaille sur un projet, de créer des fichiers « à effacer ». On pourrait vouloir compiler un petit programme de test ou sauvegarder, pour un moment, la sortie d'une commande. Lorsqu'on a accumulé plusieurs de ces fichiers à effacer, il peut être pratique de pouvoir s'en débarrasser d'un seul coup, sans avoir à méticuleusement les identifier et déterminer lequel jeter, lequel conserver. Les fichiers « junk » sont parfaits pour ça. Quand on crée un de ces fichiers à effacer, on lui donne un nom du type ,foo. Plus tard, on pourra tranquillement passer des commandes du type :
% rm ,* % find . -name ',*' | xargs rm % tla inventory --junk | xargs rm
Du point de vue de arch, les fichiers « junk » ont deux caractéristiques importantes. Tout d'abord, lorsqu'on copie une arborescence, les fichiers à effacer ne sont pas copiés. Ensuite, on considère comme sécurisant pour arch de pouvoir écraser un fichier à effacer. En fait, arch écrasera un fichier à effacer si ce nom de fichier commence par : ,.
Les fichiers de sauvegardes des éditeurs de texte, ainsi que les fichiers de sauvegarde créés par les programmes tels que patch sont souvent traités de manière particulière. Par exemple, si votre éditeur crée des sauvegardes numérotées (numbered backups), ceux-ci sont presque des fichiers à effacer. Mais plutôt que de tous les effacer, on pourrait vouloir n'en effacer que certains.
Pour arch ce qui est important c'est que lors d'une copie d'arborescence, les fichiers de sauvegarde ne devraient pas être copiés. Pour les utilisateurs, ce qui est probablement le plus efficace est d'utiliser l'astuce suivante, qui n'effacera pas les fichiers de sauvegarde :
% tla inventory --junk | xargs rm
Adopter les conventions de nommage des fichiers est une discipline que de nombreux programmeurs peuvent trouver inhabituelle, mais nous la recommandons pourtant fortement. Il est simple de suivre ces conventions et les outils tels que inventory et tree-lint (qui seront présentés plus tard) vous aideront à maintenir vos sources en évitant que leur contrôle vous échappe.
Version du 18/09/2004 21h14 : wilk@flibuste.net--libre docs-tla--fr--1.0 patch-102 ... base-0