Le blog à Fred - Mot-clé - MonotoneBlog about programming and few other hobbies
Mon blog sur la programmation et autres petits trucs2024-03-28T14:34:24+01:00Fredurn:md5:aa8fdbf61072948b94b6b73fbda45c54DotclearBissection !urn:md5:5161717ddc8d27ac4e7ee225266fe0122012-12-20T22:14:00+01:002012-12-20T22:49:18+01:00FredDéveloppementMonotone<p>non, je n'ai pas décidé de faire des expériences sur des animaux !<br />
Non, je n'ai pas décidé de me faire greffer un deuxième organe sexuel, le mien me suffit<sup>[<a href="http://frederic.praca.free.fr/index.php?post/2012/12/20/Bissection-%21#pnote-630-1" id="rev-pnote-630-1">1</a>]</sup>.<br />
J'ai décidé de faire un petit billet sur cette fonctionnalité que l'on trouve dans certains logiciels de gestion de versions qui n'est pas mal car elle aide à faire la recherche de la version qui a introduit une régression dans un logiciel.<br />
D'ailleurs, il est normal de la trouver dans <em>Monotone</em>, <em>Git</em> et <em>Mercurial</em> vu que les historiques ne sont pas forcément linéaires.</p>
<div class="footnotes"><h4>Notes</h4>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2012/12/20/Bissection-%21#rev-pnote-630-1" id="pnote-630-1">1</a>] Plus, ce serait inconvenant :D</p></div>
<p>Pour ceux qui ne le sauraient pas, je suis fan de <a href="http://monotone.ca" hreflang="en" title="Monotone">''Monotone''</a>, un beau logiciel de gestion des versions qui fut, d'après la légende, une source d'inspiration pour un certain Linus T. au moment de créer un autre logiciel dont j'ai parlé <a href="http://frederic.praca.free.fr/index.php?post/2012/11/26/A-l-abri-dans-ma-Git-oune" hreflang="en" title="Monotone">ici</a>.<br />
<br />
Mais là, ce n'est pas pour casser du sucre sur le dos des autres VCS que j'écris mais pour présenter une fonctionnalité intéressante de <em>Monotone</em>, j'ai nommé le <a href="http://www.monotone.ca/docs/Bisecting.html#Bisecting" hreflang="en" title="Bisecting">''bisecting''</a>.<br />
But de l'opération ? Retrouver LA version qui a introduit une ou plusieurs régressions dans un logiciel.<br />
Allons-y gaiement pour la démo !<br />
Toutes les étapes seront détaillées mais il est possible d'utiliser la base de données attachée à ce billet.<br />
<br />
Tout d'abord, on initialise une base de données <em>Monotone</em>.<br /></p>
<pre>
fred@dagobah:~/Dev$ mtn --db=bisect_test.mtn db init
</pre>
<p>Rien de monstrueux alors on continue en créant notre projet</p>
<pre>
fred@dagobah:~/Dev$ mtn --db=bisect_test.mtn --branch=bisect_test setup bisect_test
</pre>
<p>Là encore, si vous suivez le <a href="http://www.monotone.ca/docs/Tutorial.html#Tutorial" hreflang="en" title="Tuto">tutorial</a> de <em>Monotone</em>, toujours rien d'extraordinaire. Ajoutons un peu de code pour notre première version dans le répertoire <em>bisect_test</em> :</p>
<pre class="ada ada" style="font-family:inherit"><span style="color: #46aa03; font-weight:bold;">with</span> Ada.<span style="color: #202020;">Text_Io</span>; <span style="color: #46aa03; font-weight:bold;">use</span> Ada.<span style="color: #202020;">Text_Io</span>;
<span style="color: #46aa03; font-weight:bold;">procedure</span> Bisect <span style="color: #00007f;">is</span>
<span style="color: #00007f;">begin</span>
Put_Line<span style="color: #66cc66;">(</span><span style="color: #7f007f;">"Hello world"</span><span style="color: #66cc66;">)</span>;
<span style="color: #00007f;">end</span> Bisect;</pre>
<p>Ok, c'est nul <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /><br />
On ajoute et on <em>committe</em></p>
<pre>
fred@dagobah:~/Dev$ mtn add bisect.adb
fred@dagobah:~/Dev$ mtn ci
</pre>
<p>Après avoir saisi notre message et notre mot de passe, on a notre version. On continue :</p>
<pre class="ada ada" style="font-family:inherit"><span style="color: #46aa03; font-weight:bold;">with</span> Ada.<span style="color: #202020;">Text_Io</span>; <span style="color: #46aa03; font-weight:bold;">use</span> Ada.<span style="color: #202020;">Text_Io</span>;
<span style="color: #46aa03; font-weight:bold;">procedure</span> Bisect <span style="color: #00007f;">is</span>
<span style="color: #46aa03; font-weight:bold;">type</span> My_Type <span style="color: #00007f;">is</span> <span style="color: #46aa03; font-weight:bold;">range</span> <span style="color: #ff0000;">12</span>..<span style="color: #ff0000;">21</span>;
My_Var : My_Type := <span style="color: #ff0000;">12</span>;
<span style="color: #00007f;">begin</span>
Put_Line<span style="color: #66cc66;">(</span><span style="color: #7f007f;">"Hello world"</span><span style="color: #66cc66;">)</span>;
Put_Line<span style="color: #66cc66;">(</span><span style="color: #7f007f;">"My_Var="</span> & My_Type'Image<span style="color: #66cc66;">(</span>My_Var<span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span>;
<span style="color: #00007f;">end</span> Bisect;</pre>
<p>Rebelote, on <em>committe</em> et on refait une modif... Bon, je vais pas tout mettre là mais ce qui est intéressant, c'est d'introduire une erreur et de refaire une version après. Voilà la version finale qui finalement compile mais comme le dit le compilateur, ça va foirer <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /><br />
Merci Ada !</p>
<pre class="ada ada" style="font-family:inherit"><span style="color: #46aa03; font-weight:bold;">with</span> Ada.<span style="color: #202020;">Text_Io</span>; <span style="color: #46aa03; font-weight:bold;">use</span> Ada.<span style="color: #202020;">Text_Io</span>;
<span style="color: #46aa03; font-weight:bold;">procedure</span> Bisect <span style="color: #00007f;">is</span>
<span style="color: #46aa03; font-weight:bold;">type</span> My_Type <span style="color: #00007f;">is</span> <span style="color: #46aa03; font-weight:bold;">range</span> <span style="color: #ff0000;">12</span>..<span style="color: #ff0000;">21</span>;
My_Var : My_Type := <span style="color: #ff0000;">11</span>;
<span style="color: #00007f;">begin</span>
Put_Line<span style="color: #66cc66;">(</span><span style="color: #7f007f;">"Hello world"</span><span style="color: #66cc66;">)</span>;
<span style="color: #adadad; font-style: italic;">-- Put_Line("My_Var=" & My_Type'Image(My_Var));</span>
<span style="color: #00007f;">end</span> Bisect;</pre>
<p>Le problème, c'est que cela n'a pas été fait dans cette révision mais une ou plusieurs révisions avant.<br />
Vite, retrouvons le coupable sans faire de recherche par lecture du code mais par le test.<br />
On commence par marquer la révision courante comme foireuse :</p>
<pre>
fred@dagobah:~/Dev$ mtn bisect bad
mtn: bissection débutée à la révision « 99c46344761c157cabd4e8e41e9fb6d3a0442a92 frederic.praca@free.fr 20/12/2012 21:51:39 »
mtn: révisions en cours de bissection ; 0 bonnes, 1 mauvaises, 0 sautées. Veuillez spécifier les bonnes révisions pour débuter la recherche.
</pre>
<p>Bien sûr, vos révisions n'auront pas forcément les mêmes identifiants.<br />
Maintenant, on retourne à la version que l'on sait fonctionner pour la marquer comme correcte :</p>
<pre>
fred@dagobah:~/Dev/bisect_test$ mtn update -r 5e78416bc66278692a30f1a807aa00b25f31ca56
mtn: sélection de la cible 5e78416bc66278692a30f1a807aa00b25f31ca56 pour la mise à jour
mtn: [gauche] 75b7d43d6a0d02baa366d48984c259a8f6df755e
mtn: [droite] 5e78416bc66278692a30f1a807aa00b25f31ca56
mtn: mise à jour de « bisect.adb »
mtn: mise à jour vers la révision de base 5e78416bc66278692a30f1a807aa00b25f31ca56
fred@dagobah:~/Dev/bisect_test$ mtn bisect good
mtn: 4 révisions en cours de bissection ; 1 bonnes, 1 mauvaises, 0 sautées, 2 restantes
mtn: mise à jour vers 2aaa51f8afa82b23d85c95843ff4f75efcd3a2b4 frederic.praca@free.fr 20/12/2012 21:51:19
mtn: mise à jour de « bisect.adb »
</pre>
<p>Et voilà, on vient de préparer la dichotomie. Une petite vérification</p>
<pre>
fred@dagobah:~/Dev/bisect_test$ mtn bisect status
mtn: 4 révisions en cours de bissection ; 1 bonnes, 1 mauvaises, 0 sautées, 2 restantes
mtn: avertissement : prochaine révision pour le test de bissection est e941bd9f9386dd74860eba21a43b35c064c41425
mtn: avertissement : toutefois, cet espace de travail est actuellement à 2aaa51f8afa82b23d85c95843ff4f75efcd3a2b4
mtn: avertissement : exécutez « bisect update » pour mettre à jour vers cette révision avant de tester
</pre>
<p>L'outil nous dit même comment faire, si c'est pas du luxe !! <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /><br />
Alors, on y va</p>
<pre>
fred@dagobah:~/Dev/bisect_test$ mtn bisect update
mtn: 4 révisions en cours de bissection ; 1 bonnes, 1 mauvaises, 0 sautées, 2 restantes
mtn: mise à jour vers e941bd9f9386dd74860eba21a43b35c064c41425 frederic.praca@free.fr 20/12/2012 21:50:33
mtn: mise à jour de « bisect.adb »
</pre>
<p>Si vous avez bien regardé la base de données fournie ou votre propre base, vous vous rendrez compte que la version vers laquelle on a mis à jour n'est pas juste la suivante mais celle qui se trouve au milieu des révisions, de la dichotomie quoi !<br />
On teste et comme ça marche, on le dit à l'outil.</p>
<pre>
fred@dagobah:~/Dev/bisect_test$ mtn bisect good
mtn: 4 révisions en cours de bissection ; 2 bonnes, 1 mauvaises, 0 sautées, 1 restantes
mtn: mise à jour vers 2aaa51f8afa82b23d85c95843ff4f75efcd3a2b4 frederic.praca@free.fr 20/12/2012 21:51:19
mtn: mise à jour de « bisect.adb »
</pre>
<p>Et là encore, on se retrouve à mi-chemin entre la dernière bonne et la mauvaise.<br />
Cette fois-ci, on la teste et... Bang !!! Ça part au tapis !!<br />
Encore une fois, on le dit à l'outil</p>
<pre>
fred@dagobah:~/Dev/bisect_test$ mtn bisect bad
mtn: 4 révisions en cours de bissection ; 2 bonnes, 2 mauvaises, 0 sautées, 0 restantes
mtn: bissection terminée à la révision « 2aaa51f8afa82b23d85c95843ff4f75efcd3a2b4 frederic.praca@free.fr 20/12/2012 21:51:19 »
</pre>
<p>Et là... Youpi !!! La bissection est terminée, la première version qui a introduit l'erreur est trouvée quand la dernière révision restante est marquée comme mauvaise.<br />
Maintenant, il y a plusieurs options :</p>
<ul>
<li>Corriger et <em>committer</em> en créant une divergence</li>
<li>Désapprouver avec <em>disapprove</em> la version foireuse</li>
</ul>
<p>Enfin, il ne faut pas oublier de faire un <em>mtn bisect reset</em> pour retirer les informations de bissection.<br />
Voili, voilou, une bonne façon de retrouver des régressions :D<br />
Amusez-vous bien !</p>http://frederic.praca.free.fr/index.php?post/2012/12/20/Bissection-%21#comment-formhttp://frederic.praca.free.fr/index.php?feed/atom/comments/630A l'abri dans ma ''Git''-ouneurn:md5:63cde0cb272cb1d6e8a339e8f550c2ce2012-11-26T15:33:00+01:002012-11-27T15:30:56+01:00FredDéveloppementGitMercurialMonotoneSubversion<p>D'après Wikipedia, le terme <a href="http://fr.wikipedia.org/wiki/Guitoune" hreflang="fr" title="Guitoune">guitoune</a> désigne une tente ou un abri de fortune.<br />
Du coup, y a un petit côté camping au mieux ou au pire, un truc fait de bric et de broc.<br />
Ce que j'aime bien avec la tente, c'est le petit côté communautaire si la tente est grande, un peu comme <a href="http://fr.wikipedia.org/wiki/Yourte" hreflang="fr" title="Yourte">une yourte</a>. En plus, la tente, c'est le truc où on a l'impression d'être à l'écart du monde<sup>[<a href="http://frederic.praca.free.fr/index.php?post/2012/11/26/A-l-abri-dans-ma-Git-oune#pnote-628-1" id="rev-pnote-628-1">1</a>]</sup> au milieu de nulle part à profiter de la nature, à s'inventer une existence hors des carcans de notre société uniformisante.<br />
Il y a aussi la tente indienne dans laquelle les personnes importantes du clan se retrouvent autour du shaman qui prédit l'avenir et donne les grandes orientations après avoir bien tiré sur le calumet.<br />
Finalement, tout ça représente assez bien ce dont je vais parler maintenant.<br />
Je vous préviens, c'est dense et chiant à lire :D</p>
<div class="footnotes"><h4>Notes</h4>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2012/11/26/A-l-abri-dans-ma-Git-oune#rev-pnote-628-1" id="pnote-628-1">1</a>] ok, sauf au mois d'août dans un camping des Landes ou de la Côte d'Azur :D</p></div>
<p>Je vous l'avais promis donc je le fais. Parlons de <em>Git</em>.<br />
<br /></p>
<h4>Lingua Franca!!</h4>
<p>Quand on vit dans une grande tente avec tout pleins de copains ou dans un abri de fortune<sup>[<a href="http://frederic.praca.free.fr/index.php?post/2012/11/26/A-l-abri-dans-ma-Git-oune#pnote-628-1" id="rev-pnote-628-1">1</a>]</sup>, il est normal de penser à créer une nouvelle société et à adopter de nouveaux rites.<br />
Le mieux est même de prendre le contre-pied total de ce que l'on faisait dans sa vie d'avant.<br />
De là à créer une nouvelle langue, il n'y a qu'un pas... Et ce pas, le créateur de <em>Git</em> l'a franchi<sup>[<a href="http://frederic.praca.free.fr/index.php?post/2012/11/26/A-l-abri-dans-ma-Git-oune#pnote-628-2" id="rev-pnote-628-2">2</a>]</sup>.<br />
Vous voulez des exemples ? Que dire, des preuves ???!!!<br />
Histoire de rigoler, faisons un tour sur la page Wikipedia anglaise traitant de <a href="http://en.wikipedia.org/wiki/Revision_control#Common_vocabulary" hreflang="en">la gestion des versions</a> dans sa partie sur le vocabulaire commun à ces outils. En effet, deux exemples très intéressants se cachent là-dedans.<br /></p>
<ul>
<li><em>Checkout</em></li>
<li><em>Update</em></li>
</ul>
<p>A tout seigneur, tout honneur, commençons par <em>Checkout</em> qui se trouve être le premier dans l'alphabet. Que nous dit la définition ?<br /></p>
<blockquote><p>A check-out (or co) is the act of creating a local working copy from the repository. A user may specify a specific revision or obtain the latest. The term 'checkout' can also be used as a noun to describe the working copy.</p></blockquote>
<p>Ce terme commun, que l'on retrouve dans moultes systèmes de gestion de version, est utilisé pour désigner l'action de récupérer une révision spécifique depuis le référentiel. Il se trouve que c'est effectivement ce que fait cette commande quand on utilise <em>Subversion</em>, <em>Clearcase</em>, <em>CVS</em>, <em>bazaar</em><sup>[<a href="http://frederic.praca.free.fr/index.php?post/2012/11/26/A-l-abri-dans-ma-Git-oune#pnote-628-3" id="rev-pnote-628-3">3</a>]</sup> ou <em>Monotone</em>.<br />
Par contre, avec <em>Mercurial</em>, <em>Darcs</em> et finalement le grand inspirateur <em>Git</em>, l'équivalent, c'est la commande <em>clone</em>. Pourquoi pas ?<br />
Là où moi, ça me stresse, c'est quand on ré-utilise ce terme pour faire autre chose.<br />
Ben, tiens, justement, en cherchant la commande <em>revert</em>, spécifique à <em>Subversion</em>, <em>Monotone</em> et <em>Mercurial</em>, je me suis rendu compte que sous <em>Git</em>, on utilise... <em>Checkout</em>. Là aussi, pourquoi pas ?<br />
Le seul truc, c'est que cela permet de le faire sur un seul fichier à la fois donc en toute logique, on utilisera la commande <em>reset</em> pour l'ensemble des modifications non <q>committées</q> dans le référentiel.<br />
Finalement, quand un truc a été committé, il y a moyen de réparer grâce à <em>revert</em>... Et oui, enfin, elle existe cette foutue commande !!!<br />
Malgré la petite digression, continuons parce que ce mot <em>Checkout</em> vaut le coup !<br />
Le <em>switch</em> et l<em>'update</em> de <em>Subversion</em>, <em>Mercurial</em> et <em>Monotone</em>, qui permettent de permuter sa copie de travail vers une autre branche, sont devenus, une fois encore, une autre utilisation de <em>Checkout</em> !!<br />
Bon, pourquoi pas ?<sup>[<a href="http://frederic.praca.free.fr/index.php?post/2012/11/26/A-l-abri-dans-ma-Git-oune#pnote-628-4" id="rev-pnote-628-4">4</a>]</sup><br />
Voilà, c'est fini pour <em>Checkout</em>, passons au suivant <em>update</em>.<br />
La définition, s'il vous plait ?</p>
<blockquote><p>An update (or sync) merges changes made in the repository (by other people, for example) into the local working copy. Update is also the term used by some CM tools (CM+, PLS, SMS) for the change package concept (see changelist).</p></blockquote>
<p>Là, au moins, <em>Git</em> est totalement cohérent avec lui-même. Quand on invente une nouvelle langue, le mieux, c'est de retirer des pans entiers de la langue d'origine.<br />
On aura bien vu que globalement, <em>checkout</em> fait ce que fait <em>update</em> fait chez les autres et même plus.<br />
<br />
<a href="http://fr.wikipedia.org/wiki/Lingua_franca" hreflang="fr">''Lingua Franca''</a> était donc un titre bien choisi, une langue faite d'emprunts et connaissant de multiples variations :D<br />
<br /></p>
<h4>J'ai comme une intuition!!</h4>
<p>Vous aurez bien remarqué dans le paragraphe précédent à quel point l'utilisation de <em>git</em> est intuitive et constitue bien une évolution des outils l'ayant précédé. Comme c'est une évolution, regardons les seules nouveautés auxquelles j'ai eu à faire où dont j'ai entendu parler.<br />
D'abord le <q>stash</q>, c'est quoi donc ? C'est un coin de <em>git</em> où on stocke temporairement ce qu'on était en train de faire pour attaquer autre chose C'est une sorte de brouillon que l'on met sur le bord de la table parce que Jean-Claude a un truc super urgent à nous faire faire sur la dernière version.<br />
D'aucun diraient que ce n'est pas grave ils ont une deuxième <em>working copy</em> pointant justement sur la dernière version. Ben non, quand on fait du <em>git</em>, on fait tout au même endroit et on commence plein de trucs en même temps. En effet, l'être humain, il est super fort et il sait s'organiser donc il <em>stashe</em> et il dé-<em>stashe</em> comme un bête<sup>[<a href="http://frederic.praca.free.fr/index.php?post/2012/11/26/A-l-abri-dans-ma-Git-oune#pnote-628-5" id="rev-pnote-628-5">5</a>]</sup>. Et zou, voilà, après dé-<em>stashe</em>, le codeur il retourne faire ce qui lui plaisait tranquillement... Faut pas l'emmerder le codeur !!<br />
Allez, un lien sur le <em><a href="http://alx.github.com/gitbook/4_le_cache_%28stashing%29.html" hreflang="fr">stashing</a></em>.<br />
<br />
Le codeur, il est très fort mais des fois, malgré ses grandes capacités d'organisation, il fait des trucs pas jolis, jolis et il aimerait pas que ça se voit de trop. D'ailleurs, il aime bien aussi montrer qu'il est super fort et qu'il sait commencer des modifications avant que la fonctionnalité existe. Heureusement, <em>git</em>, il a pensé à son ego au codeur, il a la commande <em>rebase</em>.<br />
Cette commande magnifique lui permet de montrer, comme dans <a href="http://alx.github.com/gitbook/4_recombinaison_%28rebase%29.html" hreflang="fr">l'exemple ici</a>, qu'il a même pas eu besoin de faire de merge et ainsi il peut garder un bel historique bien linéaire avec le poil soyeux. Ben oui, on a beau faire du distribué et dire que on peut faire des branches comme on veut et forker comme des dingues, montrer qu'on a fait une branche qu'on a dû merger, c'est mal.<br />
Si en plus, comble du sale, on a fait tout pleins de commits pas très bien ordonnés, ça va se voir ?<br />
Et non, <em>rebase</em> est ton ami, toi codeur pas toujours très propre sur toi !!<br />
Un petit coup de <a href="http://alx.github.com/gitbook/4_recombinaison_interactive.html" hreflang="fr">''rebase -i''</a> et le tour est joué !!<br />
Bon, certains verraient ça comme une modification de l'historique mais là, c'est une fonctionnalité... Au risque de choquer, y a guère que les révisionnistes qui ré-arrangent l'histoire... Enfin, bon, quand on lit que Linus regardait <em>Monotone</em> de très près pour finalement cracher dessus comme un goret<sup>[<a href="http://frederic.praca.free.fr/index.php?post/2012/11/26/A-l-abri-dans-ma-Git-oune#pnote-628-6" id="rev-pnote-628-6">6</a>]</sup> (voir <a href="http://en.wikipedia.org/wiki/Monotone_%28software%29#Monotone_as_Git_inspiration" hreflang="en">là</a>, on se dit que la ré-écriture de l'histoire, c'est bien une fonctionnalité <img src="/themes/default/smilies/sad.png" alt=":-(" class="smiley" /><br />
<br />
Je vais finir par un ou deux trucs auquels j'ai eu un peu de mal à me faire.<br />
Si vous voulez <em>committer</em> quelque chose, il faut toujours faire un <em>add</em> avant. C'est con mais c'est comme ça, Git ne le tracera pas tout seul. Il faut placer vos changements dans le <em>staging area</em><sup>[<a href="http://frederic.praca.free.fr/index.php?post/2012/11/26/A-l-abri-dans-ma-Git-oune#pnote-628-7" id="rev-pnote-628-7">7</a>]</sup> qui est au final une sorte d'index où vous préparez vos <em>commits</em>. Pour moi, le gros inconvénient de la chose est que si on <em>committe</em> plusieurs centaines de fichiers, on peut louper qu'un fichier n'a pas été ajouté. Pire, si vous modifiez puis ajouté puis re-modifiez, il faut refaire un <em>add</em>.<br />
<br />
Et enfin, le ponpon pour la fin. <em>CVS</em> ne savait pas gérer les répertoires correctement dans l'historique et tracer les changements effectués sur ceux-ci ce qui a conduit à l'utilisation de <em>Subversion</em>. Et bien, sachez, mes chers amis, que <em><a href="http://stackoverflow.com/questions/7093602/how-to-list-the-change-history-of-the-directory-tree-in-git" hreflang="en">git ne sait pas le faire non plus</a></em> !!<br />
Enfin, autant tout le monde hurlait quand <em>CVS</em> ne savait pas le faire, autant on n'entend plus personne là-dessus quand il s'agit de <em>git</em>...<br />
<br /></p>
<h4>Conclusion!!</h4>
<p>Bon, mon expérience avec <em>git</em>, sans avoir été désagréable, n'a pas non plus été la révolution annoncé en termes de gestion de versions. Se familiariser avec la gestion de versions distribuée est déjà une étape en soi pour ce qui est de la compréhension de l'architecture donc si on doit rajouter à ça, l'apprentissage d'un outil qui, bien que très puissant, n'est absolument pas intuitif, bonjour les dégâts.<br />
J'aurais pu parler de la complexité de l'outil vu que le nombre de commandes, d'options, de comportements différents pour une même commande est assez effarant mais je préfère mettre ça sur le compte des nombreuses fonctionnalités. Pour l'anecdote, j'ai un jour lu sur un blog que <em>git</em> ne se composait que de 3 exécutables<sup>[<a href="http://frederic.praca.free.fr/index.php?post/2012/11/26/A-l-abri-dans-ma-Git-oune#pnote-628-8" id="rev-pnote-628-8">8</a>]</sup> mais soyons un peu honnêtes, <em>git</em> comporte 21 sous-commandes dont les options peuvent modifier le comportement de façon drastique.<br />
Enfin, il y a une mention spéciale pour les pages de manuel pour leur clarté toute relative mais qui heureusement sont truffées d'exemples.<br />
<br />
Bon, quelques recommandations :</p>
<ul>
<li>lisez le <a href="http://alx.github.com/gitbook/" hreflang="fr">git book</a></li>
<li>faites des choses simples</li>
<li>utilisez l'outil pour ce qu'il est, une gestion de versions et donc un outil d'aide au développeur pas une fin en soi</li>
</ul>
<p><br />
Voilà, c'est fini, j'en suis crevé tiens !!</p>
<div class="footnotes"><h4>Notes</h4>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2012/11/26/A-l-abri-dans-ma-Git-oune#rev-pnote-628-1" id="pnote-628-1">1</a>] Comme dans <a href="http://fr.wikipedia.org/wiki/Les_Babas_Cool" hreflang="fr" title="les babas-cool">les babas-cool</a></p>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2012/11/26/A-l-abri-dans-ma-Git-oune#rev-pnote-628-2" id="pnote-628-2">2</a>] Vous remarquerez que pour éviter de rameuter un troupeau de <em>zealot</em>, je ne donne pas son nom <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /></p>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2012/11/26/A-l-abri-dans-ma-Git-oune#rev-pnote-628-3" id="pnote-628-3">3</a>] A vérifier quand même tellement la doc est obscure sur ce point</p>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2012/11/26/A-l-abri-dans-ma-Git-oune#rev-pnote-628-4" id="pnote-628-4">4</a>] Vous remarquerez qu'on se rapproche de plus en plus du sketch de la chauve-souris de Bigard avec son <q>Bon bah, admettons !!</q></p>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2012/11/26/A-l-abri-dans-ma-Git-oune#rev-pnote-628-5" id="pnote-628-5">5</a>] Ou K2R qui est bien connu pour être un grand <q>destasheur</q></p>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2012/11/26/A-l-abri-dans-ma-Git-oune#rev-pnote-628-6" id="pnote-628-6">6</a>] Si Linus était <em>fair-play</em>, ça se saurait !</p>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2012/11/26/A-l-abri-dans-ma-Git-oune#rev-pnote-628-7" id="pnote-628-7">7</a>] qui n'a rien à voir avec le <em>stash</em></p>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2012/11/26/A-l-abri-dans-ma-Git-oune#rev-pnote-628-8" id="pnote-628-8">8</a>] contre plus d'une centaines dans les premières versions !!</p></div>
http://frederic.praca.free.fr/index.php?post/2012/11/26/A-l-abri-dans-ma-Git-oune#comment-formhttp://frederic.praca.free.fr/index.php?feed/atom/comments/628Perversions et paires de versionsurn:md5:75fbc26df44551d2247eb4cefcdded772012-10-26T10:43:00+02:002012-10-26T09:48:40+02:00FredDéveloppementGitMercurialMonotoneSubversion<p>Là, ça part fort et vous vous demandez certainement de quoi je vais encore vous entretenir.<br />
C'est simple, juste deux trois trucs que je lis ça et là sur la gestion de versions et qui me foutent des boutons.<br /></p> <p>Du <em>bof</em> au pire :<br /></p>
<ol>
<li>Y a des hébergements gratos,</li>
<li>On peut <em>commiter</em> quand on veut y compris des trucs qui marchent pas encore sans embêter ses copains,</li>
<li>C'est bien, on peut changer l'ordre des <em>commits</em> et pleins d'autres trucs trop cools,</li>
<li>On peut effacer des révisions <sup>[<a href="http://frederic.praca.free.fr/index.php?post/2012/10/26/Perversions-et-paires-de-versions#pnote-621-1" id="rev-pnote-621-1">1</a>]</sup></li>
</ol>
<p><br />
Avant de tailler tout ça en pièces, il faut que je vous dise que finalement, j'aime bien les gestions de versions distribuées. Voilà, c'est dit !<br />
Alors GO !<br />
Pour le premier point, là, c'est super facile de montrer à quel point ça ne devrait pas avoir le poids que cela a aujourd'hui avec notamment <em><a href="https://github.com/" hreflang="en" title="GitHub">GitHub</a></em> et <em><a href="https://bitbucket.org/" hreflang="en" title="Bitbucket">Bitbucket</a></em>.<br />
Tout ce que l'on a dit à propos des gestions centralisées était justement qu'elles étaient centralisées, qu'elles constituaient <a href="http://fr.wikipedia.org/wiki/Point_individuel_de_d%C3%A9faillance" hreflang="fr">un point individuel de défaillance</a> et empêchaient l'utilisation hors réseau. Cela donne donc une définition des avantages et inconvénients de la décentralisée sur <a href="http://fr.wikipedia.org/wiki/Gestion_de_version_d%C3%A9centralis%C3%A9e#Gestion_de_versions_d.C3.A9centralis.C3.A9e" hreflang="fr">Wikipedia</a>.<br />
Là, ça devient déjà presque évident. Avec les deux sites sus-nommés, on re-centralise et ne pas avoir de compte sur l'un ou l'autre est quasiment équivalent à ne pas être sur Facebook, une sorte de paria du développement.<br />
Alors oui, tout le monde a bien une version décentralisée de son dépôt mais quand il faut faire des <em>push/pull/clone</em>, on passe par l'hébergeur alors que logiquement, seuls une page web aurait dû suffire. D'ailleurs, ça a même l'air de dispenser totalement de page Web décrivant le logiciel, c'est le grand retour du <em>README</em> que plus personne ne lisait :D<br />
<br />
A partir du deuxième point, on rentre dans les problèmes non-techniques car ils touchent à l'utilisation qui est faite des gestions de versions.<br />
Le point 2 est une fonctionnalité intéressante car elle permet effectivement de travailler sans gêner les autres mais elle a un double tranchant pas triste. Les défenseurs de cette fonctionnalité finissent par utiliser la gestion de versions comme une sauvegarde de leur travail<sup>[<a href="http://frederic.praca.free.fr/index.php?post/2012/10/26/Perversions-et-paires-de-versions#pnote-621-2" id="rev-pnote-621-2">2</a>]</sup> quelqu'en soit l'état et sous prétexte que ce qu'ils font dans leur coin ne se voit pas.<br />
Je dis NON !!! Quand on a peur de paumer son travail, on utilise une clé USB, un disque externe pas un logiciel dont le but est de maintenir un historique des développements et pas de tracer les errements informatique du développeur. Par analogie, qui garde les brouillons de ses conceptions ?<sup>[<a href="http://frederic.praca.free.fr/index.php?post/2012/10/26/Perversions-et-paires-de-versions#pnote-621-3" id="rev-pnote-621-3">3</a>]</sup><br />
<br />
Le point 3 et 4 sont tout simplement une hérésie. Dans le but de faire beau et vu qu'on a déjà usé et abusé du point 2, forcément, on est dans l'obligation de nettoyer derrière soi. Ben oui, ça risquerai de se voir que l'on est passé par une étape stupide.<br />
Là encore, c'est n'importe quoi, un <em>repository</em> est un référentiel ou un dépôt, c'est selon. Ce n'est en aucun cas un dépotoir. Il faut assumer ses conneries car elles font partie de l'histoire du code et révèlent, des fois, quelles étaient les intentions initiales, l'ordre de sa pensée.<br />
<br />
Micro$oft a sa propre gestion de versions centralisée qui répond au doux nom de <em>Visual Source Safe</em> et ce que je trouve rigolo, c'est que <em>Safe</em> dans ce cas est un coffre-fort et que certaines fonctionnalités fournies par les <q>nouveaux</q> outils sont détournées pour transformer le coffre-fort en vulgaire placard à cadavres qu'on nettoie de temps en temps.<br />
<br />
Voilà, j'étais énervé, y a forcément des trucs pas objectifs voire erronés mais dans ce cas, y a les commentaires pour me le dire... Sans faire de tentative d'évangélisation parce que ça m'énerve encore plus <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /></p>
<div class="footnotes"><h4>Notes</h4>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2012/10/26/Perversions-et-paires-de-versions#rev-pnote-621-1" id="pnote-621-1">1</a>] Là, ça touche du monde, ClearCase (c'est facile en plus), Git (facile avec <em>rebase</em>), Monotone (a l'air d'être faisable mais dur), Mercurial (pareil que Monotone)</p>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2012/10/26/Perversions-et-paires-de-versions#rev-pnote-621-2" id="pnote-621-2">2</a>] J'ai d'ailleurs des problèmes similaires, mais dans une moindre mesure, au boulot avec <em>Subversion</em></p>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2012/10/26/Perversions-et-paires-de-versions#rev-pnote-621-3" id="pnote-621-3">3</a>] C'est peut-être d'ailleurs là que ça blesse :D</p></div>
http://frederic.praca.free.fr/index.php?post/2012/10/26/Perversions-et-paires-de-versions#comment-formhttp://frederic.praca.free.fr/index.php?feed/atom/comments/621Fan boysurn:md5:9307f1e49f512f93c8742f67a12f291f2012-02-07T11:49:00+01:002012-02-07T11:54:02+01:00FredHumeurGitMonotone<p>J'aime pas les gens qui vous disent quoi faire et que ce que vous faîtes est idiot quand rien ne le prouve si ce n'est un effet de mode.<br />
Je suis contre la mode, il suffit de regarder comment je me fringue pour le comprendre :D<br />
Mais j'aime surtout qu'on respecte mes choix même les plus arbitraires.<br />
<br />
L'informatique est un monde particulier<sup>[<a href="http://frederic.praca.free.fr/index.php?post/2012/02/07/Fan-boys#pnote-611-1" id="rev-pnote-611-1">1</a>]</sup>, pleins de gens bizarres et dont les plus assidus dans leur passion sont souvent les moins sociables... La preuve est dans ce qui suit.</p>
<div class="footnotes"><h4>Notes</h4>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2012/02/07/Fan-boys#rev-pnote-611-1" id="pnote-611-1">1</a>] Ou pas</p></div>
<p>En cherchant comment se faisait la distribution de patch pour le noyau Linux sur <a href="http://www.google.fr/search?hl=fr&safe=off&biw=1680&bih=914&q=git%20propose%20patch" hreflang="fr">Google</a>, je suis tombé sur deux pages intéressantes.<br />
<a href="http://fr.whygitisbetterthanx.com/" hreflang="fr">La première</a> est de loin la plus constructive et mérite largement que je la note ici.<br />
Si à la base, l'introduction m'a un peu interpelé, parlant de <em>fan boys</em> et de <em>je-sais-tout</em> en tous genres, la suite fait appel de bons arguments et une bonne description des fonctionnalités de <a href="http://git-scm.com/" hreflang="en">''Git''</a>.<br />
<br />
Voyant la fonctionnalité <a href="http://schacon.github.com/git/user-manual.html#pack-files" hreflang="en">''repack''</a> de <em>Git</em><sup>[<a href="http://frederic.praca.free.fr/index.php?post/2012/02/07/Fan-boys#pnote-611-1" id="rev-pnote-611-1">1</a>]</sup>, j'ai fait la même recherche pour <a href="http://www.google.fr/search?hl=fr&safe=off&biw=1680&bih=914&q=monotone%20repack" hreflang="en">''Monotone''</a>.<br />
Je décide de passer outre <a href="http://kerneltrap.org/mailarchive/git/2008/7/31/2769964" hreflang="en">le lien ''Git vs Monotone''</a> sur la liste de diffusion de Git sentant le contenu trollifère<sup>[<a href="http://frederic.praca.free.fr/index.php?post/2012/02/07/Fan-boys#pnote-611-2" id="rev-pnote-611-2">2</a>]</sup> pour me concentrer sur une page où le titre m'accroche : <a href="http://felipec.wordpress.com/2011/05/01/pidgin-picking-the-wrong-dvcs-again-mercurial/" hreflang="en">''Pidgin picking the wrong DVCS again; Mercurial''</a>.<br />
Et oui, j'ai été accroché par le titre parce que <a href="http://pidgin.im" hreflang="en">''Pidgin''</a> est normalement géré sous <em>Monotone</em>.<br />
Et là, c'est du lourd !!!<br />
L'auteur du billet est un de ses <em>fan boys</em> comme je ne peux pas les sentir. En effet, il s'est spécialisé dans les articles <em>bidule contre Git : la fonctionnalité Git qui tue tout</em> et dans le pourrissage de projets open source n'utilisant pas la rolls des gestionnaires de versions.<br />
Comble du fanboyisme, LA référence à Linus Torvalds est faite avec <a href="http://article.gmane.org/gmane.comp.version-control.git/90971" hreflang="en">le lien qui va bien</a>, Linus Torvalds qui est à l'ouverture d'esprit, à la diplomatie et à la critique aussi fort que peut l'être un <a href="http://fr.wikipedia.org/wiki/Casse-toi,_pauv%27_con_!" hreflang="fr">Nicolas Sarkozy au Salon de l'Agriculture</a>.<br />
<br />
Alors vous vous dites forcément que je suis aussi un <em>fanboy</em>... Et bien détrompez-vous, bien au contraire, j'aurais plutôt tendance à utiliser les outils que personne n'utilise ou qui ne sont pas soutenus par la star du moment.<br />
En fait, ce que je ne supporte pas, c'est que l'on veuille forcer l'uniformisation en tout et ne pas laisser leur chance à d'autres projets Open Source... D'ailleurs, il est assez rigolo de voir que Linus Torvalds lui-même, au moment d'arrêter d'utiliser <em>BitKeeper</em> pour le noyau Linux, a considéré que <a href="http://en.wikipedia.org/wiki/Monotone_%28software%29#Monotone_as_Git_inspiration" hreflang="en">seul ''Monotone'' était la seule alternative viable</a> :D<br />
Mais bon, qui se souvient de ses cours d'histoire ? Ben, pour Linus, c'est pareil, l'histoire, ça ne l'a jamais intéressé plus que ça... Surtout quand il en est acteur <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /></p>
<div class="footnotes"><h4>Notes</h4>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2012/02/07/Fan-boys#rev-pnote-611-1" id="pnote-611-1">1</a>] D'ailleurs, ça ne choque personne de devoir régulièrement, compresser à la main son référentiel de sources et ça, je dois bien dire que ça m'épate !!</p>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2012/02/07/Fan-boys#rev-pnote-611-2" id="pnote-611-2">2</a>] et forcément trollifique</p></div>
http://frederic.praca.free.fr/index.php?post/2012/02/07/Fan-boys#comment-formhttp://frederic.praca.free.fr/index.php?feed/atom/comments/611En attendant mieuxurn:md5:fc9a981293cb5a567ec7c3ed731919a72012-02-03T16:59:00+01:002012-02-03T17:36:26+01:00FredDéveloppementBuildbotMonotoneTrac<p>Pour tout ceux qui auraient oublié, je suis en train de m'amuser avec <a href="http://www.monotone.ca/" hreflang="en" title="Monotone">Monotone</a> comme je l'ai expliqué dans <a href="http://frederic.praca.free.fr/index.php?post/2011/10/29/La-vie-n-est-pas-si-monotone" hreflang="en" title="Monotone">un billet précédent</a>.<br />
Toujours pour ceux qui auraient oublié, je me suis aussi <q>amusé</q><sup>[<a href="http://frederic.praca.free.fr/index.php?post/2012/02/03/En-attendant-mieux#pnote-610-1" id="rev-pnote-610-1">1</a>]</sup> avec quelques outils d'intégration continue et de gestion de tickets... C'est <a href="http://frederic.praca.free.fr/index.php?post/2009/09/09/Attention%2C-codeur%2C-je-t-ai-%C3%A0-l-oeil-%21" hreflang="en" title="Monotone">là</a> depuis longtemps.<br />
<br />
Vous ne me voyez pas venir ?<br />
Après <a href="http://olivier.ramonat.free.fr/svn_trac_buildbot/svn_trac_buildbot_fr.html" hreflang="fr" title="Développer avec Subversion, Trac et Buildbot">l'excellent document</a> qui traitait de <a href="http://trac.edgewall.org/" hreflang="en" title="Trac">Trac</a>, <a href="http://subversion.apache.org/" hreflang="en" title="Subversion">Subversion</a> et <a href="http://buildbot.net" hreflang="en" title="Buildbot">Buildbot</a>, j'ai décidé de m'attaquer à la même chose avec <em>Monotone</em>.<br />
<br />
Attention, c'est long et douloureux <img src="/themes/default/smilies/wink.png" alt=";)" class="smiley" /></p>
<div class="footnotes"><h4>Notes</h4>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2012/02/03/En-attendant-mieux#rev-pnote-610-1" id="pnote-610-1">1</a>] Oui oui, au boulot aussi, j'arrive à m'amuser :D</p></div>
<p>Commençons par le commencement, à savoir ce que j'ai choisi.<br /></p>
<h4><em>Monotone</em> et <em>Buildbot</em>!!</h4>
<p>D'abord, il vous faut un serveur <em>Monotone</em> qui attende qu'on lui cause. Pour mettre cela en place, un petit tour <a href="https://code.monotone.ca/p/monotone/source/tree/h:net.venge.monotone/examples/server-setup/README" hreflang="en" title="Server steup">là</a> s'impose.<sup>[<a href="http://frederic.praca.free.fr/index.php?post/2012/02/03/En-attendant-mieux#pnote-610-1" id="rev-pnote-610-1">1</a>]</sup><br />
Après, ce serait bien de voir ce que l'on peut faire pour intégrer <em>Monotone</em> dans <em>Buildbot</em>... Et bien, c'est là que ça se gâte.<br />
<br />
En effet, le support pour <em>Monotone</em> avait été retiré de <em>Buildbot</em> lors du passage à la <a href="http://trac.buildbot.net/ticket/869" hreflang="en" title="remove Arch, Bazaar, and Monotone in 0.8.2">version 0.8.2</a> pour finalement ré-apparaître dans la <a href="http://trac.buildbot.net/wiki/Buildbot084" hreflang="en">0.8.4</a>.<br />
A ce moment-là, vous vous dîtes que c'est gagné !!<br />
<br />
Ben non, c'est pas gagné car l'architecture au moment de la version 0.8.5 a changé pour la partie maître<sup>[<a href="http://frederic.praca.free.fr/index.php?post/2012/02/03/En-attendant-mieux#pnote-610-2" id="rev-pnote-610-2">2</a>]</sup> et dans la bataille, la partie <em>master</em> de <em>Monotone</em> a giclé.<br />
Comme je suis un barbare, je me suis mis à lire le source de la version <a href="https://github.com/buildbot/buildbot/blob/buildbot-0.8.4/master/buildbot/steps/source.py" hreflang="en" title="Source">0.8.4</a> et ai fini par créer la classe <em>Monotone</em> qui hérite de <em>Source</em> dans le répertoire <em>buildbot/steps/source/</em> de la version 0.8.5.<br />
Trop facile le <a href="http://python.org/" hreflang="en" title="Python">Python</a> !! A part, quelques imports qui manquaient, j'ai réussi à obtenir ça</p>
<pre>
# This file is part of Buildbot. Buildbot is free software: you can
# redistribute it and/or modify it under the terms of the GNU General Public
# License as published by the Free Software Foundation, version 2.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc., 51
# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Copyright Buildbot Team Members
## Source step code for monotone
from twisted.python import log
from twisted.internet import defer
from buildbot.process import buildstep
from buildbot.steps.source import Source
from buildbot.interfaces import BuildSlaveTooOldError
class Monotone(Source):
"""Check out a source tree from a monotone repository 'repourl'."""
name = "mtn"
renderables = [ 'repourl' ]
def __init__(self, repourl=None, branch=None, progress=False, **kwargs):
"""
@type repourl: string
@param repourl: the URI which points at the monotone repository.
@type branch: string
@param branch: The branch or tag to check out by default. If
a build specifies a different branch, it will
be used instead of this.
@type progress: boolean
@param progress: Pass the --ticker=dot option when pulling. This
can solve long fetches getting killed due to
lack of output.
"""
Source.__init__(self, **kwargs)
self.repourl = _ComputeRepositoryURL(repourl)
if (not repourl):
raise ValueError("you must provide a repository uri in 'repourl'")
if (not branch):
raise ValueError("you must provide a default branch in 'branch'")
self.addFactoryArguments(repourl=repourl,
branch=branch,
progress=progress,
)
self.args.update({'branch': branch,
'progress': progress,
})
def startVC(self, branch, revision, patch):
slavever = self.slaveVersion("mtn")
if not slavever:
raise BuildSlaveTooOldError("slave is too old, does not know "
"about mtn")
self.args['repourl'] = self.repourl
if branch:
self.args['branch'] = branch
self.args['revision'] = revision
self.args['patch'] = patch
cmd = LoggedRemoteCommand("mtn", self.args)
self.startCommand(cmd)
def computeSourceRevision(self, changes):
if not changes:
return None
# without knowing the revision ancestry graph, we can't sort the
# changes at all. So for now, assume they were given to us in sorted
# order, and just pay attention to the last one. See ticket #103 for
# more details.
if len(changes) > 1:
log.msg("Monotone.computeSourceRevision: warning: "
"there are %d changes here, assuming the last one is "
"the most recent" % len(changes))
return changes[-1].revision
</pre>
<p><br />
Après recompilation et installation, il est enfin possible d'écrire une étape de récupération des sources dans le <em>buildmaster</em>. Auparavant, la classe <em>Monotone</em> n'existant plus nulle part, il était impossible d'écrire ce qui suit dans la configuration :</p>
<pre>
factory.addStep(source.Monotone(repourl="localhost", branch="net.dnsaliass.coruscant.scales"))
</pre>
<p><br />
Sauf que c'était bourrin et que ça marchait pas vraiment :D<br />
<br />
Après un tour sur <a href="http://freenode.net/irc_servers.shtml" hreflang="en">le serveur IRC Freenode</a> dans le canal #buildbot, j'ai eu ma réponse... Tout se trouve dans <em>oldsource</em> et devrait marcher comme ça</p>
<pre>
from buildbot.steps.source import oldsource
from buildbot.steps import shell
factory.addStep(oldsource.Monotone(repourl="localhost", branch="net.dnsaliass.coruscant.scales"))
factory.addStep(shell.Compile(command=["make"]))
</pre>
<p><br />
Au final, ça fonctionne mais bon, ce n'est plus la façon de faire et ça sent le truc qui va partir à la poubelle à la prochaine révision <img src="/themes/default/smilies/wink.png" alt=";)" class="smiley" /><br />
<br /></p>
<h4><em>Trac</em> et <em>Buildbot</em>!!</h4>
<p><q>intégrer Buildbot dans Trac</q>, c'est trop facile, c'est expliqué <a href="http://trac.buildbot.net/wiki/BuildbotAndTrac" hreflang="en">là</a>.<br />
<br /></p>
<h4><em>Trac</em> et <em>Monotone</em>!!</h4>
<p>Et voilà, là, c'est l'horreur, plus rien ne marche !!<br />
En effet, j'étais passé voir sur la page du projet <a href="http://tracmtn.1erlei.de/" hreflang="en">TracMtn</a> mais tout est cassé. Le code n'est plus sur le serveur Monotone indiqué et l'installation Trac ne fonctionne plus.<br />
En fait, cela ne semble plus maintenu du tout. du coup, je suis en attente d'une réponse du développeur principal.%%
<br />
La solution qui est celle adoptée par <a href="http://developer.pidgin.im/" hreflang="en">Pidgin</a> est l'utilisation de <a href="http://viewmtn.1erlei.de/" hreflang="en">viewMtn</a>... Sauf qu'il s'agit du même développeur et que la seule version qui semble exister est la <em>v0.1.0</em>.<br />
Heureusement, elle a l'air de marcher <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /><br />
<br />
C'est pas gagné tout ça !</p>
<div class="footnotes"><h4>Notes</h4>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2012/02/03/En-attendant-mieux#rev-pnote-610-1" id="pnote-610-1">1</a>] Je reviendrai dans un autre billet sur la configuration approfondie d'un tel serveur centralisé</p>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2012/02/03/En-attendant-mieux#rev-pnote-610-2" id="pnote-610-2">2</a>] <em>master</em> dans le texte</p></div>
http://frederic.praca.free.fr/index.php?post/2012/02/03/En-attendant-mieux#comment-formhttp://frederic.praca.free.fr/index.php?feed/atom/comments/610La vie n'est pas si monotoneurn:md5:5cac0c5803d91a31c4ee447b926e9f572011-10-29T22:55:00+02:002011-10-29T21:56:48+02:00FredDéveloppementMonotone<p>Dans le précédent billet, j'ai beaucoup parlé des systèmes de gestion de versions distribués sans parler d'un en particulier. Il est temps de remédier à la situation et surtout de stopper le suspens intense qui doit vous ronger chers lecteurs <img src="/themes/default/smilies/wink.png" alt=";)" class="smiley" /></p> <p>Et oui, pour faire des tests, il a bien fallu que je jette mon dévolu sur un système en particulier.<br />
Avant de justifier mon choix, je vous présente devant vos yeux ébahis... <em><a href="http://www.monotone.ca/" hreflang="en">Monotone</a></em><sup>[<a href="http://frederic.praca.free.fr/index.php?post/2011/10/29/La-vie-n-est-pas-si-monotone#pnote-606-1" id="rev-pnote-606-1">1</a>]</sup> !!!<br />
<br /></p>
<h4>Mais pourquoi donc ??</h4>
<p>Là, tout de suite, vous vous demandez certainement</p>
<blockquote><p>Pourquoi Monotone ??? Pourquoi pas les ténors <em><a href="http://git-scm.com/" hreflang="en">Git</a></em> ou <em><a href="http://mercurial.selenic.com/" hreflang="en">Mercurial</a></em> ?</p></blockquote>
<p><br />
Effectivement, la question est bonne et je vais y répondre.<br />
Prenons le premier, <em>Git</em>.<br />
Ce que je reproche à <em>Git</em>, c'est juste l'effet de mode, le culte de la personnalité. Il s'agit clairement d'un <q>hack</q> fait d'un patchwork d'outils classiques pour faire de la gestion de versions décentralisée.<br />
Si l'on regarde <a href="http://en.wikipedia.org/wiki/Comparison_of_revision_control_software#Technical_information" hreflang="en">cette page sur Wikipedia</a>, on voit que <em>git</em> est fait de scripts shell, de Perl et d'un peu de C. Perso, bof bof, pas très sûr tout ça.<br />
Mais ce qui me fait surtout refuser <em>Git</em>, c'est le pourquoi de sa popularité. En effet, regardez <a href="http://en.wikipedia.org/wiki/Git_%28software%29" hreflang="en">ici</a> et vous verrez que l'auteur initial de ce système n'est autre que Linus Torvalds.<br />
Je sais, c'est maigre mais c'est comme ça. Moi aussi, je fais des choix à la Linus :D<br />
<br />
Au deuxième maintenant. Ca va être plus rapide normalement.<br />
Si on regarde encore <a href="http://en.wikipedia.org/wiki/Comparison_of_revision_control_software#Technical_information" hreflang="en">là</a>, c'est du <a href="http://fr.wikipedia.org/wiki/Python_%28langage%29" hreflang="fr">Python</a> et du C.<br />
Là, c'est trop pour moi, un langage de script pour rendre un service aussi important que la gestion de versions, désolé, je ne peux pas.<br />
<br />
Il y en avait d'autres mais à l'issu d'un <a href="http://www.ada-france.org/?p=261" hreflang="fr">post</a> sur Ada-France<sup>[<a href="http://frederic.praca.free.fr/index.php?post/2011/10/29/La-vie-n-est-pas-si-monotone#pnote-606-2" id="rev-pnote-606-2">2</a>]</sup>, j'ai trouvé l'argumentaire nécessaire et la conviction que c'était un système à tester.<br />
Ok, là aussi, c'est mince mais un système entièrement compilé dans un langage au typage fort qui fait une utilisation poussée de la cryptographie, ça m'interpelle un peu plus qu'un truc codé sur un coin de table.<br />
<br /></p>
<h4>La suite!!</h4>
<p>J'ai donc fait quelques premiers tests et ils sont bel et bien concluants. De plus, la lecture des documents liés à l'utilisation de Monotone tels que <a href="http://www.monotone.ca/docs/index.html" hreflang="en">le tutorial</a> et <a href="http://wiki.monotone.ca/index.user/" hreflang="en">les pages du wiki</a> fournissent plein d'informations toutes plus alléchantes les unes que les autres.<br />
Je cite rapidement avant de conclure :<br /></p>
<ul>
<li>L'utilisation des certificats pour ajouter tout type de propriétés,</li>
<li>La possibilité de signer une révision issu d'un autre auteur pour l'approuver.</li>
</ul>
<p><br />
A partir de maintenant, aux côtés des trucs et astuces pour Subversion, vous en trouverez pour <em>Monotone</em> au fur et à mesure de mes expériences.</p>
<div class="footnotes"><h4>Notes</h4>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2011/10/29/La-vie-n-est-pas-si-monotone#rev-pnote-606-1" id="pnote-606-1">1</a>] Pour ceux qui n'auraient pas compris rien qu'en voyant le titre <img src="/themes/default/smilies/wink.png" alt=";)" class="smiley" /></p>
<p>[<a href="http://frederic.praca.free.fr/index.php?post/2011/10/29/La-vie-n-est-pas-si-monotone#rev-pnote-606-2" id="pnote-606-2">2</a>] Assez ancien, il est vrai, je suis lent à la détente <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /></p></div>
http://frederic.praca.free.fr/index.php?post/2011/10/29/La-vie-n-est-pas-si-monotone#comment-formhttp://frederic.praca.free.fr/index.php?feed/atom/comments/606