Question

J'ai été chargé de créer un outil capable de différencier et de fusionner les fichiers de configuration du produit de mon entreprise. Les configurations sont stockées sous forme de chaînes codées XML ou URL. Je cherche une bibliothèque, de préférence open source avec une licence compatible avec les logiciels commerciaux, capable de faire ces diffs. Notre application étant écrite en C ++, les bibliothèques C ++ seraient préférables, mais je suis disposé à consulter les bibliothèques spécifiques à C #, car je peux écrire un wrapper qui l'expose au C ++ via COM. Les différences à trois voies seraient idéales, mais la voie à deux voies est acceptable. S'il comprend le langage XML, ce sera également un avantage (puisque les nœuds XML peuvent être réorganisés sans modifier le document, etc.). Des suggestions de bibliothèque? Devrais-je même envisager d’écrire mes propres outils de diff dans l’espoir de lui donner une connaissance sémantique de nos formats?

Merci à cette question similaire , j'ai déjà découvert cette bibliothèque Google , qui semble vraiment géniale, mais je cherche toujours pour d'autres options. Il semble également être capable de générer les diffs au format HTML (en utilisant les balises <ins> et <del> que je ne connaissais pas avant de le découvrir), ce qui pourrait être très pratique, mais cela semble être unifié. diff seulement. Je vais devoir afficher les résultats dans un navigateur Web et probablement créer une interface pour effectuer les fusions dans le navigateur. Je ne m'attends pas à ce qu'une bibliothèque soit en mesure de vous aider dans ces tâches, mais elle doit produire une sortie dans un format qui me permette de la construire par-dessus. Je suis en train d’envisager quelque chose du genre TortoiseMerge (diffs côte à côte, non unifiée), sauf sur navigateur. Tous les conseils / astuces / idées de design sur la façon de présenter ceci seraient également appréciés.

Était-ce utile?

La solution

Pour différencier le XML, je vous suggère de le normaliser en premier: triez tous les éléments dans l'ordre alphabétique, puis générez un flux de jetons / xml qui représente le document d'origine mais est indépendant de la mise en forme d'origine. Après avoir exécuté le diff, analysez le résultat pour obtenir un arbre contenant ce qui a été ajouté / supprimé.

Autres conseils

Subversion est fourni avec libsvn_diff et libsvn_delta sous licence Apache Software License.

Voici une bibliothèque C ++ qui peut être différente de ce que l'auteur appelle des données semi-structurées. Il traite bien avec HTML et XML. Étant donné que vos données sont au format XML, il serait judicieux de les utiliser à la place des différences en texte brut. C'est particulièrement le cas lorsque les fichiers sont générés par une machine.

J'essaie actuellement d'utiliser cette bibliothèque pour créer un outil qui diffère les fichiers de projet Visual Studio. Il s’agit essentiellement de fichiers XML. Il est trop pénible d’utiliser un outil de différenciation tel que Winmerge, car Visual Studio détruit l’ensemble du fichier par une réorganisation folle. L'idée est de faire une sorte de diff structuré pour résoudre le problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top