Domanda

A volte devo lavorare su un codice che faccia avanzare l'orologio del computer.In questo caso, la data dell'ultima modifica di alcuni file .cpp o .h viene impostata su un'ora futura.

Successivamente, quando il mio orologio viene corretto e compilo i miei sorgenti, il sistema ricostruisce la maggior parte del progetto perché alcune delle ultime date di modifica sono nel futuro.Ogni successiva ricompilazione presenta lo stesso problema.

Le soluzioni che conosco sono:

a) Trova il file che ha l'ora futura e salvalo nuovamente.Questo metodo non è l'ideale perché il progetto è molto grande e ci vuole tempo anche per la ricerca avanzata di Windows per trovare i file modificati.

b) Elimina l'intero progetto e ricontrollalo da svn.

Qualcuno sa come posso aggirare questo problema?

Esiste forse un'impostazione in Visual Studio che mi consentirà di dire al compilatore di utilizzare il bit di archivio anziché la data dell'ultima modifica per rilevare le modifiche al file sorgente?

O forse esiste uno strumento ricorsivo di reimpostazione della data di modifica che può essere utilizzato in questa situazione?

È stato utile?

Soluzione

Se questo fosse il mio problema, cercherei modi per evitare di perdere tempo con l'ora del sistema.Isolare il codice sotto test unitari, o una macchina virtuale, o qualcosa del genere.

Tuttavia, perché amo PowerShell:

Get-ChildItem -r . | 
    ? { $_.LastWriteTime -gt ([DateTime]::Now) } | 
    Set-ItemProperty -Name "LastWriteTime" -Value ([DateTime]::Now)

Altri suggerimenti

Consiglierei di utilizzare una macchina virtuale in cui puoi modificare l'orologio a tuo piacimento e ciò non influirà sulla tua macchina di sviluppo.Due sono gratuiti PC virtuale da Microsoft e VirtualBox da sole.

Non so se funziona nella tua situazione, ma che ne dici di non spostare l'orologio in avanti, ma di avvolgere il metodo gettime (o qualunque cosa tu stia utilizzando) e di farlo restituire l'ora futura di cui hai bisogno?

Installare Utilità Unix

touch temp
find . -newer temp -exec touch {} ;
rm temp

Assicurati di utilizzare il percorso completo quando chiami find altrimenti probabilmente utilizzerà find.exe di Windows.Questo non è stato testato nella shell di Windows: potrebbe essere necessario modificare leggermente la sintassi.

Non uso Windows, ma sicuramente c'è qualcosa come awk o grep che puoi usare per trovare i file con timestamp "futuri" e poi "toccarli" in modo che abbiano l'ora giusta, anche uno script Perl.

1) Utilizzare un sistema di compilazione che non utilizzi timestamp per rilevare modifiche, come scons

2) Utilizzare ccaché per accelerare il tuo sistema di compilazione che utilizza timestamp (e ricostruire tutto).

In entrambi i casi viene utilizzato md5sum per verificare che un file sia stato modificato, non i timestamp.

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