2011-10-31 8 views
6

Questa mattina ho eseguito i miei test e ci sono 2 fallimenti. Ma non ho cambiato alcun codice per alcuni giorni e tutti i test sono passati.È possibile che il codice venga modificato senza che Git ne sia a conoscenza?

Secondo Git, non ci sono modifiche (eccetto per coverage.data, che è l'uscita di test). gitk non mostra altri cambiamenti.

Come fa Git a sapere quando il codice cambia? Questo potrebbe essere causato da un errore/errore SSD?

Qual è il modo migliore per capire cos'è successo?

MODIFICA: lavoro in Ruby on Rails con framework Unit Test.

+4

Poiché non funziona oggi, verificare se si tratta di un problema con data l'ultimo giorno del mese, in particolare uno con 31 giorni. – manojlds

+0

Era così. Fallisce l'ultimo giorno del mese –

risposta

10

Inizierei a capire perché i test hanno avuto esito negativo e ciò potrebbe darti qualche indizio su come avrebbero potuto passare prima. A volte è un problema di temporizzazione, guasto intermittente, qualcosa di estraneo all'imbracatura di test, cambiamento di dati, un cambiamento di data o ora, ogni genere di roba.

+0

Sì, è un problema di temporizzazione. Calcolo Date.today - 6. mesi + 6. mesi. Fallisce l'ultimo giorno del mese che ha 31 giorni! (Oltre al 29 agosto (negli anni non bisestili) e 30, penso). –

+2

Sì, hai ragione su questo. Quando eseguo 'DateTime.Today.AddMonths (-6) .AddMonths (6) .ToShortDateString();' sotto il debugger, ottengo '30/10/2011 '- Sembra che quando sottraggo 6mon, tornerò indietro fino al 30 aprile (da aprile non ha giorno 31), ma poi quando aggiungo 6mon a quello, prenderò il 30 ottobre. Immagino che questo abbia un senso. –

2

Il repository non può avere alcuna modifica senza che Git ne sia a conoscenza e lo registra da qualche parte poiché è necessario recuperare i log per poter ottenere comunque i file pronti contro termine. Vorrei verificare che i guasti non siano causati da qualcosa sulla macchina che non dovrebbe funzionare contemporaneamente ai test o potrebbe essere una condizione di competizione che non ti aspetti.

9

Vedo che Mike ha trovato il problema (spuntare la piccola casella di risposta, per favore).

Sì, è possibile che il codice venga modificato senza che Git ne sia a conoscenza. Il file che ha causato l'errore, forse un file di test o un fix temporaneo, potrebbe essere ignorato in .gitignore o .git/info/exclude. Facendo un git clean -dxf pulirai la cassa pulita da tutto ciò che non è noto a git. git status --ignored mostrerà i file ignorati da git. In tal caso, si desidera aggiungere una migliore pulizia del test come parte del runner di test.

Ai posteri, ecco la breve lista di test modi potrebbe fallire senza che vi sia alcuna modifica del codice visibile a git:

  • i file e le attrezzature di prova "temporaneo" potrebbero essere sporchi.
  • I database e le tabelle "temporanei" potrebbero essere sporchi.
  • È sensibile all'ora o alla data.
  • Utilizza le risorse di rete e sono state modificate.
  • Il compilatore è stato modificato.
  • Le librerie installate utilizzate sono state modificate.
    • Le librerie utilizzate dalle librerie sono state modificate.
  • Il kernel è stato modificato.
  • Qualsiasi server utilizzato (database, server Web, ecc.) Sono stati modificati.
  • Esso utilizza l'elaborazione parallela e talvolta si verifica un piccolo errore.
  • Il disco (o il filesystem in cui si trovano i file temporanei) è pieno.
  • Il disco (o il file system in cui si trovano i file temporanei) è danneggiato.
  • Le tue quote di memoria/disco/processo/filehandle sono state ridotte.
  • La macchina ha esaurito la memoria.
  • La macchina ha esaurito i filehandle.
  • Utilizza dispositivi con dati generati casualmente e generato alcuni che hanno fatto scattare un bug.