1

Je cherche une implémentation en Java de diff, qui permettrait directement ou non à partir de 2 chaînes ou de stream de fournir le diff textuel de la même façon que l'outil Unix. Je suis tombé sur un portage du diff GNU en GPL, mais je préfèrerais autre chose que de la GPL, pas moyen de trouver...

2

j'avais trouvé ça pendant mon stage, je crois (par contre pour la licence, je ne sais plus)
je vais voir si je le retrouve.
je te dis ça dans l'après midi.

edit : en fait, je te dis ça ce soir embarrassed

3

Pen^2 ? smile

4

oups, désolé pour le lag, il fallait que je branche mon disque dur externe (c'est vrai que c'est très long trioui)

je viens de regarder, je n'ai retrouvé que ça :
http://www.darwinsys.com/freeware/Diff.java
http://www.cs.princeton.edu/introcs/96optimization/Diff.java.html
http://blogs.opensymphony.com/plightbo/2006/04/binary_diff_or_rsync_in_java.html
http://www.incava.org/projects/java/java-diff/index.html
http://bmsi.com/java/#diff

je ne sais pas ce que ça vaut (le dernier c'est sans doute celui que tu avais trouvé)

5

Merci, je regarde tout ça.

6

Finalement j'ai choisi celui d'Incava qui est simple à utiliser, mais qui demander à formatter soit même le résultat du diff.
Par contre je suis suffisamment nul en algo pour par réussir à afficher correctement le contexte d'un diff unifié (équivalent d'un diff -u).

7

J'ai lu ton message hier soir, et je me suis amusé à le coder : à priori, ça fonctionne (y'a des testcases connus ?). Il ne me reste plus qu'à le toiletter (quelques détails mineurs, eg l'entête du résultat.)
Je poste ça dans l'après midi, très probablement avant 16h.

8

Chouette smile
Tu peux essayer par exemple d'appliquer ton diff avec GNU patch pour tester.

9

bon, j'avais trouvé un bug, j'ai corrigé, par contre pour l'entête je n'ai pas eu le temps de regarder le formatage des dates (et là je ne suis plus chez moi, je termine ce soir)

je vais regarder gnu patch : c'est pour reconstituer un fichier, c'est ça ? (m'enfin sinon j'ai déjà comparé avec le resultat de gnu diff, c'est identique pour tout ce que j'ai testé)


PS : il peut y avoir plusieurs chunks pour une seule comparaison ?? (délimités par @@ -XXX +YYY @@@ ??)

10

Bonne question.

GNU patch applique un diff sur fichier1 pour obtenir fichier2. Mais faire un diff entre ton diff et le diff de GNU diff est aussi un bon test cheeky

11

bon, j'ai testé avec gnupatch, tout fonctionne (chunks & cie) : le diff n'est pas toujours identique au résultat de gnudiff (je le trouve même plus logique en fait), mais il est valide (souvent un tout petit peu plus gros, eg 15,5Ko au lieu de 15 : rien de méchant)
Dans tous les cas, cette différence est due au moteur du diff de Incava, pas au formatage.

Il ne me reste plus qu'à faire le zip (je ne suis pas sur le bon PC, là zzz)
Je poste ça sous peu (genre ce soir plus tard, ou demain matin)


ps : ah si, j'oubliais, il y a quand même une différence, c'est que le timestamp n'est précis qu'à la milliseconde, et pas à la nanoseconde comme dans gnudiff (c'est à cause du format Date de Java qui n'est pas assez précis) : j'ai complété avec des zéros.
C'est grave ? (à mon avis on s'en fout un peu, mais bon... je préfère te le dire)

PPS : enfin bon, ceci dit, j'ai l'impression qu'en fait gnudiff win32 est précis à la microseconde et qu'il complete par des zéros...

12

Dans mon cas ce qui m'intéresse est un résultat purement visuel, donc ça ne me gêne pas.
J'attends ça avec impatience.

13

purement visuel ? tu veux dire que c'est juste pour jeter un coup d'oeil ?

(j'ai aussi ajouté "\ no newline at end of file" quand il le faut tripo)

14

Et tout ça partait d'un "je me suis amusé à le coder" smile

15

smile

16

(je n'ai pas oublié, c'est juste que j'ai corrigé un comportement erratique concernant le tag "\no newline at end of file" survenant avec des formats de fins de lignes hétérogènes : je dois toujours faire le zip, ça ne saurait tarder, peut être ce soir en rentrant)

17

je n'ai pas oublié, c'est juste que j'ai corrigé un ...


















mais non, c'est une blague trigni
c'est bon cette fois (cf minimessage)
J'espère qu'il n'y a pas trop de bugs embarrassed