Domanda

Mi è stato assegnato il compito di creare uno strumento in grado di diff e unire i file di configurazione per il prodotto della mia azienda. Le configurazioni sono memorizzate come stringhe XML o con codifica URL. Sto cercando una libreria, preferibilmente open source con una licenza compatibile con software commerciale, in grado di fare queste differenze. La nostra app è scritta in C ++, quindi le librerie C ++ sarebbero le migliori, ma sono disposto a guardare le librerie che sono specifiche per C # poiché posso scrivere un wrapper che la espone a C ++ tramite COM. Le differenze a tre vie sarebbero l'ideale, ma a due vie è accettabile. Se ha una comprensione di XML, sarebbe anche un vantaggio (poiché i nodi XML possono essere riordinati senza modificare il documento, ecc.). Qualche suggerimento sulla biblioteca? Dovrei anche considerare di scrivere i miei strumenti diff nella speranza di dargli una conoscenza semantica dei nostri formati?

Grazie a questa domanda simile , ho già scoperto questa libreria di Google , che sembra davvero eccezionale, ma sto ancora cercando per altre opzioni. Sembra anche essere in grado di generare le differenze in formato HTML (usando i tag <ins> e <del> che non sapevo esistessero prima di scoprirlo), il che potrebbe essere davvero utile, ma sembra essere unificato solo diff. Ho bisogno di visualizzare i risultati in un browser Web e probabilmente dovrò creare un'interfaccia per eseguire le fusioni anche nel browser. Non mi aspetto che una libreria sia in grado di aiutare con queste attività, ma deve produrre output in un formato che sia adatto a me costruendo questo sopra di esso. Attualmente sto immaginando qualcosa sulla falsariga di TortoiseMerge (differenze side-by-side, non unificate), ad eccezione del browser. Eventuali suggerimenti / trucchi / idee di design su come presentare questo sarebbero apprezzati anche.

È stato utile?

Soluzione

Per diffondere l'XML ti suggerirei di normalizzarlo prima: ordina tutti gli elementi in ordine alfabetico, quindi genera un flusso di token / xml che rappresenta il documento originale ma è indipendente dalla formattazione originale. Dopo aver eseguito il diff, analizza il risultato per ottenere un albero contenente ciò che è stato aggiunto / rimosso.

Altri suggerimenti

Subversion viene fornito con libsvn_diff e libsvn_delta concesso in licenza in base alla licenza del software Apache.

Qui è una libreria C ++ che può diffondere ciò che l'autore chiama dati semistrutturati. Si occupa perfettamente di HTML e XML. Dato che i tuoi dati sono XML, avrebbe molto senso usare questo invece di diff di testo semplice. Questo è particolarmente vero quando i file sono generati automaticamente.

Attualmente sto cercando di utilizzare questa libreria per creare uno strumento che differenzia i file di progetto di Visual Studio. Si tratta fondamentalmente di file XML e l'utilizzo di un semplice strumento diff come Winmerge è troppo doloroso perché Visual Studio rende quasi tutto il file impazzito riordinando. L'idea è di fare una sorta di diff strutturato per affrontare il problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top