Dériver d’un projet CVS pour en héberger sa propre version GIT

Chu-Chu Rocket! Voilà un jeu de puzzles qu’il est bien ! Encore faut-il pouvoir encore y jouer. À l’époque, c’était sur Game Boy Advance que ça se passait. Joie dans mon coeur, il en existe un émulateur : Visual Boy Advance, hébergé sur sourceforge.net, plus maintenu depuis 5 ans. Les binaires disponibles sont compatibles 32 bits, les sources eux font des raccourcis sur la taille des pointeurs… De toute évidence, si on veut pouvoir libérer les souris du joug des chats tyrans, il va falloir mettre les mains dans le cambouis. Mais comment reprendre la main sur ce projet ?

Aspirer une sauvegarde du dépôt CVS depuis Sourceforge.net

La FAQ de sourceforge.net est très claire là dessus, il n’y a aucun mystère ; une seule commande suffit :

rsync -av rsync://vba.cvs.sourceforge.net/cvsroot/vba/* .

Et nous voilà avec le beau répertoire VisualBoyAdvance qui contient toute la sauvegarde du projet original, format CVS.

Extraire du dépôt CVS local les informations nécessaires à l’initialisation du dépôt GIT

La documentation de la fondation Apache aide également :

cvs2git --blobfile=cvs2svn-tmp/git-blob.dat --dumpfile=cvs2svn-tmp/git-dump.dat --username=cvs2git VisualBoyAdvance

L’outil cvs2git étant une surcouche d’un autre outil, cvs2svn, je ne suis pas sûr qu’on ait une quelconque liberté pour la valeur à donner aux options blobfile et dumpfile. Dans tous les cas, on s’en moque un peu.

Monter un dépôt GIT de toute pièce

Toujours en lisant l’aide précédente :

git init --bare VisualBoyAdvance.git
cd VisualBoyAdvance.git
cat ../cvs2svn-tmp/git-*.dat | git fast-import

Et voilà ! Reste plus qu’à mettre les mains dans le cambouis, affaire à suivre (peut-être).

Tags: , , ,

Le seul mauvais choix est de ne pas en faire

Ils ont choisi Subversion. Et pourtant, ils connaissaient git. Mais ils ont quand même choisi Subversion. Personnellement, je ne connais pas SVN, mais je pratique git depuis longtemps. Je ne chercherai donc pas à alimenter la guerre stérile qui anime les défenseurs de chaque camp. Ha ! si, quand même, juste une chose : lors d’une coupure de courant, j’ai pu continuer de développer sur mon portable, organiser mes révisions, bref, travailler, quand tous les autres regrettaient que la machine à café ne soit pas sur réseau ondulé en attendant que l’électricité revienne. Les joies du mode déconnecté.

Je commence à bien connaître git ; une seule raison pourrait faire que je ne chercherai pas à l’utiliser d’emblée comme gestionnaire de version sur un projet : le degré d’intégration (de non intégration en fait) à la plateforme de développement. git étant totalement orienté « mode console », ils ont eu raison de choisir SVN pour leur nouveau projet multi-plateforme Windows / MacOS / GNU/Linux.

En ce qui me concerne, git-svn m’a ôté toute velléité d’apprendre à utiliser Subversion, puisque je peux bénéficier localement de toutes les qualités de git en m’interfaçant avec le dépôt central SVN. Par contre, j’ai pu observer leur manière d’utiliser Subversion. Et il en est une qui me choque.

"J'ai comme un goût dans la bouche après ma synchro partielle."

Il y a trop de doigts sur une main pour compter le nombre de participants à mon nouveau projet. Du coup, ambiance plateau de développement, agilité et compagnie. Logique. SVN a cette particularité de permettre de se réaligner partiellement sur la version de référence, ou ce qu’on veut en fait. Difficile d’ailleurs de savoir si c’est une fonctionnalité ou un pis-aller. Personnellement, j’imagine que se réaligner était tellement coûteux (est toujours, en fait), et la gestion des branches suffisamment calamiteuses, pour que les mecs de chez Apache se soient dit : « hé ! mais on devrait avoir le droit de ne récupérer que la nouvelle version des fichiers dont les défauts nous empêchent d’avancer ! » D’où, la synchronisation partielle.

Quand je vois la difficulté de mettre en place, tout comme le gain de temps énorme induit par une gestion correcte des dépendances dans une chaîne de compilation, je suis perplexe face à cette idée de synchronisation partielle. Cela revient quand même à dire que le développeur sait exactement ce dont il a besoin en terme de fichier source (et pas de version) pour corriger un problème auquel il est confronté. Moi, ça me scie. Encore, s’il s’agissait d’introduire localement les modifications issues d’un seul commit plutôt que tout ce qui l’a précédé ou ce qui peut le suivre, je dirais « pourquoi pas » (et c’est d’ailleurs sûrement possible avec SVN), si chaque version est un ensemble homogène et cohérent de modifications ayant trait à un unique sujet, etc. ça peut marcher. Mais non, ils vont piocher un fichier au pif (ou presque) et hop ! ils repartent à 300 km/h sur la piste du développement. Le Ministère de la Justice devrait s’employer à déployer cette technique expéditive, ça a l’air de faire des miracles.

De mon côté, je ne m’étonne plus de constater, lorsque je m’aligne, que le dépôt est vérolé. Ça me semble être la conséquence logique de cette idée de synchronisation partielle : on a (peut-être) testé notre modification dans un espace mal déterminé, on ne va pas recommencer sur l’état à jour. On est agiles ou pas ?

 

Tags: , , ,

Fedora – configurer Emacs pour la coloration syntaxique du OCaml

Chose amusante, je n’ai pas réussi à obtenir la coloration syntaxique du OCaml grâce à l’a-priori bien nommé paquetage « ocaml-emacs ». Peut-être n’est-ce tout simplement pas son rôle.

Par contre, le paquetage « emacs-tuareg » y réussi plus ou moins, avec quelques lacunes, mais c’est déjà mieux que rien. Pour que cela fonctionne, ne pas oublier d’ajouter à son .emacs favori :

;;; OCaml

(setq auto-mode-alist
 (append '(("\\.ml[iyl]?$" .  tuareg-mode ))
 auto-mode-alist))

(autoload 'tuareg-mode "tuareg.elc" "Mode for OCaml programs" t)

 

Tags: , ,

Apprentissage du OCaml

Comment apprendre un langage de programmation d’une manière générale ? Lire la documentation, c’est bien, mais rapidement, le besoin se fait sentir de pratiquer. Et pour ça, il faut avoir des sujets futiles mais variés pour créer des mini-programmes permettant de balayer les différents concepts. Pour apprendre Python, je m’étais inscrit à SPOJ, une sorte de concours de programmation permanent mettant à disposition des milliers de sujets et un robot qui évalue la qualité de votre programme-solution en le soumettant à des entrées qui ne vous sont pas fournies. L’intérêt est double : en plus d’apprendre un langage, cela vous pousse à prendre en compte les cas limites, ce que tout bon programmeur à tendance à oublier de prime abord.

Mais voilà, si le premier sujet s’apparente à un classique « Hello World! », le second nécessite l’implémentation d’un crible d’Ératosthène efficace, ce qui n’est pas franchement trivial. Donc, pour l’apprentissage progressif, on repassera.

J’étais tout à mon « Hello World! » en OCaml quand je me suis dit qu’il devait exister des sites dédiés à l’apprentissage d’OCaml. Et j’ai trouvé ça : « 99 problèmes en OCaml » (en anglais). C’est l’adaptation d’un classique du Lisp, une liste de problèmes à la difficulté croissante permettant de se familiariser avec les paradigmes des langages fonctionnels. De plus, on y trouve la correction de certains problèmes, et d’autres sont encore recensées ici.

Je vous encourage à lire le lien du dernier article sur les exceptions et leur inocuité dans 99% des cas, ça résume tout à fait ce que j’en pense.

Tags:

Quand les dieux veulent nous punir ils exaucent nos prières

Il existe encore des idéalistes dans le développement logiciel. Attention, des vrais hein, pas des jeunes à peine sorti de l’école, tout bouffis de suffisance, persuadés qu’ils sont que le savoir qu’ils ont accumulé fera d’eux des gagnants et des meneurs. Moi je parle de gens qui y croient encore, et ce malgré leurs six mois d’ancienneté dans n’importe quelle SSII.

Récemment, j’ai rencontré un collègue ivre de joie de participer à un paléogiciel maison afin de le conchier définitivement d’y apporter son lot de corrections en tout genre. Premier constat, on est au moins aussi fort que dans de grands groupes mondiaux.

Nul besoin de test quand on a des utilisateurs. – B. Gates, escroc

Prise en main du logiciel, étude du code induit par spaghetto-génèse accélérée, régalade en tout genre, et soudain, LA révélation : « mais ! ça ne peut pas marcher ! » Hélas ! Que de temps perdu !

Il y avait plus simple ! – B. Renard, boulier

Et oui ! Une simple question aux utilisateurs aurait suffit, comme le lui apprendra la suite de l’aventure. À la question « mais ça, vous vous en servez comment ? », la réponse fuse : « Oh, ça ? On ne s’en sert pas, ça ne marche pas. » Autant dire que la fonctionnalité est essentielle. Suffisamment pour lui éviter d’être supprimée en tout cas. La corriger ? Non plus. On n’est pas payé à corriger des défauts qui ne sont pas vus par les clients. De l’intérêt de faire des formulaires de rapport de défauts bien abscons.

Ho ! non, encore un 'extern' devant une fonction dans un .h

Retour dans les profondeurs du code lasagnesque, version supplément béchamel et pâte trop cuite. Face aux interfaces multiples, redondantes et « toutes pourries » (sic), le collègue, enfin, le sous-traitant avec qui mon humanisme m’a forcé à sympathiser pour qu’il ait au moins une lueur de joie dans sans triste journée d’esclave sur-payé, le collègue, donc, a une idée du tonnerre : proposer sa propre interface. Il branchera les anciennes fonctionnalités dessus quand il aura fini, et il pourra faire disparaître le code de la honte.

Mais c’est super ! C’est un peu vite oublier que le code dont il essaie de se débarrasser est lui-même issu d’autres idéalistes intérimaires qui ont dû tout laisser en plan à mi-chemin parce que leur mission prenait fin brutalement, afin qu’ils puissent démontrer toute l’étendue de leur talent sur ce nouveau poste de plieur de trombone à Calais. Je ne vois pas d’autre raison, franchement.