Avant-propos▲
La maitrise du travail collaboratif en informatique est devenue ces dernières années l'une des pierres angulaires de la bonne marche d'un projet.
La gestion des versions avec un outil comme CVS est d'ailleurs désormais le plus souvent intégrée aux environnements de développements les plus récents.
Comment faire lorsqu'on utilise un produit qui ne gère pas ces aspects, mais répond aux autres besoins, et que l'acquisition d'une version plus récente ne s'impose pas ?
C'est peut-être votre cas avec Borland C++ Builder 6 (du moins ce le sera lorsque la sortie de son successeur sera officiellement annoncée). Que faire ?
Vous avez plusieurs possibilités : découpler totalement la partie versioning en utilisant un système et un utilitaire à part (par exemple le couple gratuit CVS/winCVS ou encore la solution maison Borland StarTeam), ou rechercher un plugin (relatif à un système de versioning donné) pour gérer la configuration directement dans C++ Builder.
C'est cette dernière solution qui nous intéresse dans cet article, et en particulier le couple CVS/borCVS, le plugin borCVS étant issu d'un projet sourceforge et supporté par les versions 5 et 6 de Delphi et C++ Builder.
L'accent ne sera pas mis sur les bases de CVS dans cet article.
Si CVS vous est inconnu, je vous conseille de prendre connaissance des éléments fondamentaux qui le caractérisent en consultant les ressources référencées en fin d'article.
Bien entendu, toute remarque constructive est la bienvenue (idées d'approfondissement, améliorations…). Merci de privilégier les forums pour vos questions sur le sujet.
Remerciements▲
J'adresse mes remerciements à Greybird pour la relecture technique, ainsi qu'à Beuss pour la relecture orthographique de cet article.
I. Rappels sur CVSNT▲
CVSNT fournit les fichiers et l'interface nécessaires pour utiliser et configurer CVS dans un environnement Windows.
Ce paragraphe a pour but de vous présenter la configuration utilisée dans le cadre de cet article. La phase de paramétrage du plugin borCVS n'en sera que plus facilement compréhensible pour ceux qui commencent avec CVS.
I-A. Installation▲
On supposera pour la suite que l'installation de CVSNT a été faite conformément aux conseils que l'on trouvera sur le site de ses auteurs à l'URL suivante : http://www.cvsnt.org/wiki/InstallationTips.
I-B. Configuration▲
La configuration de CVSNT à prendre en compte pour la suite se limite à ce qui se trouve dans l'onglet Repository du Control Panel.
La figure suivante illustre la manipulation faite dans le cadre de cet article :
Nous avons donc ici les informations de configuration du repository sur lequel nous allons travailler avec C++ Builder : sa localisation dans le système de fichiers, et son alias.
II. Présentation de borCVS▲
borCVS est un plugin gratuit et open source pour C++ Builder et Delphi (versions 5 et 6), sous licence GNU, résultant du travail de son auteur Thomas Bleier.
Initialement développé en C++, le projet a été porté en Delphi par Per-Eric Larsson.
borCVS est un projet hébergé par Sourceforge qui n'a pas évolué depuis un certain moment, mais dont l'utilisation reste possible, assez simple et pratique comme nous le verrons plus loin.
II-A. Téléchargement▲
Pour obtenir le plugin borCVS pour la version 6 de C++ Builder, rendez-vous à l'adresse suivante et téléchargez le fichier BorCVS-snapshot-BCB6.zip : http://sourceforge.net/project/showfiles.php?group_id=36894
II-B. Installation▲
Dézippez le fichier téléchargé pour obtenir les fichiers suivants (présents dans P:\Borland\BorCVS-snapshot-BCB6 pour cet article) :
- BorCVS6.dll ;
- cvs.exe ;
- index.html ;
- LICENSE.txt ;
- Manual.html ;
- Readme.html ;
- Setup.exe.
Pour ajouter (ou retirer) le plugin de votre environnement de développement préféré, il vous suffit de lancer Setup.exe et de sélectionner l'option adéquate, comme l'illustre la figure suivante :
En lançant C++ Builder, vous devriez voir apparaître un nouvel élément appelé CVS dans le menu :
Nous reviendrons par la suite sur les différentes fonctionnalités accessibles à partir de ce menu.
II-C. Configuration▲
Vous voilà presque prêt à utiliser le plugin pour enfin gérer votre projet favori avec CVS !
Il ne reste qu'un seul détail, mais non des moindres : configurer le plugin pour qu'il puisse communiquer avec le serveur CVS.
L'auteur de borCVS recommande l'utilisation de cvs.exe fourni avec le plugin. Cependant, pour des raisons évidentes de compatibilité avec le serveur, il est plus intéressant de configurer le plugin pour utiliser cvs.exe fourni par l'installation de CVSNT.
Il vous faut ainsi configurer les préférences (CVS | Preferences dans le menu) de borCVS en vous référant à la figure suivante :
On notera au passage la possibilité de forcer l'enregistrement des fichiers lorsqu'ils sont commités, fonctionnalité qui pourra être utilisée ou non selon les habitudes de chacun.
III. Utilisation du plugin▲
Dans tout ce qui suit, les échanges avec le serveur CVS se font avec le protocole le plus simple possible, à savoir la connexion en local (cela implique bien entendu que le serveur est bien sur le même poste que celui utilisé).
Cela ne veut bien entendu pas dire que les autres protocoles ne sont pas possibles. Il s'agit simplement de se concentrer sur l'utilisation du plugin, ce qui passe par la réduction au plus faible de la complexité de CVS.
Pour de plus amples renseignements sur les protocoles de communication supportés par CVS, vous pourrez vous référer aux ressources référencées en fin d'article.
III-A. Importer son projet▲
Nous allons tout d'abord décrire comment importer un projet dans le repository, c'est-à-dire ajouter un projet à CVS afin de pouvoir par la suite en gérer plusieurs versions.
Pour cela, ouvrez un projet existant, puis lancez CVS | New module pour obtenir l'écran suivant :
Ce qui nous intéresse ici est la valeur de Local directory qui va pointer vers le répertoire contenant votre projet, ainsi que Module name (and path) on the server qui correspond au nom du module à utiliser lorsque vous souhaitez extraire votre projet de CVS.
Passons ensuite à l'onglet CVSROOT qui va nous permettre de définir la variable d'environnement du même nom.
Comme nous avons choisi d'utiliser la méthode de connexion locale, la définition de CVSROOT est des plus simples puisqu'il suffit de sélectionner le répertoire configuré auparavant avec CVSNT.
Après avoir validé, vous pourrez constater que borCVS a déplacé le répertoire local ayant servi pour l'import, et a extrait votre projet (désormais versionné) dans un nouveau répertoire du même nom que celui utilisé auparavant.
Vous pouvez dès lors supprimer le répertoire renommé en *.precvs.
III-B. Extraire un module▲
Plaçons-nous maintenant à la place du développeur souhaitant travailler sur le projet géré sous CVS.
Pour ce faire, il faut utiliser la commande CVS | Checkout du menu et renseigner le nom du module ainsi que le répertoire local de destination, comme sur la figure suivante :
Après validation, borCVS va créer le répertoire E:\BCB\borCVS1 dans lequel seront copiés les fichiers du projet.
Vous noterez que si le nom du répertoire ne vous plait pas, il vous est possible de spécifier le nom à donner au répertoire créé. Cependant, cette option de la commande cvs checkout n'étant pas prise en charge par le plugin, vous aurez à réaliser le checkout « à la main » par l'intermédiaire de la commande CVS | CVS command qui vous ouvre une nouvelle fenêtre dans laquelle vous pourrez lancer vous-même les commandes cvs comme si vous étiez en ligne de commande (au détail près que vous n'écrirez pas « cvs sous_commande… », mais « sous_commande… »).
III-C. Enregistrer de nouvelles révisions▲
Après avoir réalisé certaines modifications sur votre projet, vous aurez également envie de les répercuter sur le serveur, soit parce que vous jugez utile de mémoriser l'état actuel du projet, soit pour permettre à un autre développeur d'avoir des versions plus récentes des fichiers.
Pour cela, vous pouvez utiliser la commande CVS | Commit project qui vous ouvrira la fenêtre suivante :
Vous avez ici à sélectionner les fichiers à commiter, ce qui peut être fait en masse à l'aide de la fonctionnalité Mark qui vous propose la sélection des fichiers suivant leur état (en l'occurrence ici l'état « Modified »).
Une fois les fichiers sélectionnés et le commit lancé, vous pourrez constater que les numéros de révision des fichiers commités ont été incrémentées.
III-D. Ajouter un fichier▲
Votre projet évoluant régulièrement, il vous arrivera certainement d'y ajouter un fichier.
L'ajout classique d'un fichier ne suffit pas à ce qu'il soit pris en compte et référencé par CVS lors d'un commit. Pour ce faire, il faut passer par la commande CVS | Add qui vous ouvrira la fenêtre suivante :
Lors de l'écriture de cet article, j'ai constaté (comme cela est illustré sur la figure précédente) que les nouveaux fichiers n'étaient pas visibles dans la fenêtre d'ajout. Pour afficher les fichiers que vous souhaitez ajouter, il faut avoir recours à l'astuce suivante : clic droit, Add file pour obtenir l'écran suivant :
Après avoir sélectionné le fichier en question, vous pouvez également renseigner une description, puis valider.
Si CVS ne vous est pas familier, sachez que l'ajout du fichier est une opération uniquement faite localement (modification des fichiers locaux gérant les informations pour CVS). Il sera donc nécessaire de procéder à un commit (cf. paragraphe précédent) où vous aurez probablement à réutiliser l'astuce précédente pour avoir le fichier en question dans la liste des fichiers.
III-E. Créer une version▲
Le concept de version pour CVS, au contraire de celui de révision, concerne le marquage d'une information supplémentaire (tag) d'un ensemble de fichiers.
Vous souhaiterez par exemple retrouver votre projet dans un état donné, et c'est ici que cette notion vous sera d'une grande aide (imaginez-vous mettre à jour les fichiers un par un vers une révision donnée, ou une date donnée…).
Pour poser un tag sur les fichiers de votre projet dans les révisions actuellement éditées, il suffit d'utiliser la commande CVS | Tag/Branch afin d'obtenir la fenêtre suivante :
III-F. Récupérer une ancienne version▲
Quelques semaines plus tard, vous souhaitez retrouver votre projet tel qu'il était lorsque vous avez défini une première version. Pour cela vous n'avez qu'à utiliser l'une des variantes de la commande CVS | Update project :
III-G. Consulter l'état des fichiers▲
borCVS prend également en charge la classique commande cvs status et vous permet ainsi en un coup d'œil de consulter l'état de l'ensemble des fichiers de votre projet.
Pour cela, il suffit d'utiliser la commande CVS | Status pour obtenir la fenêtre d'information suivante :
Vous pouvez ainsi visualiser des informations telles que les numéros de révision, les dates correspondantes, le statut (modifié, etc.), mais également un éventuel Sticky Tag résultant d'un update (en l'occurrence ici, vous constatez que votre version locale correspond à la version ayant le tag « v1 ».
III-H. Revenir aux révisions les plus récentes▲
Pour finir, l'opération suivante permet de reprendre en local les révisions des fichiers les plus récentes.
Pour ce faire, il suffit d'utiliser la commande CVS | Update project en prenant soin de tout décocher dans l'encadré Update to revision et de cocher l'option Reset sticky options afin de faire abstraction de l'indicateur tag « v1 » précédemment fixé lors du précédent update).
IV. Conclusion▲
J'espère que ce petit article vous aura fait découvrir un outil que vous adopterez pour vos travaux collaboratifs.
Je pense surtout aux groupes d'étudiants qui, ne connaissant ni CVS, ni l'existence d'outils intégrés à BCB, qui en sont réduits à gérer leur projet de manière artisanale en s'échangeant les fichiers (il y a du vécu dans ce que j'écris…).
J'encourage donc ceux qui ne peuvent pas s'offrir un StarTeam et qui souhaitent intégrer une gestion des sources à leur EDI préféré à prendre quelques minutes pour tester borCVS !
Malgré la (très) faible activité du projet borCVS sur sourceforge, le résultat est amplement satisfaisant et peut convenir à une grande majorité de projets.