Gestisco una società di integrazione continua ospitata e eseguiamo il codice dei nostri clienti su Linux. Ogni volta che eseguiamo il codice, lo eseguiamo in una macchina virtuale separata. Un problema frequente che si presenta è che i test di un cliente a volte falliscono a causa dell'ordinamento delle directory del loro codice verificato sulla VM.
Lasciami andare più nel dettaglio. Su OSX, il file system HFS + assicura che le directory vengano sempre attraversate nello stesso ordine. I programmatori che usano OSX presumono che se funziona sulla propria macchina, deve funzionare ovunque. Ma spesso non funziona su Linux, perché i file system linux non offrono garanzie di ordinamento quando si attraversano le directory.
Ad esempio, considera che ci sono 2 file, a.rb, b.rb. a.rb definisce MyObject
e b.rb usa MyObject
. Se a.rb viene caricato per primo, tutto funzionerà. Se b.rb viene caricato per primo, tenterà di accedere a una variabile non definita MyObject
e fallirà.
Ma la cosa peggiore è che non sempre fallisce. Poiché l'ordinamento del file system su Linux non è ordinato, sarà un ordine diverso su macchine diverse. Questo è peggio perché a volte i test passano e a volte falliscono. Questo è il peggior risultato possibile.
Quindi la mia domanda è: c'è un modo per rendere ripetibile l'ordinamento dei file system. Qualche bandiera su ext4 forse, che dice che attraverserà sempre le directory in qualche ordine? O forse un file system diverso che ha questa garanzia?