hgbook

view fr/ch06-collab.xml @ 1024:ea04ebd452b5

French : second part of ch06
author André Sintzoff <andre.sintzoff@gmail.com>
date Thu Dec 03 22:45:38 2009 +0100 (2009-12-03)
parents 53dfddc566d8
children 013e09cb852f
line source
1 <!-- vim: set filetype=docbkxml shiftwidth=2 autoindent expandtab tw=77 : -->
3 <chapter id="cha:collab">
4 <?dbhtml filename="collaborating-with-other-people.html"?>
5 <title>Collaborer avec d'autres personnes</title>
7 <para id="x_44a">Comme tout outil complètement décentralisé, Mercurial
8 n'impose pas de politique sur la façon dont les personnes devraient
9 travailler ensemble. Cependant, si vous êtes nouveau dans les systèmes de
10 gestion de révisions distribués, cela aide d'avoir des outils et exemples
11 en tête lorsque vous réfléchissez à de possibles modèles de
12 workflow.</para>
13 <!--TODO : workflow peut éventuellement être traduit ici par travail -->
15 <sect1>
16 <title>Interface web de Mercurial</title>
18 <para id="x_44b">Mercurial possède une interface web puissante qui
19 propose plusieurs fonctions utiles.</para>
21 <para id="x_44c">Pour une utilisation intensive, l'interface web vous
22 permet de naviguer dans un ou une collection de dépôt. Vous pouvez voir
23 l'historique d'un dépôt, examiner chaque modification (commentaires et
24 "diffs"), et voir le contenu de chaque répertoire et fichier. Vous
25 pouvez même accéder à une vue de l'historique qui vous donne une vue
26 graphique de la relation entre les modifications individuelles et les
27 fusions (merge).</para>
29 <para id="x_44d">De plus, pour l'utilisation humaine, l'interface web
30 fournit des flux Atom et RSS des changements dans un dépôt. Ceci vous
31 permet de <quote>souscrire</quote> à un dépôt en utilisant votre
32 lecteur de flux favori, et être automatiquement avertis de l'activité
33 dans ce dépôt aussi tôt qu'elle change. Je trouve cette fonctionnalité
34 bien plus commode que le modèle qui consiste à souscrire à une mailing
35 list à laquelle les avertissements sont envoyés, puisque cela demande
36 aucune configuration supplémentaire de la part de la personne qui
37 publie un dépôt.</para>
39 <para id="x_44e">L'interface web permet aussi aux utilisateurs distants
40 de cloner un dépôt, récupérer (pull) les changement à partir de celui
41 ci, et (lorsque le serveur est configuré pour l'autoriser) lui envoyer
42 (push) des changements. Le protocole de tunnel HTTP de Mercurial
43 compresse agressivement les données, ainsi, il fonctionne efficacement,
44 même au-dessus des réseaux avec une faible bande passante.</para>
46 <para id="x_44f">La plus simple façon de démarrer avec l'interface
47 utilisateur est d'utiliser votre navigateur web pour visiter un dépôt
48 existant, tel que le dépôt principal de Mercurial à l'adresse <ulink
49 url="http://www.selenic.com/repo/hg">http://www.selenic.com/repo/hg</ulink>.</para>
51 <para id="x_450">Si vous êtes intéressés pour proposer une interface web
52 de vos propres dépôts, il y a plusieurs façons de le faire.</para>
54 <para id="x_69d">La façon la plus simple et la plus rapide pour commencer
55 dans un environnement informel est d'utiliser la commande <command
56 role="hg-cmd">hg serve</command> qui est la plus adaptée à un service
57 à court terme et <quote>léger</quote>. Référez-vous à <xref
58 linkend="sec:collab:serve"/> plus bas pour les détails d'utilisation
59 de cette commande.</para>
61 <para id="x_69e">Pour des dépôts dont la durée de vie est plus longue, où
62 vous voudriez un service accessible en permanence, il existe plusieurs
63 services publics d'hébergement qui sont accessibles. Certains sont
64 libres et gratuits pour les projets Open Source, alors que d'autres
65 offrent un hébergement commercial et payant. Une liste à jour est
66 disponible à l'adresse : <ulink
67 url="http://www.selenic.com/mercurial/wiki/index.cgi/MercurialHosting">http://www.selenic.com/mercurial/wiki/index.cgi/MercurialHosting</ulink>.</para>
69 <para id="x_6a0">Si vous préférez héberger vos propres dépôts, Mercurial
70 possède un support intégré pour plusieurs technologies populaires
71 d'hébergement, plus particulièrement CGI (Common Gateway Interface) et
72 WSGI (Web Services Gateway Interface). Référez-vous à <xref
73 linkend="sec:collab:cgi"/> pour des détails sur la configuration CGI
74 et WSGI.</para>
75 </sect1>
77 <sect1>
78 <title>Modèles de collaboration</title>
80 <para id="x_451">Avec un outil convenablement flexible, prendre des
81 décisions sur les workflows est plus un problème d'ingénierie sociale
82 qu'un problème technique. Mercurial impose peu de limitations sur
83 la façon dont vous pouvez structurer le flux de travail dans un projet,
84 donc, c'est à vous et votre groupe de fixer et vivre avec un modèle qui
85 convient à vos besoins particuliers.</para>
87 <sect2>
88 <title>Facteurs à garder en tête</title>
90 <para id="x_452">L'aspect le plus important de tout modèle que vous
91 devez garder en tête est la façon dont il subvient aux besoins et
92 capacités des personnes qui l'utiliseront. Ceci pourrait sembler
93 évident en soi ; pourtant, vous ne pouvez pas vous permettre de
94 l'oublier à un seul moment.</para>
96 <para id="x_453">Une fois, j'ai mis en place un modèle de workflow qui
97 m'apparaissait comme parfait, mais il a causé la consternation et des
98 conflits au sein de mon équipe de développement. En dépit de mes
99 tentatives pour expliquer pourquoi nous avions besoin d'un ensemble
100 complexe de branches, et comment les changements devaient couler
101 entre eux, certains membres de l'équipe se révoltèrent. Alors qu'ils
102 étaient pourtant des personnes sympathiques, ils ne voulaient pas
103 prêter attention aux contraintes sur lesquelles nous étions en train
104 d'opérer, ou, face aux conséquences de ces contraintes dans les
105 détails du modèle que je préconisais.</para>
107 <para id="x_454">Ne balayez pas les problèmes sociaux ou techniques de
108 la main. Quelque soit le schéma que vous établirez, vous devriez
109 planifier un protocole pour prévenir, ou rapidement vous relever de
110 troubles que vous pouvez anticiper. Par exemple, si vous vous
111 attendez à avoir une branche pour les changements pas-pour-release,
112 vous devriez penser très tôt à la possibilité qu'une personne
113 fusionne (merge) accidentellement ces changements avec une branche de
114 release. Vous pouvez empécher ce problème particulier en écrivant un
115 hook qui prévient les changements d'être fusionnés à partir d'une
116 branche inopportune.</para>
117 </sect2>
119 <sect2>
120 <title>Anarchie informelle</title>
122 <para id="x_455">Je ne voudrais pas suggérer qu'une approche
123 <quote>tout peut arriver</quote> comme quelque chose de durable, mais
124 il s'agit d'un modèle qui est simple à saisir et qui fonctionne
125 parfaitement dans quelques situations inhabituelles.</para>
127 <para id="x_456">Par exemple, beaucoup de projets ont un groupe distant
128 de collaborateurs qui ne se rencontre physiquement que très rarement.
129 Certains groupes aiment vaincre l'isolation du travail à distance en
130 organisant occasionnellement des <quote>sprints</quote>. Dans un
131 sprint, des personnes viennent ensemble dans un même
132 endroit (la salle de conférence d'une société, la salle de réunion
133 d'un hôtel, ce genre d'endroit) et y passent plusieurs jours, plus ou
134 moins enfermés, et hackant intensément sur une poignée de
135 projets.</para>
137 <para id="x_457">Un "sprint" ou une session de "hacking" dans un café
138 sont les endroits parfaits pour utiliser la commande <command
139 role="hg-cmd">hg serve</command> puisque <command role="hg-cmd">hg
140 serve</command> n'a pas besoin d'une infrastructure extraordinaire
141 de serveurs. Vous pouvez commencer avec la commande <command
142 role="hg-cmd">hg serve</command> en quelques instants, en lisant <xref
143 linkend="sec:collab:serve"/> plus bas Ensuite, dites simplement à
144 la personne à côté de vous que vous exécutez un serveur, envoyez-lui
145 l'URL par un message instantané, et vous avez immédiatement un moyen
146 simple et rapide de travailler ensemble. Ils peuvent taper votre URL
147 dans leur navigateur web et rapidement revoir vos
148 changements ; ou ils peuvent récupérer chez vous un bugfix et le
149 vérifier ; ou ils peuvent cloner une branche contenant une nouvelle
150 fonctionnalité et la tester.</para>
152 <para id="x_458">Le charme et le problème en faisant les choses ainsi,
153 dans un mode ad-hoc est que seules les personnes qui sont au courant
154 de vos changements, et de leur emplacement, peuvent les voir. Une
155 telle approche informelle ne passe simplement pas à l'échelle au delà
156 d'une poignée de personnes, puisque chacun a besoin de connaître
157 <emphasis>n</emphasis> différents dépôts à partir des quels récupérer
158 les changements (pull).</para>
159 </sect2>
161 <sect2>
162 <title>Un simple dépôt central</title>
164 <para id="x_459">Pour de plus petits projets qui migrent depuis un
165 outil de gestion de révision centralisé, la façon la
166 plus simple de commencer est certainement d'avoir un flux de
167 changement à partir d'un unique dépôt central. Il s'agit aussi du
168 <quote>composant</quote> pour des schémas de workflow plus
169 ambitieux.</para>
171 <para id="x_45a">Les contributeurs commencent par cloner une copie de
172 ce dépôt. Ils peuvent récupérer les changements à n'importe quel
173 moment où ils en ressentent le besoin, et certains (sûrement tous)
174 développeurs ont les persmissions qui leur permettent d'envoyer leurs
175 modifications (push) en retour lorsqu'elles sont prêtes pour que les
176 autres personnes puissent les voir.</para>
178 <para id="x_45b">Dans ce modèle, il peut encore être sensé pour les
179 gens de récupérer les changements directement entre eux, sans passer
180 par le dépôt central. Considérez le cas où j'ai un bug
181 fix provisoire, mais je m'inquiète de savoir si, dans le cas où je le publiais,
182 cela ne casserait pas l'arbre des autres contributeurs s'ils la
183 récupèreraient. Pour réduire les dommages potentiels, je peux vous
184 demander de cloner mon dépôt dans un dépôt temporaire qui vous
185 appartient et de le tester. Ceci nous permet de ne pas publier les
186 modification potentiellement dangereuses tant qu'elles n'ont pas
187 encore été un peu testées.</para>
189 <para id="x_45c">Si une équipe héberge son propre dépôt dans ce type de
190 scénario, les personnes qui utilisent habituellement le protocole
191 <command>ssh</command> pour envoyer (push) en toute sécurité leurs
192 changements au dépôt central, comme docummenté dans <xref
193 linkend="sec:collab:ssh"/>. Il est aussi usuel de publier une copie
194 en lecture seule du dépôt sur HTTP comme dans <xref
195 linkend="sec:collab:cgi"/>. Publier sur HTTP satisfait le besoin
196 des personnes qui n'ont pas d'accès en écriture, et ceux qui veulent
197 utiliser leur navigateur web pour explorer l'historique du
198 dépôt.</para>
199 </sect2>
201 <sect2>
202 <title>Un dépôt central hébergé</title>
204 <para id="x_6a1">Une chose magnifique au sujet des services
205 d'hébergement comme <ulink
206 url="http://bitbucket.org/">Bitbucket</ulink> est qu'ils ne gèrent
207 pas uniquement les détails minutieux de la configuration du
208 serveur, tels que les comptes utilisateurs, l'authentification, les
209 protocoles sécurisés, ils fournissent aussi une infrastructure
210 additionnelle pour que ce modèle fonctionne
211 bien.</para>
213 <para id="x_6a2">Par exemple, un service d'hébergement bien conçu
214 laissera les personnes cloner leurs copies d'un dépôt à l'aide d'un
215 simple clic. Ceci laisse les personnes travailler dans des espaces
216 séparés et partager leurs changements lorsqu'ils sont prêts.</para>
218 <para id="x_6a3">De plus, un bon service d'hébergement laissera les
219 personnes communiquer ensemble, par exemple pour dire <quote>Il y a
220 des changements prêts pour toi pour relecture dans cet
221 arbre</quote>.</para>
223 </sect2>
225 <sect2>
226 <title>Travailler avec plusieurs branches</title>
228 <para id="x_45d">Les projets d'une taille significative ont tendance à
229 avancer sur plusieurs fronts en même temps. Dans le cas de logiciel,
230 il est commun qu'un projet sorte périodiquement des releases
231 officielles. Une release devrait ensuite aller dans le <quote>mode de
232 maintenance</quote> pour un moment après sa première publication ;
233 les releases de maintenance tendent à contenir seulement des
234 corrections de bugs, et non de nouvelles fonctionnalités. En
235 parallèle de ces releases de maintenance, une ou plusieurs futures
236 releases doivent être en cours de développement. Les gens utilisent
237 en général le mot <quote>branche</quote> pour référer à l'une de ces
238 nombreuses directions légèrement différentes dans lesquelles le
239 développement évolue.</para>
241 <para id="x_45e">Mercurial est particulièrement bien adapté pour gérer
242 plusieurs branches simultanées mais non identiques. Chaque
243 <quote>direction de développement</quote> peut vivre dans son propre
244 dépôt central, et vous pouvez récupérez les changements de l'un ou
245 l'autre lorsque le besoin s'en fait sentir. Parce que les dépôts sont
246 indépendant les uns des autres, les modifications instables dans une
247 branche de développement n'affecteront jamais une branche stable,
248 sauf si quelqu'un fusionne (merge) explicitement ces changements dans
249 la branche stable.</para>
251 <para id="x_45f">Voici un exemple sur comment cela peut se passer en
252 pratique. Disons que vous avez une <quote>branche principale</quote>
253 sur un serveur central.</para>
255 &interaction.branching.init;
257 <para id="x_460">Les contributeurs le clonent, y apportent localement
258 des modifications, les testent et envoient (push) en retour leurs
259 changements.</para>
261 <para id="x_461">Une fois que la branche principale atteint une étape
262 assez importante pour une release, vous pouvez utiliser la commande
263 <command role="hg-cmd">hg tag</command> pour donner un nom permanent
264 à cette étape de révision.</para>
266 &interaction.branching.tag;
268 <para id="x_462">Disons que du developpement continue sur la
269 branche principale.</para>
271 &interaction.branching.main;
273 <para id="x_463">En utilisant le tag enregistré à l'étape importante,
274 les gens qui clonent ce dépôt peuvent à tout moment dans le futur
275 utiliser la commande <command role="hg-cmd">hg update</command> pour
276 avoir une copie du répertoire de travail exactement comme il était
277 lorsque cette révision "tag" a été committée.</para>
279 &interaction.branching.update;
281 <para id="x_464">De plus, immédiatement après que la branche principale
282 soit taggée, nous pouvons maintenant cloner la branche principale sur
283 le serveur vers une nouvelle branche <quote>stable</quote> sur le
284 même serveur.</para>
286 &interaction.branching.clone;
288 <para id="x_465">Si nous avons besoin d'effectuer des modifications à
289 la branche stable, nous pouvons alors cloner <emphasis>ce</emphasis>
290 dépôt, effectuer nos modifications, committer, et envoyer nos
291 changements en retour là bas.</para>
293 &interaction.branching.stable;
295 <para id="x_466">Puisque les dépôts Mercurial sont indépendants, et que
296 Mercurial ne déplace pas les changements automatiquement, les
297 branches stable et principale sont <emphasis>isolées</emphasis> l'une
298 de l'autre. Les changements qui sont faits à la branche principale ne
299 <quote>fuient</quote> pas vers la branche stable, et vice
300 versa.</para>
302 <para id="x_467">Nous allons souvent avoir envie que toutes nos
303 correction de bugs sur la branche stable soient reportées sur la
304 branche principale. Plutôt que de réécrire une correction de bug pour
305 la branche principale, nous pouvons simplement récupérer (pull) et
306 fusionner (merge) les changements de la branche stable vers la
307 branche principal, et Mercurial se débrouillera pour rapporter ces
308 corrections de bugs pour nous.</para>
310 &interaction.branching.merge;
312 <para id="x_468">La branche principale contiendra toujours des
313 changements qui ne sont pas dans la branche stable, mais elle
314 contiendra aussi les corrections de bugs de la branche stable. La
315 branche stable restera non affectée par ces changements, tant qu'ils
316 coulent de la branche stable vers la branche principale, et non dans
317 l'autre sens.</para>
318 </sect2>
320 <sect2>
321 <title>Feature branches</title>
322 <!-- TODO : Branches de fonctionnalité ? -->
323 <para id="x_469">Pour de plus gros projets, une façon efficace de gérer
324 les changements est de diviser l'équipe en plus petits groupes. Chaque
325 groupe a une branche partagée qui lui est attitrée, clonée à partir
326 d'une unique branche <quote>principale</quote> utilisée pour le
327 projet entier. Les personnes travaillant sur une branche individuelle
328 sont typiquement isolées des développements sur les autres
329 branches.</para>
331 <figure id="fig:collab:feature-branches">
332 <title>Feature branches</title>
333 <mediaobject>
334 <imageobject><imagedata width="100%" fileref="figs/feature-branches.png"/></imageobject>
335 <textobject><phrase>XXX add text</phrase></textobject>
336 </mediaobject>
337 </figure>
339 <para id="x_46b">Lorsqu'une fonctionnalité particulière est réputée
340 pour être dans une forme adaptée, quelqu'un de l'équipe qui s'en occupe
341 récupère les changements (pull) à partir de
342 la branche principale vers la branche de cette fonctionnalité,
343 fusionne (merge) et renvoie (push) le tout vers la branche
344 principale.</para>
345 </sect2>
347 <sect2>
348 <title>Le train des releases</title>
349 <!-- J'ai laissé train en traduction à train mais peut être que suite, file,
350 ... sont des mots qui conviennent mieux ? À méditer -->
351 <!-- Je mettrais "suite" -->
353 <para id="x_46c">Certains projets sont organisés comme un
354 <quote>train</quote> élémentaire : une release est planifiée tous les
355 quelques mois, et, toutes les fonctionnalités disponibles lorsque le
356 <quote>train</quote> est prêt à s'arrêter sont autorisées ici.</para>
358 <para id="x_46d">Ce modèle ressemble à travailler avec des branches de
359 fonctionnalités. La différence est que lorsqu'une branche de
360 fonctionnalité rate le train, quelqu'un de l'équipe qui travaille sur
361 cette fonctionnalité récupère (pull) et fusionne (merge) ce qui a été
362 ajouté à la release du train dans la branche de la fonctionnalité,
363 puis, l'équipe continue son travail au-dessus de cette release afin
364 que leur fonctionnalité puisse être ajoutée à la prochaine
365 release.</para>
366 </sect2>
368 <sect2>
369 <title>Le modèle du noyau Linux</title>
371 <para id="x_46e">Le développement du noyau Linux est doté d'une
372 structure hiérarchique superficielle, entourée par un nuage de chaos
373 apparent. Parce que la plupart des développeurs Linux utilisent
374 <command>git</command>, un outil distribué de gestion de révisions
375 avec des capacités similaires à celles de Mercurial, il est utile de
376 décrire comment le travail se déroule dans cet environnement ; si
377 vous aimez ces idées, l'approche se traduit correctement à travers
378 les outils.</para>
380 <para id="x_46f">Au centre de la communauté siège Linus Torvalds, le
381 créateur de Linux. Il publie un dépôt unique de sources qui est
382 considéré comme faisant <quote>autorité</quote> sur l'arborescence
383 par la communauté entière de développeurs. Tout le monde peut cloner
384 l'arbre de Linus, mais il ne récupère (pull) pas les changements de n'importe quelle arborescence.</para>
386 <para id="x_470">Linus a plusieurs <quote>lieutenants de
387 confiance</quote>. Comme règle générale, il récupère (pull) tous
388 les changements qu'ils publient, dans la plupart des cas sans même
389 relire ces modifications. Certains de ces lieutenants sont
390 généralement autorisés à être <quote>mainteneurs</quote>,
391 responsables pour un sous-système spécifique du noyau. Si un
392 hacker du noyau veut apporter des modification au sous-système
393 qu'il veut voir intégré à l'arbre de Linus, il doit trouver
394 le mainteneur du sous-système, et lui demander de récupérer ses
395 changements. Si le mainteneur relit ses changements et les accepte,
396 ils seront transmis à Linus le moment venu.</para>
398 <para id="x_471">Les lieutenants individuels ont leur propre approche
399 pour relire, accepter et publier les changements ; et pour décider
400 quand les apporter à Linus. De plus, il y a plusieurs branches
401 connues que les personnes utilisent pour différentes choses.
402 Par exemple, quelques personnes maintiennent des dépôts
403 <quote>stables</quote> de leurs versions du noyau, pour lesquels ils
404 apportent des corrections critiques lorsque nécessaire. Certains
405 mainteneurs publient plusieurs arbres : l'un pour les changements
406 expérimentaux, l'un pour les changements qu'ils vont faire remonter,
407 etc. D'autres ne publient qu'un unique arbre.</para>
409 <para id="x_472">Ce modèle a deux caractéristiques remarquables. La
410 première est qu'il s'agit de <quote>pull seulement</quote>. Vous
411 devez demander, convaincre, ou mendier auprès d'un autre développeur
412 pour prendre vos modifications, puisqu'il n'y a vraisemblablement pas
413 d'arbre où plus d'une personne peut envoyer des changements (push), et
414 qu'il n'y a pas de possibilité d'envoyer des changements (push) vers
415 un arbre que quelqu'un d'autre contrôle.</para>
417 <para id="x_473">La seconde est que c'est basé sur la réputation et
418 l'acclamation. Si vous êtes un inconnu, Linus va probablement ignorer
419 vos changements sans même répondre. Cependant, un mainteneur de
420 sous-système les relira probablement, et les acceptera sûrement s'ils
421 passent ses critères d'acceptation. Plus vous enverrez du
422 <quote>bon</quote> code à un mainteneur, et plus celui-ci aura
423 confiance en votre jugement et acceptera vos changements. Si vous
424 êtes bien connu et maintenez une branche ancienne pour quelque chose
425 que Linus n'a pas encore accepté, les gens avec un intérêt similaire
426 devraient récupérer vos changements régulièrement pour rester à jour
427 vis-à-vis de votre travail.</para>
429 <para id="x_474">La réputation et l'acclamation ne nécessite pas de
430 système croisé ou de limites <quote>entre les gens</quote>. Si vous
431 êtes respectés mais que vous êtes un hacker spécialisé dans la
432 sauvegarde, et que vous tentez de corriger un bug réseau, ce
433 changement recevra un examen approfondi de la part du mainteneur
434 responsable du réseau comparable à celui d'un total étranger.</para>
436 <para id="x_475">Pour les personnes qui viennent d'un projet dont
437 le milieu est plus ordonné, le processus chaotique de
438 développement du noyau Linux en comparaison apparaît souvent totalement
439 dément. C'est sujet aux caprices d'individus ;
440 des personnes font des changements considérables quand ils les
441 jugent appropriés ; et l'allure du développement est
442 ahurissante. Et pourtant, Linux est un bout de logiciel d'une grande
443 réussite et bien considéré.</para>
444 </sect2>
446 <sect2>
447 <title>Collaboration pull seulement versus pull partagé</title>
449 <para id="x_476">Une source perpétuelle de heurts dans la communauté
450 opensource est de savoir si un modèle de développement où les
451 personnes ne peuvent que récupérer (pull) les changements d'autres est
452 <quote>meilleur</quote> que celui dans lequel de multiples personnes peuvent
453 envoyer (push) leurs changements vers un dépôt partagé.</para>
455 <para id="x_477">Typiquement, les partisans du modèle push
456 partagé utilisent des outils qui renforcent activement cette
457 approche. Si vous utilisez un outil centralisé de gestion de révision
458 comme Subversion, il n'y a pas la possibilité de choisir quel modèle
459 utiliser : l'outil vous fournit un push partagé, et si vous voulez
460 faire quelque chose d'autre, vous avez à changer votre propre
461 approche à la base (comme appliquer les patchs manuellement).</para>
463 <para id="x_478">Un bon outil de gestion distribuée de révisions doit
464 supporter les deux modèles. Vous et vos collaborateurs pouvez ensuite
465 structurer la façon dont vous travaillez ensemble en vous basant sur
466 vos besoins et vos préférences, et non sur les contorsions que vos
467 outils vous forcent à effectuer.</para>
468 </sect2>
469 <sect2>
470 <title>Lorsque la collaboration rencontre la gestion de branches</title>
472 <para id="x_479">Lorsque vous et votre équipe configurez des dépôts
473 partagés et commencez à propager vos changement dans tous les sens
474 entre les dépôts locaux et partagés, vous commencez à être face à un
475 défi connexe, mais un peu différent : celui de gérer les
476 multiples directions vers lesquelles votre équipe pourrait aller au
477 même moment. Même si ce sujet est intimement lié à la façon dont
478 votre équipe collabore, il est suffisement dense pour mériter un
479 traitement à part dans <xref linkend="chap:branch"/>.</para>
480 </sect2>
481 </sect1>
483 <sect1>
484 <title>Le côté technique du partage</title>
486 <para id="x_47a">Le reste de ce chapitre est consacré à la question du
487 partage des changements avec vos collaborateurs.</para>
488 </sect1>
490 <sect1 id="sec:collab:serve">
491 <title>Partage informel avec <command role="hg-cmd">hg
492 serve</command></title>
494 <para id="x_47b">La commande <command role="hg-cmd">hg serve</command> de
495 Mercurial est magnifiquement conçue pour un environnement de petit
496 groupe, soudé et rapide. Elle fournit aussi un très bon moyen d'avoir
497 un sentiment de l'utilisation des commandes Meruciral sur un
498 réseau.</para>
500 <para id="x_47c">Exécutez <command role="hg-cmd">hg serve</command> à
501 l'intérieur d'un dépôt et en moins d'une seconde, cela mettra en place
502 un serveur HTTP spécialisé ; qui va accepter les connexions de tout
503 client, et servir les données pour ce dépôt jusqu'à ce que vous
504 l'arrêtiez. Toute personne qui connaît l'URL du serveur que vous venez
505 de démarrer, peut ensuite utiliser un navigateur web ou Mercurial pour
506 lire les données de ce dépôt. Une URL pour une instance exécutée de
507 <command role="hg-cmd">hg serve</command> sur un ordinateur portable
508 ressemblera vraisemblablement à
509 <literal>http://my-laptop.local:8000/</literal>.</para>
511 <para id="x_47d">La commande <command role="hg-cmd">hg serve</command>
512 <emphasis>n'</emphasis>est <emphasis>pas</emphasis> un serveur web
513 générique. Il ne peut faire que deux choses : </para>
514 <itemizedlist>
515 <listitem><para id="x_47e">Autoriser les personnes à explorer
516 l'historique du dépôt qu'il rend accessible, à partir d'un
517 navigateur web normal.</para>
518 </listitem>
519 <listitem><para id="x_47f">Discuter à travers le protocole de
520 communication de Mercurial, ainsi, les personnes peuvent exécuter <command
521 role="hg-cmd">hg clone</command> ou <command role="hg-cmd">hg
522 pull</command> sur les changements de ce dépôt.</para>
523 </listitem></itemizedlist>
524 <para id="x_480">En particulier, <command role="hg-cmd">hg serve</command>
525 ne permettra pas aux utilisateurs distants de
526 <emphasis>modifier</emphasis> votre dépôt. C'est destiné à une
527 utilisation en lecture seule.</para>
529 <para id="x_481">Si vous commencez avec Mercurial, il n'y a rien qui vous
530 empêche d'utiliser <command role="hg-cmd">hg serve</command> pour
531 publier un dépôt sur votre ordinateur, utilisez ensuite des commandes
532 telles que <command role="hg-cmd">hg clone</command>, <command
533 role="hg-cmd">hg incoming</command>, et ainsi de suite pour parler à
534 ce serveur comme si ce dépôt était hébergé à distance. Ceci peut vous
535 aider à rapidement familiarisé avec les commandes sur les dépôts
536 hébergés sur un réseau.</para>
538 <sect2>
539 <title>Quelques choses à garder à l'esprit</title>
541 <para id="x_482">Puisque il fournit un accès en lecture sans
542 authentification à tous les clients, vous devriez utiliser la
543 commande <command role="hg-cmd">hg serve</command> dans un
544 environnement où vous ne vous inquiétez pas ou vous avez
545 tout contrôle sur qui peut avoir accès au réseau et récupérer les
546 données de votre dépôt.</para>
548 <para id="x_483">La commande <command role="hg-cmd">hg serve</command>
549 ne sait rien sur un quelconque firewall que vous auriez
550 installé sur votre système ou réseau. Elle ne peut pas détecter ou
551 contrôler votre logiciel de pare-feu. Si d'autre personnes ont la
552 possibilité de dialoguer avec une instance de <command
553 role="hg-cmd">hg serve</command> la seconde chose que vous devriez
554 faire (<emphasis>après</emphasis> être sûr qu'ils utilisent l'URL
555 correcte) est de vérifier la configuration de votre firewall.</para>
557 <para id="x_484">Par défaut, <command role="hg-cmd">hg serve</command>
558 écoute pour les connexions entrantes sur le port 8000. Si un autre
559 processus est déjà en train d'écouter sur le port que vous voulez
560 écouter, vous pouvez spécifier un port différent sur lequel écouter à
561 l'aide de l'option <option role="hg-opt-serve">-p</option>.</para>
563 <para id="x_485">Normalement, lorsque <command role="hg-cmd">hg
564 serve</command> se lance, il n'affiche aucune sortie, ce qui peut
565 être un peu énervant. Si vous voulez une confirmation que tout s'est
566 déroulé correctement, et connaître l'URL que vous devriez fournir à
567 vos collaborateurs, démarrez avec l'option <option
568 role="hg-opt-global">-v</option>.</para>
569 </sect2>
570 </sect1>
572 <sect1 id="sec:collab:ssh">
573 <title>Utiliser le protocole Secure Shell (ssh)</title>
575 <para id="x_486">Vous pouvez récupérer (pull) ou envoyer (push) des
576 changements de façon sécurisé au dessus d'une connexion utilisant le
577 protocole Secure Shell (<literal>ssh</literal>). Pour l'utiliser avec
578 succès, vous pourriez avoir à faire un peu de configuration du côté
579 client ou serveur.</para>
581 <para id="x_487">Si vous n'êtes pas familiers avec ssh, c'est le nom de
582 la commande et d'un protocole réseau qui vous permet d'établir une
583 communication sécurisée avec un autre ordinateur. Pour l'utiliser avec
584 Mercurial, vous allez configurer un ou plusieurs comptes utilisateurs
585 sur un serveur, comme ça, les utilisateurs distants peuvent se connecter et
586 exécuter les commandes.</para>
588 <para id="x_488">(Si vous <emphasis>êtes</emphasis> familiers avec ssh,
589 vous allez probablement trouver quelques-unes des informations qui
590 suivent élémentaires par nature.)</para>
592 <sect2>
593 <title>Comment lire et écrire des URLs ssh</title>
595 <para id="x_489">Une URL ssh a tendance à ressembler à ceci :</para>
596 <programlisting>ssh://bos@hg.serpentine.com:22/hg/hgbook</programlisting>
597 <orderedlist>
598 <listitem><para id="x_48a">Le préfixe
599 <quote><literal>ssh://</literal></quote> dit à Mercurial
600 d'utiliser le protocole ssh.</para>
601 </listitem>
602 <listitem><para id="x_48b">Le composant
603 <quote><literal>bos@</literal></quote> indique que le nom
604 d'utilisateur à connecter sur le serveur. Vous pouvez le laisser
605 vide si le nom d'utilisateur sur le serveur distant est le même
606 que localement.</para>
607 </listitem>
608 <listitem><para id="x_48c">La partie
609 <quote><literal>hg.serpentine.com</literal></quote> donne le nom
610 d'hôte du serveur sur lequel se connecter.</para>
611 </listitem>
612 <listitem><para id="x_48d">Le <quote>:22</quote> identifie le numéro
613 de port où se connecter au serveur. Le port par défaut est 22,
614 donc vous avez besoin de spécifier ceci que si vous
615 <emphasis>n'</emphasis>utilisez <emphasis>pas</emphasis> le port
616 22.</para>
617 </listitem>
618 <listitem><para id="x_48e">Le reste de l'URL est le chemin local du
619 dépôt sur le serveur.</para></listitem></orderedlist>
621 <para id="x_48f">Il y a beaucoup de risque de confusion sur le
622 chemin du composant d'une URL ssh puisqu'il n'y a pas de façon
623 standard pour les outils de l'interpréter. Certains programmes se
624 comportent différemment des autres lorsqu'ils traitent ces chemins. Il
625 ne s'agit pas d'une situation idéale, mais ce n'est pas prêt de
626 changer. Lisez les prochains paragraphes avec attention.</para>
628 <para id="x_490">Mercurial traite le chemin vers un dépôt sur le
629 serveur comme relatif au répertoire personnel de l'utilisateur sur le
630 serveur distant. Par exemple, si un utilisateur
631 <literal>foo</literal> sur le serveur a un répertoire personnel
632 <filename class="directory">/home/foo</filename>, alors l'URL ssh qui
633 contient un composant chemin de <filename
634 class="directory">bar</filename> réfère en
635 <emphasis>réalité</emphasis> au répertoire <filename
636 class="directory">/home/foo/bar</filename>.</para>
638 <para id="x_491">Si vous voulez spécifier un chemin relatif au
639 répertoire personnel d'un autre utilisateur, vous pouvez préciser un
640 chemin qui commence à l'aide du caractère tilde suivi du nom de
641 l'utilisateur (appelons le <literal>otheruser</literal>),
642 ainsi.</para>
643 <programlisting>ssh://server/~otheruser/hg/repo</programlisting>
645 <para id="x_492">Et si vous voulez vraiment spécifier un chemin
646 <emphasis>absolu</emphasis> sur le serveur, débutez le composant
647 chemin par deux slashs comme dans cet exemple.</para>
648 <programlisting>ssh://server//absolute/path</programlisting>
649 </sect2>
651 <sect2>
652 <title>Trouver un client ssh pour votre système</title>
654 <para id="x_493">La plupart des systèmes du type Unix arrivent avec
655 OpenSSH préinstallé. Si vous utilisez un tel système, utilisez
656 <literal>which ssh</literal> pour trouver où la commande
657 <command>ssh</command> est installée (il s'agit généralement de
658 <filename class="directory">/usr/bin</filename>). Dans le cas peu
659 probable où il ne serait pas présent, regarder la documentation de
660 votre système pour voir comment l'installer.</para>
662 <para id="x_494">Sous Windows, le paquet TortoiseHg est livré avec
663 une version de l'excellente commande <command>plink</command> de
664 Simon Tatham, et ne devrait pas avoir besoin de plus de
665 configuration.</para>
666 </sect2>
668 <sect2>
669 <title>Créer une paire de clef</title>
671 <para id="x_499">Pour éviter d'avoir à chaque fois taper un mot de
672 passe lorsque vous utilisez votre client ssh, je recommande
673 de créer une paire de clefs.</para>
675 <tip>
676 <title>Les paires de clefs ne sont pas obligatoires</title>
678 <para id="x_6a4">Mercurial ne sait rien du tout de l'authentification
679 de ssh ou de la paire de clefs. Vous pouvez, si vous le désirez,
680 ignorer sans risque cette section et la suivante jusqu'à ce que
681 vous soyez fatigué de constamment retaper des mots de passe
682 ssh.</para>
683 </tip>
685 <itemizedlist>
686 <listitem> <para id="x_6a5">Sur un système de type Unix, la commande
687 <command>ssh-keygen</command> fera l'affaire.</para></listitem>
688 <listitem> <para id="x_6a6">Sous Windows, si vous utilisez
689 TortoiseHg, vous devriez avoir besoin de télécharger la commande
690 nommée <command>puttygen</command> à partir du <ulink
691 url="http://www.chiark.greenend.org.uk/~sgtatham/putty">site
692 web de PuTTY</ulink> pour créer une paire de clefs. Référez-vous
693 à <ulink
694 url="http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter8.html#pubkey-puttygen">la
695 documentation <command>puttygen</command></ulink> pour les
696 détails sur l'utilisation de cette commande.</para></listitem>
697 </itemizedlist>
699 <para id="x_49a">Lorsque vous créez une paire de clefs, il est
700 habituellement <emphasis>hautement</emphasis> recommandé de la
701 protéger avec un mot de passe. (Le seul moment où vous pourriez ne
702 pas devoir le faire est lorsque vous utilisez le protocole ssh pour
703 des tâches automatisées sur un réseau sécurisé.)</para>
705 <para id="x_49b">Le simple fait de créer une paire de clefs n'est
706 cependant pas suffisant. Vous aurez besoin d'ajouter la clef publique
707 à l'ensemble des clefs autorisées pour tout utilisateur que vous
708 utilisez pour vous connecter à distance. Pour les serveurs utilisant
709 OpenSSh (la grande majorité), ceci voudra dire d'ajouter la clef
710 publique à la liste dans un fichier appelé <filename
711 role="special">authorized_keys</filename> dans leur répertoire
712 <filename role="special" class="directory">.ssh</filename>.</para>
714 <para id="x_49c">Sur un système de type Unix, votre clef publique aura
715 l'extension <filename>.pub</filename>. Si vous utilisez la commande
716 <command>puttygen</command> sous Windows, vous pouvez sauvegarder la
717 clef publique dans un fichier que vous choisissez ou la copier à
718 partir de la fenêtre qui apparait directement dans le fichier
719 <filename role="special">authorized_keys</filename>.</para>
720 </sect2>
721 <sect2>
722 <title>Utiliser un agent d'authentification</title>
724 <para id="x_49d">Un agent d'authentification est un démon qui
725 enregistre les mots de passe en mémoire (il oublira ainsi les mots de
726 passe si vous vous déconnectez et reconnectez). Un client ssh sera averti
727 si un tel agent est en fonctionnement, et lui demandera un mot de
728 passe. S'il n'y a pas d'agent en fonctionnement, ou si l'agent ne
729 connaît pas le mot de passe nécessaire, vous aurez à taper votre mot
730 de passe chaque fois que Mercurial tente de communiquer avec un
731 serveur en votre nom (ex. lorsque vous faite un pull ou un push
732 de changements).</para>
734 <para id="x_49e">L'inconvénient de sauvegarder les mots de passe dans
735 un agent est qu'il est possible pour un attaquant bien préparé de
736 retrouver le mot de passe clair, dans certains cas, même si votre
737 système a été redémarré. Vous devriez vous faire votre propre
738 jugement pour savoir si ce risque est acceptable. Ceci vous exempte
739 certainement d'un tas de répétitions.</para>
741 <itemizedlist>
742 <listitem> <para id="x_49f">Sur les systèmes de type Unix, l'agent
743 est appelé <command>ssh-agent</command>, et est souvent lancé
744 automatiquement pour vous lorsque vous vous connectez. Vous aurez
745 besoin d'utiliser la commande <command>ssh-add</command> pour
746 ajouter des mots de passe à l'entrepôt de l'agent.</para>
747 </listitem>
748 <listitem>
749 <para id="x_6a7">Sous Windows, si vous utilisez TortoiseHg, la
750 commande <command>pageant</command> agit comme un agent. Comme
751 avec <command>puttygen</command>, vous aurez besoin de <ulink
752 url="http://www.chiark.greenend.org.uk/%7Esgtatham/putty/download.html">télécharger
753 <command>pageant</command></ulink> à partir du site web de
754 PuTTY et lire <ulink
755 url="http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter9.html#pageant">sa
756 documentation</ulink>. La commande <command>pageant</command>
757 ajoute une icône à votre zone de notification (à droite de la barre
758 de tâches) qui vous permettra de
759 gérer les mots de passe stockés.</para></listitem>
760 <!-- TODO : J'ai traduit system tray par barre des tâches, mais ne
761 conaissant pas windows, je ne suis pas sûr du nom réel. A corriger
762 le cas échéant ! -->
763 <!-- J'ai précisé avec ce que j'ai trouvé sur Wikipedia -->
764 </itemizedlist>
765 </sect2>
767 <sect2>
768 <title>Configurer correctement le serveur</title>
769 <!-- TODO : comment traduire "passphrase" ? -->
770 <para id="x_4a0">Parce que ssh peut être délicat à installer si c'est nouveau pour vous,
771 différentes choses peuvent mal se passer. Ajouter Mercurial
772 en plus, et il y a beaucoup plus de possibilités pour s'arracher les cheveux.
773 La plupart de ces problèmes potentiels apparaissent du côté serveur, non
774 du côté client. La bonne nouvelle est qu'une fois que vous avez
775 une configuration qui marche, elle continue habituellement de fonctionner
776 indéfiniment.</para>
778 <para id="x_4a1">Avant d'essayer de faire communiquer Mercurial avec un serveur ssh,
779 il est mieux de s'assurer que vous pouvez d'abord utiliser le
780 <command>ssh</command> normal ou la commande <command>putty</command>
781 pour communiquer avec le serveur. Si vous vous heurtez a des problèmes en utilisant
782 ces commandes directement, Mercurial ne fonctionnera sûrement pas. Pire,
783 il cachera le problème sous-jacent. Chaque fois que vous voulez
784 déboguer des problèmes de Mercurial liés à ssh, vous devriez d'abord
785 vous assurer que les commandes du client ssh fonctionne d'abord,
786 <emphasis>avant</emphasis> de vous inquiéter à propos de savoir si
787 il y a un problème avec Mercurial.</para>
789 <para id="x_4a2">La première chose à s'assurer du côté serveur est que
790 vous puissiez réellement vous connecter depuis une autre machine. Si vous
791 ne pouvez pas utiliser <command>ssh</command> ou <command>putty</command>
792 pour vous connecter, le message d'erreur que vous aurez peut vous donner quelques indices
793 sur ce qui ne fonctionne pas. Les problèmes les plus courants sont les suivants.</para>
794 <itemizedlist>
795 <listitem><para id="x_4a3">Si vous avez une erreur <quote>connexion refusée</quote>,
796 soit il n'y a pas de démon SSH tournant sur le serveur, soit il est inaccessible à cause
797 de la configuration du pare-feu.</para>
798 </listitem>
799 <listitem><para id="x_4a4">Si vous avez une erreur <quote>no route to host</quote>,
800 soit vous avez une adresse incorrecte pour le serveur
801 soit un pare-feu sérieusement verrouillé qui ne veut pas du tout reconnaître son existence.</para>
802 </listitem>
803 <listitem><para id="x_4a5">Si vous avez une erreur <quote>permission denied</quote>,
804 vous pouvez avoir mal tapé le nom d'utilisateur sur le serveur,
805 ou vous pouvez avoir mal tapé votre passphrase de clé ou
806 le mot de passe d'utilisateur distant.</para>
807 </listitem></itemizedlist>
808 <para id="x_4a6">En résumé, si vous avez des difficultés pour communiquer avec
809 le démon ssh du serveur, d'abord assurez-vous qu'il y en a un en fonctionnement.
810 Sur beaucoup de systèmes, il est installé, mais désactivé, par
811 défaut. Une fois que c'est fait, vous devriez alors
812 vérifier que le pare-feu du serveur est configuré pour permettre
813 les connexions entrantes sur le port que le démon ssh écoute
814 (habituellement 22). Ne vous inquiétez pas à propos de possibilités plus exotiques
815 de mauvaise configuration tant que vous n'avez pas vérifier ces deux premières.</para>
817 <para id="x_4a7">Si vous utilisez un agent d'authentification du côté client
818 pour stocker les passphrases de vos clés, vous devriez être capable de
819 vous connecter au serveur sans avoir à entrer une passphrase ou
820 un mot de passe. Si vous devez entrer une passphrase, il y a
821 quelques coupables possibles.</para>
822 <itemizedlist>
823 <listitem><para id="x_4a8">Vous pouvez avoir oublié d'utiliser
824 <command>ssh-add</command> ou <command>pageant</command>
825 pour stocker la passphrase.</para>
826 </listitem>
827 <listitem><para id="x_4a9">Vous pouvez avoir stocké la passphrase
828 pour une mauvaise clé.</para>
829 </listitem></itemizedlist>
830 <para id="x_4aa">Si vous devez entrer le mot de passe d'utilisateur distant,
831 il y a quelques autres problèmes possibles à vérifier.</para>
832 <itemizedlist>
833 <listitem><para id="x_4ab">Soit le répertoire utilisateur ou le
834 répertoire <filename role="special" class="directory">.ssh</filename>
835 peut avoir des droits trop tolérants. Comme résultat,
836 le démon ssh n'aura pas confiance ni ne lira le fichier
837 <filename role="special">authorized_keys</filename>.
838 Par exemple, un <quote>group-writable home</quote> ou un répertoire <filename
839 role="special" class="directory">.ssh</filename>
840 sera souvent la cause de ce symptôme.</para>
841 <!-- TODO : comment traduire "group-writable home" ? -->
842 </listitem>
843 <listitem><para id="x_4ac">Le fichier <filename
844 role="special">authorized_keys</filename> de l'utilisateur peut avoir
845 un problème. Si quelqu'un d'autre que l'utilisateur possède ou peut écrire
846 dans ce fichier, le démon ssh n'aura pas confiance ni ne le lira.</para>
847 </listitem></itemizedlist>
849 <para id="x_4ad">Dans le monde idéal, vous devriez être capable d'exécuter la
850 commande suivante avec succès, et elle devrait imprimer exactement
851 une ligne en sortie, la date et l'heure actuelle.</para>
852 <programlisting>ssh myserver date</programlisting>
853 <!-- TODO : comment traduire "junk" ? -->
854 <para id="x_4ae">Si, sur votre serveur, vous avec des scripts de connexion qui
855 impriment des bannières ou d'autre "junk" même en fonctionnement non-interactif
856 comme ici, vous devriez corriger cela avant de continuer, comme cela elles
857 imprimeront des sorties que si elles fonctionnent en mode interactif.
858 Autrement, au minimum, ces bannières encombreront les sorties de Mercurial.
859 Pire, elles pourront potentiellement causer des problèmes avec des commandes
860 Mercurial exécutées à distance. Mercurial essaye de détecter et d'ignorer des
861 bannières dans des sessions <command>ssh</command> non-interactives, mais il
862 n'est pas infaillible. (Si
863 vous éditez vos scripts de connexion sur votre serveur, la manière habituelle
864 de voir si un script de connexion fonctionne dans un shell interactif
865 est de vérifier le code de retour de la commande
866 <literal>tty -s</literal>.)</para>
868 <para id="x_4af">Lorsque vous avez vérifié que le bon vieux ssh fonctionne
869 avec votre serveur, l'étape suivante est de s'assurer que Mercurial fonctionne
870 sur le serveur. La commande suivant devrait fonctionnement correctement :</para>
872 <programlisting>ssh myserver hg version</programlisting>
874 <para id="x_4b0">Si vous voyez un message d'erreur au lieu de la sortie normale de
875 <command role="hg-cmd">hg version</command>, c'est habituellement
876 parce que vous n'avez pas installé Mercurial dans <filename
877 class="directory">/usr/bin</filename>. Ne vous inquiétez pas si
878 c'est le cas ; vous n'avez pas besoin de le faire. Mais vous devriez
879 vérifiez quelques problèmes possibles.</para>
880 <itemizedlist>
881 <listitem><para id="x_4b1">Mercurial est-il vraiment installé sur le
882 serveur ? Je sais que cela semble évident, mais cela vaut la peine
883 de vérifier !</para>
884 </listitem>
885 <listitem><para id="x_4b2">Peut-être que le chemin de recherche de votre shell
886 (habituellement défini via la variable d'environnement<envar>PATH</envar>)
887 est simplement mal configuré.</para>
888 </listitem>
889 <listitem><para id="x_4b3">Peut-être que votre variable d'environnement
890 <envar>PATH</envar> pointe vers l'endroit de l'exécutable
891 <command>hg</command> uniquement si la session est
892 interactive. Ceci peut arriver si vous mettez le chemin dans
893 le mauvais script de connextion. Regardez la documentation de
894 votre shell pour les détails.</para>
895 </listitem>
896 <listitem><para id="x_4b4">La variable d'environnement <envar>PYTHONPATH</envar>
897 peut devoir contenir le chemin vers les modules Python de Mercurial.
898 Elle peut ne pas être définie ; elle peut être incorrecte ; ou elle peut être
899 définie que si la connexion est interactive.</para>
900 </listitem></itemizedlist>
902 <para id="x_4b5">Si vous pouvez exécuter <command role="hg-cmd">hg version</command>
903 sur une connexion ssh, bravo ! Vous avez réglé les problèmes du serveur
904 et du client. Vous devriez maintenant être capable d'utiliser Mercurial pour
905 accéder à des dépôts hébergés par cet utilisateur sur ce serveur.
906 Si vous avez des problèmes avec Mercurial et ssh à ce moment,
907 essayer d'utiliser l'option <option role="hg-opt-global">--debug</option>
908 pour obtenir une image plus claire de ce qui se passe.</para>
909 </sect2>
910 <sect2>
911 <title>Utilisation de la compression avec ssh</title>
913 <para id="x_4b6">Mercurial ne comprime pas les données quand il utilise
914 le protocole ssh, car le protocole ssh peut comprimer de manière transparente
915 les données. De plus, le comportement par défaut des clients ssh est de
916 <emphasis>ne pas</emphasis> demander de la compression.</para>
918 <para id="x_4b7">Sur n'importe quel réseau autre qu'un réseau local rapide (même
919 un réseau sans fil), utiliser la compression améliore significativement la
920 vitesse des opérations réseau de Mercurial. Par exemple, sur un WAN,
921 quelqu'un a mesuré que la compression a réduit la durée pour cloner un dépôt
922 particulièrement grand de 51 minutes à 17 minutes.</para>
924 <para id="x_4b8">Les deux commandes <command>ssh</command> et <command>plink</command>
925 acceptent une option <option role="cmd-opt-ssh">-C</option> qui active
926 la compression. Vous pouvez facilement éditer votre <filename
927 role="special">~/.hgrc</filename> pour activer la compression pour
928 tous les usages de Mercurial du protocole ssh. Voici comment faire
929 pour la commande habituelle <command>ssh</command> sur des systèmes Unix-like,
930 par exemple.</para>
931 <programlisting>[ui]
932 ssh = ssh -C</programlisting>
933 <!-- TODO comment traduire "Unix-like" ? -->
934 <para id="x_4b9">Si vous utilisez <command>ssh</command> sur un
935 système Unix-like, vous pouvez le configurer pour toujours utiliser
936 la compression lors de la connexion avec votre serveur. Pour cela, éditer
937 votre fichier <filename role="special">.ssh/config</filename>
938 (qui peut ne pas encore exister), comme suit.</para>
940 <programlisting>Host hg
941 Compression yes
942 HostName hg.example.com</programlisting>
944 <para id="x_4ba">Ceci définit un alias pour le nom d'hôte,
945 <literal>hg</literal>. Quand vous utilisez ce nom d'hôte sur la
946 ligne de commande <command>ssh</command> ou dans une URL Mercurial en
947 protocole <literal>ssh</literal>,
948 <command>ssh</command> se connectera à
949 <literal>hg.example.com</literal> et utilisera la compression. Ceci
950 vous offre à la fois un nom plus court à taper et la compression,
951 chacun est une bonne chose en lui-même.</para>
952 </sect2>
953 </sect1>
955 <sect1 id="sec:collab:cgi">
956 <title>Service sur HTTP grâce à CGI</title>
958 <para id="x_6a8">La manière la plus simple d'héberger un ou plusieurs dépôts de
959 manière permanente est d'utiliser un serveur web et le support CGI de Mercurial.
960 </para>
962 <para id="x_4bb">En fonction de votre ambition, configurer l'interface CGI
963 de Mercurial peut vous prendre de quelques instants à plusieurs heures.</para>
965 <para id="x_4bc">Nous commencerons par le plus simple des exemples, et travailler
966 vers une configuration plus complexe. Même pour le cas le plus élémentaire,
967 vous devrez certainement lire et modifier la configuration de votre serveur web.</para>
969 <note>
970 <title>Grande tolérance à la peine exigée</title>
972 <para id="x_4bd">Configurer un serveur web est une activité complexe,
973 délicate, et dépendant fortement du système. Il m'est absolument impossible
974 de vous donner les instructions qui couvriront tous les cas que vous
975 rencontrerez. Faites comme bon vous semblera en suivant les sections ci-dessous.
976 Soyez prêts à faire beaucoup d'erreurs, et à consacrer beaucoup de temps à lire
977 les logs d'erreur de votre serveur.</para>
979 <para id="x_6a9">Si vous n'avez pas un estomac solide pour tordre des
980 configurations à maintes reprises, ou un besoin irrésistible d'héberger vos
981 propres services, vous pourriez vouloir essayer un des services d'hébergement
982 public que j'ai mentionné plus tôt.</para>
983 </note>
985 <sect2>
986 <title>Liste de contrôle de la configuration du serveur web</title>
988 <para id="x_4be">Avant de continuer, prenez quelques instants pour contrôler
989 quelques aspects de l'installation de votre système.</para>
991 <orderedlist>
992 <listitem><para id="x_4bf">Avez-vous un serveur web installé ?
993 Mac OS X et quelques distributions Linux sont fournis avec
994 Apache, mais beaucoup d'autres systèmes peuvent ne pas avoir de serveur web
995 installé.</para>
996 </listitem>
997 <listitem><para id="x_4c0">Si vous avez un serveur web installé, fonctionne-t-il
998 réellement ? Sur la plupart des systèmes, même si il y a en un, il sera désactivité
999 par défaut.</para>
1000 </listitem>
1001 <listitem><para id="x_4c1">Votre serveur est-il configuré pour vous permettre de
1002 faire fonctionner des programmes CGI dans le répertoire où vous prévoyer de le faire ?
1003 La plupart des serveurs désactivent explicitement l'aptitude à faire fonctionner des
1004 programmes CGI.</para>
1005 </listitem></orderedlist>
1007 <para id="x_4c2">Si vous n'avez pas de serveur web installé, et n'avez pas
1008 d'expérience solide dans la configuration Apache, vous devriez envisager
1009 d'utiliser le serveur web <literal>lighttpd</literal> au lieu
1010 d'Apache. Apache a une réputation bien méritée de configuration baroque et
1011 déroutante. Bien que <literal>lighttpd</literal> ait moins de fonctions
1012 qu'Apache, la plupart de celles-ci ne sont pas utiles pour servir
1013 des dépôts Mercurial. Et <literal>lighttpd</literal> est incontestablement
1014 <emphasis>beaucoup</emphasis> plus facile pour débuter
1015 qu'Apache.</para>
1016 </sect2>
1019 <sect2>
1020 <title>Configuration élémentaire de CGI</title>
1022 <para id="x_4c3">Sur les systèmes Unix-like, il est habituel pour les utilisateurs d'avoir un
1023 sous-répertoire nommé quelque chose comme <filename
1024 class="directory">public_html</filename> dans leur "home
1025 directory", à partir duquel ils peuvent servir des pages web. Un fichier
1026 appelé <filename>foo</filename> dans ce répertoire sera
1027 accessible à une URL de la forme
1028 <literal>http://www.example.com/username/foo</literal>.</para>
1030 <para id="x_4c4">Pour commencer, trouver le script <filename
1031 role="special">hgweb.cgi</filename> qui devrait être
1032 présent dans votre installation de Mercurial. Si vous ne pouvez pas trouver
1033 rapidement une copie locale sur votre système, téléchargez-le simplement
1034 du dépôt maître de Mercurial à <ulink
1035 url="http://www.selenic.com/repo/hg/raw-file/tip/hgweb.cgi">http://www.selenic.com/repo/hg/raw-file/tip/hgweb.cgi</ulink>.</para>
1037 <para id="x_4c5">Vous devrez copier ce script dans votre répertoire <filename
1038 class="directory">public_html</filename>, et vous assurez qu'il est
1039 exécutable.</para>
1040 <programlisting>cp .../hgweb.cgi ~/public_html
1041 chmod 755 ~/public_html/hgweb.cgi</programlisting>
1042 <para id="x_4c6">L'argument <literal>755</literal> de
1043 <command>chmod</command> est un peu plus général que de rendre
1044 le script exécutable: il garantit que le script est
1045 exécutable par n'importe qui, et que les permissions d'écriture pour le <quote>group</quote> et les
1046 <quote>other</quote> <emphasis>ne</emphasis> sont
1047 <emphasis>pas</emphasis> définies. Si vous laissez ces
1048 permissions d'écriture activées, le sous-système <literal>suexec</literal>
1049 d'Apache refuserait probablement d'exécuter le script. En fait,
1050 <literal>suexec</literal> insiste aussi pour que le
1051 <emphasis>répertoire</emphasis> dans lequel le script réside
1052 ne soit pas inscriptible par d'autres.</para>
1053 <programlisting>chmod 755 ~/public_html</programlisting>
1055 <sect3 id="sec:collab:wtf">
1056 <title>Que pourrait-il <emphasis>éventuellement</emphasis> mal
1057 se passer ?</title>
1059 <para id="x_4c7">Une fois que vous avez copié le script CGI à sa place,
1060 allez dans un navigateur et essayer d'ouvrir l'URL
1061 <literal>http://myhostname/~myuser/hgweb.cgi</literal>,
1062 <emphasis>mais</emphasis> attendez-vous à un échec immédiat.
1063 Il y a une forte probabilité que d'essayer de visiter cette URL
1064 échouera, et il y a beaucoup de raisons possibles pour cela. En
1065 fait, vous devrez probablement trébucher sour pratiquement chacun des
1066 erreurs possibles ci-dessous, donc lisez attentivement. Les
1067 problèmes suivants sont tous ceux que j'ai rencontré sur un système
1068 tournant Fedora 7, avec une nouvelle installation d'Apache, et un
1069 compte utilisateur que j'avais créé spécialement pour réaliser cet
1070 exercice.</para>
1071 <!-- TODO comment traduire "per-user" ? -->
1072 <para id="x_4c8">Votre serveur web peut avoir des répertoires "per-user" désactivés.
1073 Si vous utilisez Apache, cherchez une directive <literal>UserDir
1074 </literal>dans votre fichier de configuration. Si il n'y en a pas,
1075 les répertoires "per-user" seront désactivés. Si il en existe un,
1076 mais que sa valeur est <literal>disabled</literal>, alors
1077 les répertoires "per-user" seront désactivés. Autrement, la
1078 chaîne de caractères après <literal>UserDir</literal> donne le nom du
1079 sous-répertoire qu'Apache regardera dans votre répertoire "home",
1080 par exemple<filename
1081 class="directory">public_html</filename>.</para>
1083 <para id="x_4c9">Vos permissions d'accès de fichier peuvent être trop restrictives.
1084 Le serveur web doit être capable de traverser votre répertoire home
1085 et les répertoires sous votre répertoire <filename
1086 class="directory">public_html</filename>, et
1087 de lire les fichiers sous le dernier aussi. Voici une recette rapide
1088 pour vous aider à rendre vos permissions plus adéquates.</para>
1089 <programlisting>chmod 755 ~
1090 find ~/public_html -type d -print0 | xargs -0r chmod 755
1091 find ~/public_html -type f -print0 | xargs -0r chmod 644</programlisting>
1093 <para id="x_4ca">L'autre possibilité avec les permissions est que vous
1094 pourriez obtenir une fenêtre complètement vide lorsque vous essayez de
1095 charger le script. Dans ce cas, c'est probablement que vos permissions
1096 d'accès sont <emphasis>trop permissives</emphasis>. Le sous-système
1097 <literal>suexec</literal> d'Apache n'exécute pas un script
1098 qui est inscriptible par le groupe ou le monde, par exemple.</para>
1100 <para id="x_4cb">Votre serveur web peut être configuration pour refuser
1101 l'exécution de programmes CGI dans votre répertoire web "per-user".
1102 Voici la configuration "per-user" par défaut d'Apache pour mon
1103 système Fedora.</para>
1105 &ch06-apache-config.lst;
1107 <para id="x_4cc">Si vous trouvez un groupe qui ressemble à
1108 <literal>Directory</literal> dans votre configuration Apache,
1109 la directive à regarder est
1110 <literal>Options</literal>. Ajoutez <literal>ExecCGI</literal>
1111 à la fin de cette liste si cela manque, et redémarrer le serveur
1112 web.</para>
1114 <para id="x_4cd">Si vous trouvez qu'Apache vous donne le texte du script
1115 CGI au lie de l'exécuter, vous pouvez avoir besoin soit de
1116 décommenter (si déjà présent) ou d'ajouter une directive telle que
1117 celle-ci.</para>
1118 <programlisting>AddHandler cgi-script .cgi</programlisting>
1119 <!-- TODO comment traduire "system-wide" ? -->
1120 <para id="x_4ce">La possibilité suivante est que vous pourriez
1121 obtenir une trace coloré Python prétendant qu'il ne peut pas
1122 importer un module relatif à <literal>mercurial</literal>. Ceci est
1123 réellement un progrès ! Le serveur est maintenant capable d'exécuter
1124 votre script CGI. Cette erreur arrive probablement si vous exécutez
1125 une installation privée de Mercurial, au lieu d'une version
1126 "system-wide". Souvenez-vous que le serveur web fait fonctionner
1127 le programme CGI sans aucune des variables d'environnement que vous
1128 considérez comme certaines dans une session interactive. Si
1129 cette erreur vous arrive, éditez une copie de <filename
1130 role="special">hgweb.cgi</filename> et suivez les indications
1131 à l'intérieur de celui-ci pour corriger votre variable
1132 d'environnement <envar>PYTHONPATH</envar>.</para>
1134 <para id="x_4cf">Pour finir, vous êtes <emphasis>certain</emphasis>
1135 d'avoir une autre trace colorée Python : celle-ci
1136 se plaindra de ne pas pouvoir trouver <filename
1137 class="directory">/path/to/repository</filename>. Éditez
1138 votre script <filename role="special">hgweb.cgi</filename>
1139 et remplacez la chaîne de caractères <filename
1140 class="directory">/path/to/repository</filename> par le
1141 chemin complet du dépôt que vous voulez servir.</para>
1143 <para id="x_4d0">À ce moment-là, quand vous essayez de recharger la page,
1144 vous devriez avoir une jolie vue HTML de l'historique de votre dépôt.
1145 Ouf !</para>
1146 </sect3>
1148 <sect3>
1149 <title>Configurer lighttpd</title>
1151 <para id="x_4d1">Pour être exhaustif dans mes expériences, j'ai essayé
1152 de configurer le serveur web <literal>lighttpd</literal> devenu
1153 populaire pour servir le même dépôt que celui décrit plus haut
1154 avec Apache. J'ai déjà surmonter tous les problèmes décrits avec
1155 Apache, beaucoup ne sont pas spécifique à un serveur.
1156 Comme résultat, j'étais pratiquement sûr que mes permissions de
1157 fichiers et de répertoires étaient bonnes, et que mon script
1158 <filename role="special">hgweb.cgi</filename> était correctement
1159 édité.</para>
1161 <para id="x_4d2">Une fois qu'Apache tournait, avoir
1162 <literal>lighttpd</literal> pour servir le dépôt était immédiat
1163 (en d'autres mots, même si vous essayez d'utiliser
1164 <literal>lighttpd</literal>, vous devriez lire la section
1165 Apache). J'ai d'abord dû éditer la section
1166 <literal>mod_access</literal> de son fichier de configuration
1167 pour activer <literal>mod_cgi</literal> et
1168 <literal>mod_userdir</literal>, les deux étaient désactivés
1169 par défaut sur mon système. J'ai ensuite ajouté quelques lignes à
1170 la fin du fichier de configuration, pour ajouter ces modules.</para>
1171 <programlisting>userdir.path = "public_html"
1172 cgi.assign = (".cgi" =&gt; "" )</programlisting>
1173 <para id="x_4d3">Un fois ceci fait, <literal>lighttpd</literal> a
1174 fonctionné immédiatemment pour moi. Si j'avais configuré
1175 <literal>lighttpd</literal> avant Apache, je serais sans doute
1176 tombé dans beaucoup des mêmes problèmes de configuration
1177 "system-level" comme j'ai eu avec Apache. De plus, j'ai
1178 trouvé <literal>lighttpd</literal> être notablemen plus facile à
1179 configurer qu'Apache, même si j'ai utilisé Apache depuis plus
1180 d'une décennie, et ceci était ma première expérience avec
1181 <literal>lighttpd</literal>.</para>
1182 </sect3>
1183 </sect2>
1185 <sect2>
1186 <title>Partager plusieurs dépôts avec un seul script CGI</title>
1188 <para id="x_4d4">Le script <filename role="special">hgweb.cgi</filename>
1189 vous laisse seulement publier un seul dépôt, ce qui est une limitation
1190 ennuyeuse. Si vous voulez publier plus d'un dépôt
1191 sans "wracking yourself" avec de multiples copies du même
1192 script, chacune avec un nom différent, un meilleur choix est d'utiliser
1193 le script <filename role="special">hgwebdir.cgi</filename>.</para>
1195 <para id="x_4d5">La procédure pour configurer <filename
1196 role="special">hgwebdir.cgi</filename> est seulement un peu plus
1197 compliquée que pour <filename
1198 role="special">hgweb.cgi</filename>. D'abord, vous devez obtenir
1199 une copie du script. Si vous n'en avez pas une sous la main, vous pouvez
1200 télécharger une copie depuis le dépôt maître de Mercurial à <ulink
1201 url="http://www.selenic.com/repo/hg/raw-file/tip/hgwebdir.cgi">http://www.selenic.com/repo/hg/raw-file/tip/hgwebdir.cgi</ulink>.</para>
1203 <para id="x_4d6">Vous aurez besoin de copier ce script dans votre
1204 répertoire <filename class="directory">public_html</filename>, et
1205 vous assurer qu'il est exécutable.</para>
1207 <programlisting>cp .../hgwebdir.cgi ~/public_html
1208 chmod 755 ~/public_html ~/public_html/hgwebdir.cgi</programlisting>
1210 <!-- TODO comment traduire "out of the way" ? -->
1211 <para id="x_4d7">Avec une configuration élémentaire "out of the way", essayez de
1212 visiter <literal>http://myhostname/~myuser/hgwebdir.cgi</literal>
1213 dans votre navigateur. Il devrait afficher une liste vide
1214 de dépôts. Si vous obtenez une fenêtre vide ou un message
1215 d'erreur, essayer de parcourir la liste de problèmes
1216 potentiels dans <xref
1217 linkend="sec:collab:wtf"/>.</para>
1219 <para id="x_4d8">Le script <filename role="special">hgwebdir.cgi</filename>
1220 se base sur un fichier de configuration externe. Par défaut,
1221 il cherche un fichier nommé <filename
1222 role="special">hgweb.config</filename> dans le même répertoire
1223 que lui. Vous devrez créer ce fichier, et le rendre
1224 lisible par tout le monde. Le format de ce fichier est semblable à
1225 un fichier Windows <quote>ini</quote>, comme compris par un module
1226 Python <literal>ConfigParser</literal>
1227 <citation>web:configparser</citation>.</para>
1229 <para id="x_4d9">La façon la plus facile de configurer <filename
1230 role="special">hgwebdir.cgi</filename> est avec une section
1231 appellée <literal>collections</literal>. Ceci publiera automatiquement
1232 <emphasis>chaque</emphasis> dépôt sous les répertoires
1233 que vous citez. La section devrait ressembler à ceci :</para>
1234 <programlisting>[collections]
1235 /my/root = /my/root</programlisting>
1237 <para id="x_4da">Mercurial interprète ceci en regardant le nom du répertoire
1238 sur la partie <emphasis>droite</emphasis> du signe
1239 <quote><literal>=</literal></quote> ; en trouvant les répertoires
1240 dans cette hiérarchie de répertoires ; et en utilisant le texte sur la
1241 <emphasis>gauche</emphasis> pour retirer le texte correspondant des
1242 noms qu'il listera réellement dans l'interface web.
1243 Le restant du chemin après que ce "stripping" a été réalisé est
1244 appelé un <quote>chemin virtuel (virtual path)</quote>.</para>
1246 <para id="x_4db">Étant donné l'exemple ci-dessus, si vous avez un
1247 dépôt dont le chemin local est <filename
1248 class="directory">/my/root/this/repo</filename>, le script CGI
1249 retirera le début <filename
1250 class="directory">/my/root</filename> du nom, et
1251 publiera le dépôt avec un chemin virtuel <filename
1252 class="directory">this/repo</filename>. Si l'URL de base de
1253 notre script CGI est
1254 <literal>http://myhostname/~myuser/hgwebdir.cgi</literal>,
1255 l'URL complète URL pour ce dépôt sera
1256 <literal>http://myhostname/~myuser/hgwebdir.cgi/this/repo</literal>.</para>
1258 <para id="x_4dc">Si nous remplaçons<filename
1259 class="directory">/my/root</filename> sur la gauche de
1260 cet exemple par <filename
1261 class="directory">/my</filename>, alors <filename
1262 role="special">hgwebdir.cgi</filename> retirera seulement
1263 <filename class="directory">/my</filename> du nom du dépôt,
1264 et nous donnera comme chemin virtuel <filename
1265 class="directory">root/this/repo</filename> au lieu de
1266 <filename class="directory">this/repo</filename>.</para>
1268 <para id="x_4dd">Le script <filename role="special">hgwebdir.cgi</filename>
1269 cherchera récursivement dans chaque répertoire listé dans la
1270 section <literal>collections</literal> de son fichier de configuration,
1271 mais, il <literal>ne</literal> cherchera <literal>pas</literal> recursivement
1272 dans les répertoires qu'il trouvera.</para>
1274 <para id="x_4de">Le mécanisme de <literal>collections</literal> rend facile
1275 la publication de plusieurs dépôts de façon <quote>fire and
1276 forget</quote>. Vous devez seulement installer le script CGI
1277 et le fichier de configuration une seule fois. Après, vous pouvez
1278 publier ou "dépublier" un dépôt n'importe quand en le déplaçant simplement
1279 dans, ou hors de la hiérarchie de répertoire dans laquelle vous avez
1280 indiqué à <filename role="special">hgwebdir.cgi</filename> de
1281 regarder.</para>
1283 <sect3>
1284 <title>Spécifier explicitement quels dépôts publier</title>
1286 <para id="x_4df">En plus du mécanisme de <literal>collections</literal>,
1287 le script <filename
1288 role="special">hgwebdir.cgi</filename> vous permet
1289 de publier une liste spécifique de dépôts. Pour cela,
1290 créez une section <literal>paths</literal>, avec un contenu de
1291 la forme suivante.</para>
1292 <programlisting>[paths]
1293 repo1 = /my/path/to/some/repo
1294 repo2 = /some/path/to/another</programlisting>
1296 <para id="x_4e0">Dans ce cas, le chemin virtuel (le composant qui
1297 apparaîtra dans une URL) est sur la gauche de chaque
1298 définition, tandis que le chemin vers le dépôt est sur la
1299 droite. Notez qu'il n'y a pas besoin de relation
1300 entre le chemin virtuel que vous choisissez et
1301 l'emplacement d'un dépôt dans votre système de fichiers.</para>
1303 <para id="x_4e1">Si vous le souhaitez, vous pouvez utiliser
1304 les mécanismes de
1305 <literal>collections</literal> et de <literal>paths</literal>
1306 simultanément dans un seul fichier de configuration.</para>
1308 <note>
1309 <title>Prendre garde aux chemins virtuels en double</title>
1311 <para id="x_4e2">Si plusieurs dépôts ont le même
1312 chemin virtuel, <filename
1313 role="special">hgwebdir.cgi</filename> ne signalera pas
1314 d'erreur. Au lieu de cela, il se comportera de façon
1315 imprévisible.</para>
1316 </note>
1317 </sect3>
1318 </sect2>
1320 <sect2>
1321 <title>Télécharger des archives de sources</title>
1323 <para id="x_4e3">L'interface web de Mercurial laisse les utilisateurs télécharger
1324 une archive de n'importe quelle révision. Cette archive contiendra une image du
1325 répertoire de travail comme pour cette révision, mais il ne contiendra pas
1326 une copie des données du dépôt.</para>
1328 <para id="x_4e4">Par défaut, cette fonctionnalité n'est pas activée. Pour l'activer,
1329 vous devrez ajouter un élément <envar
1330 role="rc-item-web">allow_archive</envar> à la section
1331 <literal role="rc-web">web</literal> de votre <filename
1332 role="special">~/.hgrc</filename>; voyez plus loin pour des détails.</para>
1333 </sect2>
1334 <sect2>
1335 <title>Options de configuration web</title>
1337 <para id="x_4e5">Les interfaces web de Mercurial (la commande <command role="hg-cmd">hg
1338 serve</command>, et les scripts <filename
1339 role="special">hgweb.cgi</filename> et <filename
1340 role="special">hgwebdir.cgi</filename>) ont un nombre
1341 d'options de configuration que vous pouvez mettre. Celles-ci
1342 appartiennent à une section appelée <literal
1343 role="rc-web">web</literal>.</para>
1344 <itemizedlist>
1345 <listitem><para id="x_4e6"><envar
1346 role="rc-item-web">allow_archive</envar> : détermine
1347 quels mécanismes de téléchargement d'archive (si il y en a) Mercurial
1348 accepte. Si vous activez cette fonctionnalité, les utilisateurs de
1349 l'interface web seront capable de télécharger une archive de
1350 n'importe quelle révision d'un dépôt qu'ils regardent. Pour activer
1351 la fonction archive, cet élément doit prendre la forme d'une
1352 série de mots pris dans la liste ci-dessous.</para>
1353 <itemizedlist>
1354 <listitem><para id="x_4e7"><literal>bz2</literal>: une
1355 archive <command>tar</command>, comprimée en utilisant la
1356 compression <literal>bzip2</literal>. Ceci a le meilleur
1357 taux de compression, mais utilise le plus de temps processeur sur
1358 le serveur.</para>
1359 </listitem>
1360 <listitem><para id="x_4e8"><literal>gz</literal>: une
1361 archive <command>tar</command>, comprimée en utilisant la
1362 compression <literal>gzip</literal>.</para>
1363 </listitem>
1364 <listitem><para id="x_4e9"><literal>zip</literal>: une
1365 archive <command>zip</command>, comprimée en utilisant la
1366 compression LZW. Ce format a le pire taux de compression,
1367 mais il est largement utilisé dans le monde Windows.</para>
1368 </listitem>
1369 </itemizedlist>
1370 <para id="x_4ea">Si vous fournissez une liste vide, ou n'avez pas
1371 d'entrée <envar role="rc-item-web">allow_archive</envar> du tout,
1372 cette fonctionnalité sera désactivée. Voici un exemple de
1373 comment activer les trois formats supportés.</para>
1374 <programlisting>[web]
1375 allow_archive = bz2 gz zip</programlisting>
1376 </listitem>
1377 <listitem><para id="x_4eb"><envar role="rc-item-web">allowpull</envar>:
1378 Boolean. Détermine si l'interface web permet aux
1379 utilisateurs distants de <command role="hg-cmd">hg pull</command>
1380 et <command role="hg-cmd">hg clone</command> ce
1381 dépôt sur HTTP. Si mis à <literal>no</literal> ou
1382 <literal>false</literal>, seule la partie
1383 <quote>orienté humain</quote> de l'interface web
1384 est disponible.</para>
1385 </listitem>
1386 <!-- TODO comment traduire "free-form" ? -->
1387 <listitem><para id="x_4ec"><envar role="rc-item-web">contact</envar>:
1388 String. Une chaîne de caractères "free-form" (mais de préférence brève)
1389 identifiant la personne ou le groupe responsable du
1390 dépôt. Ceci contient souvent le nom et l'adresse électronique
1391 d'une personne ou d'une liste de distribution. Il est judicieux de
1392 placer cette entrée dans le fichier <filename
1393 role="special">.hg/hgrc</filename> du dépôt, mais il peut être
1394 judicieux d'utiliser un <filename
1395 role="special">~/.hgrc</filename> global si chaque dépôt
1396 a un seul "mainteneur".</para>
1397 </listitem>
1398 <listitem><para id="x_4ed"><envar role="rc-item-web">maxchanges</envar>:
1399 Integer. La valeur maximum par défaut du nombre de changesets à
1400 afficher dans une seule page de sortie.</para>
1401 </listitem>
1402 <listitem><para id="x_4ee"><envar role="rc-item-web">maxfiles</envar>:
1403 Integer. Le nombre maximum par défaut de fichier modifiés à
1404 à afficher dans une seule page de sortie.</para>
1405 </listitem>
1406 <listitem><para id="x_4ef"><envar role="rc-item-web">stripes</envar>:
1407 Integer. Si l'interface web affiche alternativement desIf the web interface displays alternating
1408 <quote>rayures</quote> pour rendre plus facile l'alignement visuel
1409 des lignes lorsque vous regarder une table, ce nombre contrôle
1410 le nombre de lignes dans chaque rayure.</para>
1411 </listitem>
1412 <!-- TODO comment traduire "template" ? J'ai mis "modèle" mais j'ai un doute. -->
1413 <listitem><para id="x_4f0"><envar
1414 role="rc-item-web">style</envar>: Contrôle le "modèle"
1415 que Mercurial utilise pour afficher l'interface web. Mercurial
1416 est livré avec plusieurs "modèles" web.</para>
1417 <itemizedlist>
1418 <listitem>
1419 <para id="x_6aa"><literal>coal</literal> est monochromatique.</para>
1420 </listitem>
1421 <listitem>
1422 <para id="x_6ab"><literal>gitweb</literal> émule le style visuel
1423 de l'interface web de git.</para>
1424 </listitem>
1425 <listitem>
1426 <para id="x_6ac"><literal>monoblue</literal> utilise des bleus et des
1427 gris massifs.</para>
1428 </listitem>
1429 <listitem>
1430 <para id="x_6ad"><literal>paper</literal> est le "modèle" par défaut.</para>
1431 </listitem>
1432 <listitem>
1433 <para id="x_6ae"><literal>spartan</literal> a été le "modèle" par défaut
1434 durant longtemps.</para>
1435 </listitem>
1436 </itemizedlist>
1437 <para id="x_6af">Vous pouvez aussi spécifiez un "modèle" personnalisé à vous;
1438 voyez <xref linkend="chap:template"/> pour des détails. Ici, vous pouvez
1439 voir comment activer le style <literal>gitweb</literal>.</para>
1440 <programlisting>[web]
1441 style = gitweb</programlisting>
1442 </listitem>
1443 <listitem><para id="x_4f1"><envar role="rc-item-web">templates</envar>:
1444 Path. Le répertoire dans lequel chercher les fichiers "modèles".
1445 Par défaut, Mercurial cherche dans le répertoire dans lequel
1446 il a été installé.</para>
1447 </listitem></itemizedlist>
1448 <para id="x_4f2">Si vous utilisez <filename
1449 role="special">hgwebdir.cgi</filename>, vous pouvez mettre quelques
1450 éléments de configuration dans une section <literal role="rc-web">web</literal>
1451 du fichier <filename
1452 role="special">hgweb.config</filename> au lieu d'un fichier
1453 <filename role="special">~/.hgrc</filename>, par
1454 commodité. Ces éléments sont <envar
1455 role="rc-item-web">motd</envar> et <envar
1456 role="rc-item-web">style</envar>.</para>
1458 <sect3>
1459 <title>Options spécifiques à un dépôt individuel</title>
1461 <para id="x_4f3">Quelques éléments de configuration <literal role="rc-web">web</literal>
1462 devraient être mis dans <filename
1463 role="special">.hg/hgrc</filename> local à un dépôt, plutôt que dans un
1464 <filename role="special">~/.hgrc</filename> d'utilisateur ou global.</para>
1465 <itemizedlist>
1466 <listitem><para id="x_4f4"><envar
1467 role="rc-item-web">description</envar>: String. Une chaîne de
1468 caractères "free-form" (mais de préférence brève) qui décrit
1469 le contenu ou le but du dépôt.</para>
1470 </listitem>
1471 <listitem><para id="x_4f5"><envar role="rc-item-web">name</envar>:
1472 String. Le nom à utiliser pour le dépôt dans l'interface
1473 web. Ceci prime sur le nom par défaut, qui est le dernier
1474 composant du chemin du dépôt.</para>
1475 </listitem></itemizedlist>
1476 </sect3>
1478 <sect3>
1479 <title>Options spécifiques à la commande <command role="hg-cmd">hg
1480 serve</command></title>
1482 <para id="x_4f6">Certaines entrées dans la section <literal
1483 role="rc-web">web</literal> d'un fichier <filename
1484 role="special">~/.hgrc</filename> sont là seulement pour être utilisée
1485 avec la commande <command role="hg-cmd">hg serve</command>.</para>
1486 <itemizedlist>
1487 <listitem><para id="x_4f7"><envar role="rc-item-web">accesslog</envar>:
1488 Path. Le nom d'un fichier dans lequel écrire le "log" d'accès.
1489 Par défaut, la commande <command role="hg-cmd">hg
1490 serve</command> écrit cette information sur la sortie
1491 standard, pas dans un fichier. Les entrées de "log" sont écrites
1492 dans le format de fichier standard <quote>combined</quote> utilisé
1493 par pratiquement tous les serveurs web.</para>
1494 </listitem>
1495 <listitem><para id="x_4f8"><envar role="rc-item-web">address</envar>:
1496 String. L'adresse locale sur laquelle le serveur devrait
1497 écouter les connexions entrantes. Par défaut, le serveur
1498 écoute sur toutes les adresses.</para>
1499 </listitem>
1500 <listitem><para id="x_4f9"><envar role="rc-item-web">errorlog</envar>:
1501 Path. Le nom d'un fichier dans lequel écrire le "log" d'erreur.
1502 Par défaut, la commande <command role="hg-cmd">hg
1503 serve</command> écrit cette information sur la sortie erreur,
1504 pas dans un fichier.</para>
1505 </listitem>
1506 <listitem><para id="x_4fa"><envar role="rc-item-web">ipv6</envar>:
1507 Boolean. Si il faut utiliser le protocole IPv6. Par défaut,
1508 IPv6 n'est pas utilisé.</para>
1509 </listitem>
1510 <listitem><para id="x_4fb"><envar role="rc-item-web">port</envar>:
1511 Integer. Le numéro de port TCP sur lequel le serveur devrait
1512 écouter. Le numéro de port par défaut utilisé est 8000.</para>
1513 </listitem></itemizedlist>
1514 </sect3>
1516 <sect3>
1517 <title>Choisir le bon fichier <filename
1518 role="special">~/.hgrc</filename> auquel ajouter les éléments <literal
1519 role="rc-web">web</literal></title>
1521 <para id="x_4fc">Il est important de se souvenir qu'un serveur web comme
1522 Apache ou <literal>lighttpd</literal> fonctionnera avec un ID utilisateur
1523 qui est différent du vôtre. Les scripts CGI fonctionnant sur votre serveur,
1524 tels que <filename
1525 role="special">hgweb.cgi</filename>, s'exécuteront habituellement aussi
1526 sous un autre ID utilisateur.</para>
1528 <para id="x_4fd">Si vous ajoutez des éléments <literal role="rc-web">web</literal> à
1529 votre propre fichier <filename role="special">~/.hgrc</filename> personnel,
1530 les scripts CGI ne pourront pas lire ce fichier
1531 <filename role="special">~/.hgrc</filename>. Ces réglages
1532 toucheront donc seulement le comportement de la commande <command
1533 role="hg-cmd">hg serve</command> quand vous l'exécuterez.
1534 Pour faire voir vos réglages aux scripts CGI, soit créez un
1535 fichier <filename role="special">~/.hgrc</filename> dans le répertoire
1536 "home" de l'utilisateur qui exécute votre serveur web, soit
1537 ajouter ces réglages dans un fichier <filename
1538 role="special">hgrc</filename> "system-wide".</para>
1539 </sect3>
1540 </sect2>
1541 </sect1>
1543 <sect1>
1544 <title>Configuration "system-wide"</title>
1546 <para id="x_6b0">Sur des systèmes "Unix-like" partagé par plusieurs utilisateurs
1547 (tel qu'un serveur où les gens publient des modifications), il est souvent judicieux
1548 de définir certains comportement globaux par défaut, tels que le thème à utiliser
1549 dans les interfaces web.</para>
1551 <para id="x_6b1">Si un fichier appelé <filename>/etc/mercurial/hgrc</filename>
1552 existe, Mercurial le lira au démarrage et appliquera tous les réglages
1553 de configuration qu'il trouve dans ce fichier. Il regardera aussi
1554 les fichiers finissant par une extension <literal>.rc</literal> dans un
1555 répertoire appelé <filename>/etc/mercurial/hgrc.d</filename>, et
1556 appliquera tous les réglages de configuration qu'il trouve dans chacun
1557 de ces fichiers.</para>
1559 <sect2>
1560 <title>Rendre Mercurial plus confiant</title>
1562 <para id="x_6b2">Une situation dans laquelle un <filename>hgrc</filename>
1563 global peut être utile est si des utilisateurs "pullent" des modifications
1564 faites par d'autres utilisateurs. Par défaut, Mercurial can be useful is if users are pulling changes owned by other
1565 users. By default, Mercurial ne se fiera pas à la plupart des
1566 entrées de configuration dans un fichier <filename>.hg/hgrc</filename>
1567 à l'intérieur d'un dépôt qui appartient à un utilisateur différent. Si nous
1568 clonons ou "pullons" des modifications d'un tel dépôt, Mercurial
1569 affichera un avertissement indiquant qu'il ne fait pas confiance aux
1570 <filename>.hg/hgrc</filename>.</para>
1572 <para id="x_6b3">Si quelqu'un dans un groupe Unix particulier est dans la même équipe
1573 et <emphasis>devrait</emphasis> avoir confiance dans chaque réglage
1574 de configuration des autres, ou si nous voulons avoir confiance dans des utilisateurs
1575 particuliers, nous pouvons passer outre les défauts sceptiques de Mercurial
1576 en créant un fichier <filename>hgrc</filename> "system-wide" tel que celui qui
1577 suit ::</para>
1579 <programlisting># Save this as e.g. /etc/mercurial/hgrc.d/trust.rc
1580 [trusted]
1581 # Trust all entries in any hgrc file owned by the "editors" or
1582 # "www-data" groups.
1583 groups = editors, www-data
1585 # Trust entries in hgrc files owned by the following users.
1586 users = apache, bobo
1587 </programlisting>
1588 </sect2>
1589 </sect1>
1590 </chapter>
1591 <!--
1592 local variables:
1593 sgml-parent-document: ("00book.xml" "book" "chapter")
1594 end:
1595 -->