1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
|
<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V4.2-Based Extension//EN"
"../../../share/sgml/freebsd42.dtd" [
<!ENTITY % entities PUBLIC "-//FreeBSD//ENTITIES DocBook FreeBSD Entity Set//FR" "../../share/sgml/entities.ent">
%entities;
<!ENTITY % not.published "IGNORE">
]>
<!--
The FreeBSD Documentation Project
The FreeBSD French Documentation Project
$FreeBSD$
$Id: article.sgml,v 1.7 2007-01-20 13:34:48 blackend Exp $
Original revision: 1.12
-->
<article lang="fr">
<articleinfo>
<title>Utilisation avancée de cvsup</title>
<authorgroup>
<author>
<firstname>Salvo</firstname>
<surname>Bartolotta</surname>
<affiliation>
<address><email>bartequi@neomedia.it</email></address>
</affiliation>
</author>
</authorgroup>
<pubdate>$FreeBSD$</pubdate>
<releaseinfo>$FreeBSD$</releaseinfo>
<legalnotice id="trademarks" role="trademarks">
&tm-attrib.freebsd;
&tm-attrib.cvsup;
&tm-attrib.general;
</legalnotice>
<abstract>
<para>Le présent article suppose une compréhension
de base de l'utilisation de <application>CVSup</application>.
Il expose plusieurs problèmes délicats
liés à la synchronisation des sources à
l'aide de <application>CVSup</application>, c'est à
dire des solutions efficaces aux problèmes des fichiers
obsolètes aussi bien qu'aux cas spéciaux de mise
à jour des sources, ces problèmes sont susceptibles
de causer des désagréments apparemment
inexplicables.</para>
&trans.a.fonvieille;
</abstract>
</articleinfo>
<sect1 id="preface">
<title>Préface</title>
<para>Ce document est le fruit des tentatives de l'auteur de
comprendre les finesses de <application>CVSup</application> et
de la mise à 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 être 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
à son adresse électronique
<email>bartequi@neomedia.it</email>.</para>
</sect1>
<sect1 id="introduction">
<title>Introduction</title>
<para>Si vous avez consulté le <ulink
url="http://www.polstra.com/">site de John Polstra</ulink> et lu
sa <ulink
url="http://www.polstra.com/projects/freeware/CVSup/faq.html">FAQ</ulink>,
vous avez pu avoir remarqué les questions 12 et 13.</para>
<para>En mettant à jour n'importe quelle “catalogue”
- collection de sources (e.g. <filename>/usr/ports</filename>),
&man.cvsup.1; se sert des fichiers de “checkouts”
relatifs afin d'effectuer le processus de mise à jour de la
manière la plus efficace et la plus correcte possible. Dans cet
exemple (<filename>/usr/ports</filename>), le fichiers de
“checkouts” relatif est
<filename>/usr/sup/ports-all/checkouts.cvs:.</filename> si votre
répertoire de base est <filename>/usr</filename>.</para>
<para>Un fichier “checkouts” contient l'information
sur l'état actuel de vos sources -- d'une certaine
manière, une sorte de “photographie”. Cette
information permet à <application>cvsup</application> de
rechercher les mises à jour le plus efficacement. De
plus, et c'est peut-être plus important, il permet
à <application>cvsup</application> de gérer
correctement vos sources en effaçant localement tout
fichier qui n'est plus présent sur l'archive centrale,
et de ce fait ne pas laisser de fichiers obsolètes sur
votre système. En fait, sans un fichier
“checkouts”, <application>cvsup</application> ne
saurait PAS de quels fichiers votre catalogue est composé
(Cf &man.cvsup.1; pour plus de détails), et en
conséquence, il ne pourrait PAS effacer de votre
système ces fichiers qui ne sont plus présents sur
l'archive centrale. Ils resteraient sur votre système
(les fichiers obsolètes), et pourraient vous causer de
subtiles échecs de compilation ou tout autre
désagrément. Par exemple, ce problème est
susceptible de se produire si vous mettez à jour votre
catalogue de logiciels portés plusieurs semaines
après que vous ayez eu vos CDROMs d'installation.</para>
<para>Il est donc recommandé que vous adoptiez la
procédure en deux temps décrite dans la FAQ de
<application>CVSup</application> (Cf Q12, Q13); dans les
sections suivantes, on vous présentera des exemples
concrets intéressant et instructifs.</para>
</sect1>
<sect1 id="script">
<title>Une procédure python utile: cvsupchk</title>
<para>Alternativement, afin d'examiner les sources pour les
inconsistences, vous pouvez souhaiter utiliser la procédure
python <command>cvsupchk</command>, procédure qui se
trouve actuellement dans
<filename>/usr/ports/net/cvsup/work/cvsup-16.1/contrib/cvsupchk</filename>,
avec un sympathique <filename>README</filename>.
Prérequis:</para>
<orderedlist>
<listitem>
<para><literal>/usr/ports/net/cvsup</literal> &prompt.root;
<userinput> make extract</userinput></para>
</listitem>
<listitem>
<para>python (que l'on trouve également dans le catalogue
des logiciels portés :-)).</para>
</listitem>
<listitem>
<para>Un fichier “checkouts” pour votre
catalogue des sources.</para>
</listitem>
</orderedlist>
<para>Si vous mettez à jour vos sources pour la toute
première fois, naturellement vous n'avez pas de fichier
“checkouts”. Après l'installation de python
et la mise à jour de vos sources (e.g.
<filename>/usr/ports</filename>), vous pouvez les vérifier
ainsi:</para>
<screen>&prompt.user; <filename>/path/to/</filename><userinput>cvsupchk -d /usr -c /usr/sup/ports-all/checkouts.cvs:. | more</userinput></screen>
<para>Si vous désirez vérifier vos sources RELENG_4:</para>
<screen>&prompt.user; <filename>/path/to/</filename><userinput>cvsupchk -d /usr -c /usr/sup/src-all/checkouts.cvs:RELENG_4 | more</userinput></screen>
<para>Dans chaque cas, <command>cvsupchk</command>
inspectera vos sources à la
recherche d'inconsistances en utilisant les informations
contenues dans le fichier de “checkouts” relatif.
Des anomalies comme des fichiers effacés, encore
présents (aka fichiers obsolètes), fichiers
récupérés absents, fichiers RCS
supplémentaires, et répertoires vides seront
affichés sur la sortie standard.</para>
<para>Dans la section suivante, nous présenterons des exemples
typiques de la mise à jour de source, exemples qui vous
montreront le rôle des fichiers de “checkouts”
et les dangers d'une gestion négligée des sources.</para>
</sect1>
<sect1 id="examples">
<title>Exemples avancés de gestion des sources</title>
<sect2>
<title>Comment modifier sans risques le champ tag quand vous
mettez à jour <literal>src-all</literal></title>
<para>Si vous spécifiez par exemple <literal>tag=A</literal>
dans votre fichier <filename>supfile</filename>,
<application>cvsup</application> créera
un fichier “checkouts” appelé
<filename>checkouts.cvs:A</filename>, par exemple avec le
champ <literal>tag=RELENG_4</literal>, un fichier de
“checkouts”
<filename>checkouts.cvs:RELENG_4</filename> est
généré. Ce fichier sera utilisé
pour récupérer et/ou stocker
l'information identifiant vos sources 4-STABLE.</para>
<para>En suivant le catalogue <literal>src-all</literal>, si
vous souhaitez passer de <literal>tag=A</literal> à
<literal>tag=B</literal> (A inférieur/supérieur
à B important peu) et si votre fichier
“checkouts” est
<filename>checkouts.cvs:A</filename>, les opérations
suivantes devront être effectuées:</para>
<orderedlist>
<listitem>
<para>&prompt.root; <userinput>mv checkouts.cvs:A
checkouts.cvs:B</userinput>
(ceci fournit à l'étape suivante le fichier
“checkouts” approprié)</para>
</listitem>
<listitem>
<para>Ecrivez un fichier <filename>supfile</filename>
dont la ligne désignant le catalogue est:</para>
<programlisting>src-all tag=B</programlisting>
</listitem>
<listitem>
<para>Cvsupez vos sources en utilisant le nouveau
<filename>supfile</filename>.</para>
</listitem>
</orderedlist>
<para><application>Cvsup</application> recherchera <filename>checkouts.cvs:B</filename>
-- dans ce cas la cible est B, c'est à dire que
<application>cvsup</application> se
servira des informations contenues dans ce fichier pour gérer
correctement vos sources.</para>
<para>Les avantages:</para>
<itemizedlist>
<listitem>
<para>Les sources sont traitées correctement (en
particulier aucun fichier obsolète).</para>
</listitem>
<listitem>
<para>Moins de charge sur le serveur, dans ce cas
<application>CVSup</application>
agit de la manière la plus efficace.</para>
</listitem>
</itemizedlist>
<para>Par exemple, <literal>A=RELENG_4</literal>,
<literal>B=.</literal>, le point dans <literal>B=.</literal>
signifie -CURRENT. C'est une mise à jour plutôt
typique de la branche 4-STABLE vers la branche -CURRENT.
Alors qu'il est simple de revenir à une ancienne
version de sources (e.g. -CURRENT vers -STABLE), il n'en va
pas de même avec le système. Vous êtes
FORTEMENT déconseillé de tenter une telle
opération, à moins que vous ne sachiez
exactement ce que vous faites.</para>
</sect2>
<sect2>
<title>Mettre à jour en conservant le même champ
tag mais pour une date différente</title>
<para>Si vous souhaitez basculer du champ <literal>tag=A</literal>
au champ <literal>tag=A</literal> avec une date GMT
différente (disons <literal>date=D</literal>) vous
exécuterez ce qui suit:</para>
<orderedlist>
<listitem>
<para>Ecrivez un <filename>supfile</filename> dont la
ligne désignant le catalogue est:</para>
<programlisting>src-all tag=A date=D</programlisting>
</listitem>
<listitem>
<para>Mettez à jour vos sources en utilisant le nouveau
<filename>supfile</filename>.</para>
</listitem>
</orderedlist>
<para>Que la nouvelle date précède ou non celle
de la dernière synchronisation avec le champ
<literal>tag=A</literal> est peu important. Par exemple,
afin d'indiquer la date du “27 Août 2000 à
10h00s00 GMT” vous écrirez la ligne:</para>
<programlisting>src-all tag=RELENG_4 date=2000.08.27.10.00.00</programlisting>
<note><para>Le format de la date est rigide. Vous devez
indiquer toutes les composantes de la date: le siècle
(<quote>20</quote>, i.e. le vingtième siècle, doit être
fourni tandis que <quote>19</quote>, le siècle passé peut
être omis), l'année, le mois, le jour, l'heure,
les minutes et les secondes — comme montré dans
l'exemple ci-dessus. Pour plus d'information, veuillez
consulter la page de manuel &man.cvsup.1;.</para></note>
<para>Qu'une date soit spécifiée ou non, le fichier
“checkouts” est appelé
<filename>checkouts.cvs:A</filename> (e.g.
<filename>checkouts.cvs:RELENG_4</filename>). Comme
conséquence, aucune action particulière n'est
nécessaire afin de retourner à l'état
précédent: vous devez modifier la date
dans le <filename>supfile</filename> et remettre à
jour à nouveau.</para>
</sect2>
<sect2>
<title>Mise à jour de votre catalogue des logiciels
portés pour la première fois</title>
<para>Comme les logiciels portés sont
étiquetés “.” (i.e. -CURRENT),
vous pouvez correctement les synchroniser en
ajoutant le mot-clé <literal>date</literal> (Cf
&man.cvsup.1; pour le format exact), vous devriez
spécifier une date aussi proche que possible que celle
de “l'expédition” de votre catalogue de
logiciel porté. Après que <application>CVSup</application> ait
créé le fichier “checkouts” du catalogue des
logiciels portés, qui est précisément le
but de cette première opération de synchronisation,
le champ <literal>date</literal> doit être retiré,
toutes les mises à jour suivantes seront faites en
douceur.</para>
<para>Si vous avez voulu chercher la petite bête dans ce texte,
vous vous êtes probablement aperçu des
problèmes potentiels du processus de mise à jour des
sources. Un certain nombre de personnes ont eu réellement
des problèmes. Vous avez été
avertis. :-)</para>
</sect2>
</sect1>
</article>
|