logo chat

Contact/Email

printImpression

Valid XHTML 1.0!

william dodé

Traduction du tutoriel Arch de Thomas Lord

Inventaires d'arborescence de projet

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.

Le concept d'inventaire par nom

(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.

La commande d'inventaire

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~

Les conventions de nommage de arch

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
excluded
(exclusions)
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.
precious
(précieux)
Fichiers non sources qui ne doivent pas être automatiquement effacés
junk
(poubelle)
Fichiers non sources qui peuvent être effacés automatiquement
backups
(sauvegardes)
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).
unrecognized
(inconnus)
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.

Fichiers exclus (dot files)
Les fichiers spéciaux . et .. sont toujours exclus des inventaires.
Les noms « non compatibles » (non portable) ne sont pas reconnus
Les noms de fichiers qui contiennent des espaces, des caractères non imprimables ou un « globbing-character » sont toujours classés comme non reconnus. Les « globbing-characters » sont :
? [ ] * \
Test des fichiers exclus
Si l'option --all n'est pas passée à la commande inventory, les noms de fichiers qui correspondent au motif d'exclusion sont exclus de la liste. Si le nom d'un répertoire est exclu, son contenu est également exclu. Par défaut, le motif d'exclusion des fichiers correspond au fichiers de contrôle créés par arch lui-même :
^(.arch-ids|\{arch\})$
Test des fichiers poubelles
Tous les noms de fichiers qui atteignent cette étape et qui commencent avec deux virgules (,,) sont classés comme « à jeter » (junk). Les fichiers temporaires créés par arch lui-même commencent par deux virgules. Par défaut, ce motif correspond aux noms de fichiers qui commencent par (au moins) une virgule :
^,.*$

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.
Test des fichiers de sauvegardes
Par défaut, tout fichier qui atteint cette étape et qui correspond au motif suivant est considéré comme un fichier de sauvegarde :
^.*(~|\.~[0-9]+~)$
^.*\.bak|\.orig|\.rej|\.original|\.modified|\.reject)$
Test des fichiers précieux
Par défaut, tout fichier qui atteint cette étape et qui correspond au motif suivant :
^\+.*$
^(\.gdbinit|\.#ckpts-lock)$
^(=build\.*|=install\.*)$
^(CVS|CVS\.adm|RCS|RCSLOG|SCCS|TAGS)$
Test des fichiers suspects (non reconnus)
Certains noms de fichiers qui atteignent cette étape sont explicitement traités comme « non reconnus » en présumant qu'ils ne devraient probablement pas être présents dans une arborescence. Par défaut, les noms qui se terminent par une des extensions suivantes sont « non reconnus » :
.o
.a
.so
.core

Par ailleurs, le nom de fichier « core » est (par défaut) traité comme « non reconnu ».

Test des fichiers sources
Les fichiers qui atteignent cette étape sont comparés au motif des fichiers sources. Le motif par défaut est montré ci-dessous. On devrait noter que ce motif chevauche celui qui correspond aux fichiers « exclus » donné plus haut. Si l'option --all est passée à la commande inventory, le motif « exclus » n'est pas activé et les fichiers qui y correspondent « retombent » à une étape ultérieure de cet algorithme.
^([_=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.

Fichiers non reconnus
Tout fichier laissé à cet étape est traité comme « non reconnu ».

Exemples de conventions de nommage

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.

Personnaliser la convention de nommage

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 »).

À quoi bon tout cela ? -- Conventions de nommage d'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.

excluded
Est simplement là pour faire en sorte que les listes d'inventaires restent brèves, entendu que, dans la plupart des cas, les fichiers de contrôle de arch ne sont pas particulièrement utiles. C'est un peu pareil que le traitement des répertoires . et .. (dot files) par ls; de même l'option --all de la commande inventory est similaire à l'option -a de la commande ls.
source
Permet à arch de distinguer ces fichiers de manière fiable. Par exemple, lorsqu'il compare deux arborescences, arch ne compare que les fichiers de la catégorie source.
precious
Ces fichiers sont ceux pour lesquels arch devrait faire un effort afin de les préserver. Par exemple, si vous demandez à arch de faire une copie d'une arborescence de projet, il copiera les fichiers « précieux » en même temps que les fichiers « sources ». Supposons, par exemple, que vous prenez des notes pendant que vous travaillez sur votre code source. On ne souhaitera pas que nos notes soient prises pour nos sources, mais on ne voudra pas pour autant les perdre. Une astuce consiste à donner à ce fichier un « nom précieux » (par exemple : +notes).
junk

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 : ,.

backups

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
unrecognized
L'apparence d'un fichier qui ne correspond à aucun motif d'une arborescence (ou qui a un nom suspect) indique la plupart du temps que quelque chose n'est pas correct. Plutôt que d'ignorer ces fichiers ou de les traiter comme des fichiers précieux ou à effacer, arch les marque explicitement afin de pouvoir en avertir les utilisateurs.

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