11
votes

Où puis-je trouver le diff de la patience mise en œuvre?

Il est répondu sur ce site que la diffamation de patience de Bram Cohen se trouve à Bazaar comme diff d'une différence par défaut et une option avec GIT DIFF, mais je trouve qu'il est difficile de sourcer un programme autonome indépendant qui implémente cet algorithme diffèrent. .

Par exemple, j'aimerais appliquer de la patience Diffs à Perforce Diffs, et il est assez clair avec le code canonique "Frobnitz" Exemple de code de la patience difforme:

Entrez la description de l'image ici

Le terminal à droite a appelé le git diff avec le drapeau - Patience .

J'ai aussi configuré le script diff-en surbrillance Perl, dont le travail doit inverser des couleurs sur des lignes assorties entre les premières et les dernières sections différentes de ces lignes. Le côté gauche a un exemple où cela ne vous aide pas beaucoup, mais je le laisserai glisser car au moins là est ce point-virgule là-bas ... Quoi qu'il en soit, apporter des améliorations au script diff n'est pas le sujet de cette question.

En plus de la question de savoir où trouver un diff de la patience autonome, si quelqu'un sait faire de la perforce p4 utiliser un programme de diff externe, c'est aussi quelque chose qui doit être fait.


1 commentaires

Qu'est-ce que j'utilise git pour l'exécuter sur deux fichiers? cela semble juste mauvais. Cela n'a jamais eu lieu à moi. Je vois maintenant que cela fonctionne assez bien et je l'utiliserai certainement. Mais de nombreux systèmes n'ont pas installé Git ...


5 Réponses :


8
votes

Ce n'est peut-être pas aussi idéal que je l'apprécierais, mais la solution est parfaitement bonne du point de vue pratique (et c'est une bonne bonne perspective d'avoir).

GIT DIFF --NO-INDEX - PAIDE DU FILE1 FILE2 Est-ce que le travail. (merci tstevenpenny)

$ p4diff La variable définit le diff ... nous ne faisons que des trucs Git Diff --Patérialité --NO-Index dans cela.


0 commentaires

4
votes

J'ai pris la liberté de porter la patience à un bibliothèque quelque peu autonome , c'est en C #. Il est encore tôt pour la bibliothèque. C'est surtout un port de ligne par ligne; Ainsi, j'espère avoir la majeure partie de la stabilité du python un.

N'oubliez pas que Patience ne trouve que les plus longues sous-succouvertes ( en termes diff, cela signifie des parties du fichier qui n'ont pas changé). Vous aurez besoin de Déterminez vous-même les ajouts et les déménagements .

N'oubliez pas non plus que dans le référentiel bazar, il existe également des implémentations dans Python et en C (à nouveau, les implémentations ne résolvent que le problème des LCS):


3 commentaires

Depuis, j'ai déplacé depuis une implémentation de difforme de caractères de caractères en C ++ trouvé ici , ainsi que de nombreuses améliorations (UTF8 et binaire associées) de la mienne. Je l'ai surnommé SIFT . Espérons qu'un jour, il sera révélé au monde. Merci d'avoir partagé votre version! (La mienne pourrait réellement échouer W.R.T. Faire une vraie patience-diff, bien qu'elle se comporte bien sur l'exemple Frobnitz)


@Stevenlu plaisir, content que tu aies vécu à droite. Je serais intéressé d'entendre parler de ce que les effets sont de certaines des améliorations que vous avez apportées (si vous avez ouvert des problèmes sur le projet GitHub).


En fait, je viens de découvrir ceci: github.com/leutuloff/diff-match-patch- cpp-stl maintenant, ce que j'ai est basé sur la version un peu plus en fonction de wstring et je n'a pas pu convertir correctement à utiliser string . Cependant, je ne considère pas qu'une grande partie de la limitation de l'UTF-8 (et je ne suis pas sûr de la manière dont la mise en œuvre de la chaîne non large pourrait gérer UTF8 de manière à conscience de la points de code).



3
votes

La mise en œuvre de Python de Cohen ne nécessite que des modifications mineures (ci-dessous) pour exécuter autonome. C'est dans deux fichiers, des copies dont j'ai accroché par Googling "Diffffibib patience":

http://stuff.mit.edu/afs/athena/system/i386_deb50/os/usr/share/pyshared/bzrlib/patianendeiff.py et http://stuff.mit .EDU / AFS / ATHENA / System / I386_Deb50 / OS / USR / Share / Pyspared / BZRLIB / _PATICEFF_PY.PY

Le premier fichier peut être exécuté à peu près à Diff. La seconde est la mise en œuvre de Python des boucles internes. (Fichier unique ?? Exercice pour le lecteur!) Dans Bzrlib, il y a aussi une mise en œuvre C des boucles intérieures.

ici (avec l'aide du programme lui-même) sont mes correctifs pour les faire exécuter autonome: xxx


4 commentaires

C'est parfait - merci! Je ne vois pas la version autonome corrigée sur TIAC ou GITUB - l'avez-vous posté n'importe où? Sinon, je le ferai quand j'aurai la chance :).


Je n'ai toujours pas de copie du fichier patché, mais je pense que vous pouvez appliquer le correctif ci-dessus à l'original à l'aide de l'utilitaire "patch".


Et j'ai manqué une partie de votre question. Non, je ne les ai jamais combinés dans un seul fichier.


Il y a maintenant une version autonome ici: GITUB.COM/BREEZY-TEAM/PATIANENFEFF



0
votes

La mise en œuvre du bazar de patiencef est également disponible sous forme de module Python séparé.


0 commentaires

1
votes

Pour une implémentation JavaScript, avec des améliorations apportées à la patience pour déterminer les lignes susceptibles de déplacer (doublées "Patianfoundeiffplus"), voir https://github.com/jontrent/patifoundeiff .


0 commentaires