07.01.08

Récupérer un repo Git accidenté ( fatal: Not a git repository )

Posted in Programmation at 0:10 par denis

Allez savoir pourquoi ca arrive toujours au plus mauvais moment… Allez d’ailleurs savoir pourquoi, mais Git a décidé ce soir de me faire une petite crasse… En plein boulot, voila-t-il pas que la sale bête se met à me traiter de “Pas un git repositoire”, alors que j’essayais gentiment de faire mon commit du soir ( très important pour un bon sommeil, notez bien ).

Au premier coup d’oeil pourtant, tout va bien: le répetoire .git est bien là. Mais git-fsck n’est pas d’accord. Et il le fait savoir, comme son ami commit 30 secondes plus tôt:

fatal: Not a git repository

Voila qui est bien facheux… D’ailleurs un petit coup de strace sur la commande a tôt fait de révéler l’infamie responsable de tout ca: on a amputé mon gentil répo de ses fichiers .git/HEAD et carrément de tout le contenu de .git/refs ! Allez savoir quel terroriste est reponsable de ca, serait-ce l’infame XFS ? Un bug dans Git ?

Peu importe, le mal est fait, maintenant, faut récupérer. Alors voyons ce qu’il nous reste. Pas grand chose en fait: en gros, il reste surtout .git/log, .git/objects et .git/packed-refs. Premier “ouf” sonore: mes objets sont encore la, reste à récupérer les références, et pour ca, j’ai encore du bol: il me reste le log.

Primo, voyons le fichier .git/log/HEAD. Il contient en fait tout l’historique du pointeur HEAD pour cette copie de travail. La dernière ligne contient une référence au HEAD d’avant le crash. Dans mon cas, elle ressemble à ça:
edc483686bfcf0d889233eb03128424daa46f351 0cb4c60700197427926856a71a389bf6cba0221e Denis Wernert <deniswernert@nymphadora> 1214865337 +0200    checkout: moving from master to wip
Notez la seconde somme SHA1 de la ligne, 0cb4c60700197427926856a71a389bf6cba0221e, c’est elle, la référence qu’on cherche. On va la coller dans le fichier .git/HEAD, ce sera déjà ça.

C’est déjà pas mal, mais ca ne suffit pas, il faut encore re-créer .git/refs. Notez que .git/log contient un répertoire refs, contenant lui-même un répertoire heads. Pour chaque fichier contenu dans .git/log/refs/heads, on va créer un fichier dans .git/refs/heads du même nom, et pour chacun, on procedera comme pour le fichier HEAD ci dessus, c’est à dire qu’on va recopier la seconde somme SHA1 de la dernière ligne, pour la placer dans le fichier de destination.

Et la, ca va mieux.

Les branches sont de retour, et git-status veut bien me parler à nouveau. Notez que pour l’instant, ma référence à HEAD est absolue, et de fait, git ne reconnait pas ma branche courante. Une fois certain d’avoir tout retrouvé et après avoir sauvé mes modifs locales dans un patch, je peux écrire

ref: refs/heads/wip

dans mon HEAD, ou bien tout simplement faire un

git checkout wip

pour remettre le pointeur sur la branche.
Et voila, le répo est revenu et enfin dans de bonnes dispositions. Dans ce cas ci, on pourra bien dire que la “hackabilité” de Git m’a été bien utile…

06.10.08

Tout sauf javascript ?

Posted in Langages, Programmation, Web at 23:31 par denis

Dans la série à n’en plus finir des “langages qui permettent de faire du Javascript sans se prendre la tête à faire du Javascript parce que le Javascript c’est vraiment trop dégueu ( et c’est vrai )”, voici un autre concurrent, à l’approche un peu plus originale, puisqu’il vous propose d’écrire du Javascript en… Javascript.

Enfin pas tout à fait, puisque Mascara propose de faire un petit bond en avant, et d’écrire dès aujourd’hui en Ecmascript 4, la prochaine norme Ecmascript qui devrait en réconcilier plus d’un avec le vilain petit canard des langages. Et c’est mieux, pour preuve, il vous sera possible d’écrire ceci:

[-]View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Tiens, une variable typee ??
var i : int = 1 ;
 
// Généricité
var messages = Vector. ;
messages[1] = "hello" ;
messages[2] = "world" ;
 
// Héritage
class Foo {
  var message : String  ;
  function Foo( msg : String ) {
    this.message = msg ;
  }
 
  function talk() {
    alert( this.message ) ;
  }
}
 
class HelloWorld extends Foo {
  function HelloWorld: Foo( "Hello, World" ) {}
}

Voila qui donne déjà bien plus envie de faire du JS… L’auteur indique cependant que le support n’est pas encore complet. Ca va quand même nous aider à attendre Tamarin :)

09.24.07

Lisaac

Posted in Langages, Programmation at 22:00 par denis

LinuxFr attire une nouvelle fois notre attention sur le langage Lisaac, développé pas loin de chez nous du tout…
Je n’ai pas vraiment eu le temps de me plonger dedans, mais vu la participation du fondateur de SmartEiffel, ca ne peut pas être mauvais…
A voir…

05.22.07

Long time no see

Posted in Divers at 23:02 par denis

Un gros passage à blanc… Ca fait bien 2 mois que ce site n’a pas pris une ligne.
Principal fautif ? Le boulot ! Trop, et trop prenant.
La boîte qui m’embauche ( Sprice.com ), mise de plus en plus sur Ruby On Rails, une décision vraiment plaisante pour moi qui suis tombé dans Rails il y a un peu plus d’un an.
La contrepartie, c’est que mes projets persos n’avancent pas trop.
Cobalt n’a pas pris de mise à jour, et je n’avance pas bien vite sur les quelques projets, principalement en Objective-C en cours.

Côté Wii, je ne saurais que trop vous recommander Dragon Ball, récente aquisition, un jeu vraiment génial qui vous change des jeux de bastons biens bourrins ou on gagne sa partie a grands coups de button-mashing. Non, la il vous faudra bouger joyeusement dans tous les sens, vous essoufler, donner de votre personne et avoir l’air très ridicule dans votre salon ( ”Meuh chéri, kestufé ? Ben je joue, ca se voit pas ?” ) àmimer des kamehas pour espérer vaincre. Eledees est en commande, bientôt des nouvelles sur ce beau joujou.

Niveau Nintendo DS, un peu déçu par la courte durée de vie de New Super Mario, bluffé par Meteos, très agréablement surpris pas Picross, heureux de pouvoir jouer a Final Fantasy partout avec FF3, scié par un jeu de stratégie de poche très complet avec Advance Wars et parfois un peu frustré par la difficulté de Trauma Center ;)

On va essayer d’être a nouveau un peu plus présent dans les semaines à venir :)

PS: Merci a Yann Klis pour m’avoir fait jeter un oeil a jQuery, la lib javascript qui t’aide a faire faire des libs propres à tes collègues ;)

03.11.07

Kobalt: Librairie Javascript orientée programmation par contrat

Posted in Kobalt, Programmation at 18:07 par denis

J’ai toujours été fan de Prototype, une libraries bien écrite, concise, efficace. J’ai également jeté un oeil à jQuery et Mootools, ainsi qu’a presque toutes les librairies Javascript qui trainent sur le net. Il y a de très bonnes idées, mais un paradigme m’a toujours manqué: celui de la programmation par contrat.

Pourtant, je n’ai que trop souvent vu du code Javascript planter pour cause justement de non-vérification d’un contrat. Des erreurs qui auraient pu être évitées, au prix d’une petite conditionnelle en début ou en fin d’action.

Bien évidemment, borner son code d’expressions conditionnelles est toujours pénible, couteux en temps et en effort.Cobalt

Kobalt a été créé dans le but de fournir un environnement simple et efficace pour l’application de la programmation par contrat en JavaScript. La libraries fournit des méthodes toutes prêtes pour vérifier des contrats sur les types, les propriétés et les méthodes, des itérateurs limités par des gardes, des fonctions cadres, ainsi que quelques fonctions de convenance.

Pour l’instant, il n’y a aucun support ni pour les fonctionnalités Ajax ni pour des fonctionnalités visuelles, cela est cependant prévu pour les prochaines versions.

La librairie est relativement légère: 9Ko en version non-compressée, préambule de la licence CeCILL compris, et à peine 5,5Ko une fois compressée par les bons soins de jsjuicer.

La version actuelle ne doit pas être considérée comme finie, c’est plus une preview, une mise en bouche. N’hésitez cependant pas à me faire part de vos commentaires.

Le code est mis à disposition sous license CeCILL.

Téléchargements:

« Previous entries