                      Utilisation avancee de cvsup

  Salvo Bartolotta

   <bartequi@neomedia.it>

   $FreeBSD:
   release/8.4.0/fr_FR.ISO8859-1/articles/cvsup-advanced/article.xml
   39632 2012-10-01 11:56:00Z gabor $

   $FreeBSD:
   release/8.4.0/fr_FR.ISO8859-1/articles/cvsup-advanced/article.xml
   39632 2012-10-01 11:56:00Z gabor $

   FreeBSD is a registered trademark of the FreeBSD Foundation.

   CVSup is a registered trademark of John D. Polstra.

   Many of the designations used by manufacturers and sellers to
   distinguish their products are claimed as trademarks. Where those
   designations appear in this document, and the FreeBSD Project was
   aware of the trademark claim, the designations have been followed
   by the "(TM)" or the "(R)" symbol.

   Le present article suppose une comprehension de base de
   l'utilisation de CVSup. Il expose plusieurs problemes delicats
   lies `a la synchronisation des sources `a l'aide de CVSup, c'est
   `a dire des solutions efficaces aux problemes des fichiers
   obsoletes aussi bien qu'aux cas speciaux de mise `a jour des
   sources, ces problemes sont susceptibles de causer des
   desagrements apparemment inexplicables.

   Version franc,aise de Marc Fonvieille <blackend@FreeBSD.org>.

     --------------------------------------------------------------

   Table des matieres

   1. Preface

   2. Introduction

   3. Une procedure python utile: cvsupchk

   4. Exemples avances de gestion des sources

1. Preface

   Ce document est le fruit des tentatives de l'auteur de comprendre
   les finesses de CVSup et de la mise `a jour des sources. :-) Bien
   que l'auteur ait fait de nombreux efforts pour rendre ces pages
   aussi instructives et correctes que possible, il n'est qu'un etre
   humain et a pu avoir commis toutes sortes de coquilles, d'erreurs,
   etc... Il sera vraiment reconnaissant pour tous les commentaires
   et/ou suggestions que vous enverrez `a son adresse electronique
   <bartequi@neomedia.it>.

     --------------------------------------------------------------

2. Introduction

   Si vous avez consulte le site de John Polstra et lu sa FAQ, vous
   avez pu avoir remarque les questions 12 et 13.

   En mettant `a jour n'importe quelle "catalogue" - collection de
   sources (e.g. /usr/ports), cvsup(1) se sert des fichiers de
   "checkouts" relatifs afin d'effectuer le processus de mise `a jour
   de la maniere la plus efficace et la plus correcte possible. Dans
   cet exemple (/usr/ports), le fichiers de "checkouts" relatif est
   /usr/sup/ports-all/checkouts.cvs:. si votre repertoire de base est
   /usr.

   Un fichier "checkouts" contient l'information sur l'etat actuel de
   vos sources -- d'une certaine maniere, une sorte de
   "photographie". Cette information permet `a cvsup de rechercher
   les mises `a jour le plus efficacement. De plus, et c'est
   peut-etre plus important, il permet `a cvsup de gerer correctement
   vos sources en effac,ant localement tout fichier qui n'est plus
   present sur l'archive centrale, et de ce fait ne pas laisser de
   fichiers obsoletes sur votre systeme. En fait, sans un fichier
   "checkouts", cvsup ne saurait PAS de quels fichiers votre
   catalogue est compose (Cf cvsup(1) pour plus de details), et en
   consequence, il ne pourrait PAS effacer de votre systeme ces
   fichiers qui ne sont plus presents sur l'archive centrale. Ils
   resteraient sur votre systeme (les fichiers obsoletes), et
   pourraient vous causer de subtiles echecs de compilation ou tout
   autre desagrement. Par exemple, ce probleme est susceptible de se
   produire si vous mettez `a jour votre catalogue de logiciels
   portes plusieurs semaines apres que vous ayez eu vos CDROMs
   d'installation.

   Il est donc recommande que vous adoptiez la procedure en deux
   temps decrite dans la FAQ de CVSup (Cf Q12, Q13); dans les
   sections suivantes, on vous presentera des exemples concrets
   interessant et instructifs.

     --------------------------------------------------------------

3. Une procedure python utile: cvsupchk

   Alternativement, afin d'examiner les sources pour les
   inconsistences, vous pouvez souhaiter utiliser la procedure python
   cvsupchk, procedure qui se trouve actuellement dans
   /usr/ports/net/cvsup/work/cvsup-16.1/contrib/cvsupchk, avec un
   sympathique README. Prerequis:

    1. /usr/ports/net/cvsup # make extract

    2. python (que l'on trouve egalement dans le catalogue des
       logiciels portes :-)).

    3. Un fichier "checkouts" pour votre catalogue des sources.

   Si vous mettez `a jour vos sources pour la toute premiere fois,
   naturellement vous n'avez pas de fichier "checkouts". Apres
   l'installation de python et la mise `a jour de vos sources (e.g.
   /usr/ports), vous pouvez les verifier ainsi:

 % /path/to/cvsupchk -d /usr -c /usr/sup/ports-all/checkouts.cvs:. | more

   Si vous desirez verifier vos sources RELENG_4:

 % /path/to/cvsupchk -d /usr -c /usr/sup/src-all/checkouts.cvs:RELENG_4 | more

   Dans chaque cas, cvsupchk inspectera vos sources `a la recherche
   d'inconsistances en utilisant les informations contenues dans le
   fichier de "checkouts" relatif. Des anomalies comme des fichiers
   effaces, encore presents (aka fichiers obsoletes), fichiers
   recuperes absents, fichiers RCS supplementaires, et repertoires
   vides seront affiches sur la sortie standard.

   Dans la section suivante, nous presenterons des exemples typiques
   de la mise `a jour de source, exemples qui vous montreront le role
   des fichiers de "checkouts" et les dangers d'une gestion negligee
   des sources.

     --------------------------------------------------------------

4. Exemples avances de gestion des sources

  4.1. Comment modifier sans risques le champ tag quand vous mettez `a
  jour src-all

   Si vous specifiez par exemple tag=A dans votre fichier supfile,
   cvsup creera un fichier "checkouts" appele checkouts.cvs:A, par
   exemple avec le champ tag=RELENG_4, un fichier de "checkouts"
   checkouts.cvs:RELENG_4 est genere. Ce fichier sera utilise pour
   recuperer et/ou stocker l'information identifiant vos sources
   4-STABLE.

   En suivant le catalogue src-all, si vous souhaitez passer de tag=A
   `a tag=B (A inferieur/superieur `a B important peu) et si votre
   fichier "checkouts" est checkouts.cvs:A, les operations suivantes
   devront etre effectuees:

    1. # mv checkouts.cvs:A checkouts.cvs:B (ceci fournit `a l'etape
       suivante le fichier "checkouts" approprie)

    2. Ecrivez un fichier supfile dont la ligne designant le
       catalogue est:

 src-all tag=B

    3. Cvsupez vos sources en utilisant le nouveau supfile.

   Cvsup recherchera checkouts.cvs:B -- dans ce cas la cible est B,
   c'est `a dire que cvsup se servira des informations contenues dans
   ce fichier pour gerer correctement vos sources.

   Les avantages:

     * Les sources sont traitees correctement (en particulier aucun
       fichier obsolete).

     * Moins de charge sur le serveur, dans ce cas CVSup agit de la
       maniere la plus efficace.

   Par exemple, A=RELENG_4, B=., le point dans B=. signifie -CURRENT.
   C'est une mise `a jour plutot typique de la branche 4-STABLE vers
   la branche -CURRENT. Alors qu'il est simple de revenir `a une
   ancienne version de sources (e.g. -CURRENT vers -STABLE), il n'en
   va pas de meme avec le systeme. Vous etes FORTEMENT deconseille de
   tenter une telle operation, `a moins que vous ne sachiez
   exactement ce que vous faites.

     --------------------------------------------------------------

  4.2. Mettre `a jour en conservant le meme champ tag mais pour une date
  differente

   Si vous souhaitez basculer du champ tag=A au champ tag=A avec une
   date GMT differente (disons date=D) vous executerez ce qui suit:

    1. Ecrivez un supfile dont la ligne designant le catalogue est:

 src-all tag=A date=D

    2. Mettez `a jour vos sources en utilisant le nouveau supfile.

   Que la nouvelle date precede ou non celle de la derniere
   synchronisation avec le champ tag=A est peu important. Par
   exemple, afin d'indiquer la date du "27 Aout 2000 `a 10h00s00 GMT"
   vous ecrirez la ligne:

 src-all tag=RELENG_4 date=2000.08.27.10.00.00

     Note : Le format de la date est rigide. Vous devez indiquer
     toutes les composantes de la date: le siecle ("20", i.e. le
     vingtieme siecle, doit etre fourni tandis que "19", le siecle
     passe peut etre omis), l'annee, le mois, le jour, l'heure, les
     minutes et les secondes - comme montre dans l'exemple ci-dessus.
     Pour plus d'information, veuillez consulter la page de manuel
     cvsup(1).

   Qu'une date soit specifiee ou non, le fichier "checkouts" est
   appele checkouts.cvs:A (e.g. checkouts.cvs:RELENG_4). Comme
   consequence, aucune action particuliere n'est necessaire afin de
   retourner `a l'etat precedent: vous devez modifier la date dans le
   supfile et remettre `a jour `a nouveau.

     --------------------------------------------------------------

  4.3. Mise `a jour de votre catalogue des logiciels portes pour la
  premiere fois

   Comme les logiciels portes sont etiquetes "." (i.e. -CURRENT),
   vous pouvez correctement les synchroniser en ajoutant le mot-cle
   date (Cf cvsup(1) pour le format exact), vous devriez specifier
   une date aussi proche que possible que celle de "l'expedition" de
   votre catalogue de logiciel porte. Apres que CVSup ait cree le
   fichier "checkouts" du catalogue des logiciels portes, qui est
   precisement le but de cette premiere operation de synchronisation,
   le champ date doit etre retire, toutes les mises `a jour suivantes
   seront faites en douceur.

   Si vous avez voulu chercher la petite bete dans ce texte, vous
   vous etes probablement aperc,u des problemes potentiels du
   processus de mise `a jour des sources. Un certain nombre de
   personnes ont eu reellement des problemes. Vous avez ete avertis.
   :-)

     --------------------------------------------------------------

        Ce document, ainsi que d'autres peut etre telecharge sur
                   ftp.FreeBSD.org/pub/FreeBSD/doc/.

Pour toutes questions `a propos de FreeBSD, lisez la documentation avant
                 de contacter <questions@FreeBSD.org>.
Pour les questions sur cette documentation, contactez <doc@FreeBSD.org>.
