Situazione
Siamo una grande squadra di sviluppatori, che utilizza SVN per il controllo del codice sorgente sul nostro progetto. Uno dei nostri file, FileTracker.cvs, è molto grande: contiene metadati relativi a quasi tutti i file nel nostro repository. Il formato di FileTracker.cvs è che ogni riga rappresenta un file e ogni colonna rappresenta una parte dei metadati relativi a quel file. Una delle colonne, chiamate tracce "risolte" se abbiamo elaborato quel file; può essere vero o falso.
Problema
Poiché utilizziamo un singolo file, FileTracker.cvs, per monitorare lo stato di quasi tutti gli altri file, diventa un bottleck per i conflitti. Cioè, molte persone finiscono per modificarlo regolarmente. Poiché SVN funziona a livello di file, ogni volta che due persone modificano il file e si impegnano, si verifica un conflitto, anche se le modifiche si verificano molto probabilmente su linee diverse.
Soluzione desiderata
Vorremmo che una soluzione per unire automaticamente i conflitti in questo file, idealmente che si agganci perfettamente in SVN. Diciamo che abbiamo un conflitto tra due versioni del file, Left e Right, e vogliamo unire in un file chiamato result. Quindi vogliamo solo implementare la seguente logica:
Per ogni riga a sinistra:
- Se non è in conflitto con right, la riga in Result è la stessa
- Se è in conflitto con right e la colonna "resolved" è vera, accetta la linea da sinistra nel risultato
- Altrimenti, accetta la linea da destra nel risultato
Alla fine, vogliamo che tutte le modifiche di resolved = true vengano mantenute, e non ci interessa tanto il resto dei dati.
Tutte le specifiche
Usiamo la SVN della tartaruga e, in misura minore, Eclipse. Il nostro sistema operativo è Windows 7.