Hash di file tra i sistemi operativi quando Perforce modifica le terminazioni di riga

0

Ho un sistema di convalida dei download di file da un server. Il server esegue Ubuntu / AWS e genera l'hash utilizzando i file di dati estratti dal controllo di versione, che è Perforce. Passa questo hash ai client Windows e iOS, che calcolano lo stesso hash sulla loro estremità e quindi confrontano il risultato con il server per vedere se hanno bisogno di richiedere un aggiornamento. Funziona bene per i file binari.

Per i file determinati da Perforce come testo, tuttavia, gli hash non corrispondono. Questo perché ci sono cinque opzioni in P4V che convertono le terminazioni di riga nei file basati sul sistema operativo. Posso modificare queste opzioni, ma non ce n'è una che utilizzerà solo i finali dalla versione archiviata.

  • Predefinito P4V: Un'opzione cambia i finali del sistema operativo. Questo non funziona ed è fonte di problemi.
  • Tre opzioni consentono di convertire in modo esplicito i file in un modulo specifico (Unix, Windows, Mac). Questo potrebbe funzionare, ma comporterebbe la modifica di questa impostazione su tutti i sistemi di compilazione e i sistemi di sviluppo, quindi non è l'ideale.
  • L'ultima opzione scrive il formato UNIX ma legge il sistema operativo locale. Poiché la lettura è specifica per il sistema operativo, di nuovo gli hash non corrispondono.

Possibili soluzioni:

  • Posso leggere i dati e convertire le terminazioni di riga prima dell'hashing, ma con migliaia di file, sono preoccupato che questo aggiunga un sacco di spese generali al processo (già un po 'lento).
  • Posso aggiungere alcuni script a ciascuno dei processi di generazione che standardizzeranno i formati dei file durante la creazione della build, ma gli ambienti di dev locali non passeranno.
  • Elimina completamente la convalida basata su hash e usa invece un altro metodo per determinare se il file è stato modificato (versioning); anche fattibile, ma sembra un grande cambiamento in un sistema che sembra così vicino a lavorare così com'è.

Mentre ho alcune opzioni, nessuna è veramente ottimale; qualcuno può suggerire una soluzione che minimizzi la gestione speciale di queste risorse e mantenga le cose veloci?

    
posta Nick Gotch 27.01.2016 - 17:52
fonte

0 risposte

Leggi altre domande sui tag