Question

Parfois, je dois travailler sur du code qui fait avancer l’horloge de l’ordinateur.Dans ce cas, certains fichiers .cpp ou .h voient leur dernière date de modification définie sur une heure ultérieure.

Plus tard, lorsque mon horloge est corrigée et que je compile mes sources, le système reconstruit la majeure partie du projet car certaines des dernières dates de modification sont dans le futur.Chaque recompilation ultérieure a le même problème.

Les solutions que je connais sont :

a) Recherchez le fichier contenant l'heure future et enregistrez-le à nouveau.Cette méthode n'est pas idéale car le projet est très volumineux et il faut du temps, même pour la recherche avancée de Windows, pour trouver les fichiers modifiés.

b) Supprimez l'intégralité du projet et revérifiez-le depuis svn.

Est-ce que quelqu'un sait comment contourner ce problème ?

Existe-t-il peut-être un paramètre dans Visual Studio qui me permettra de dire au compilateur d'utiliser le bit d'archive au lieu de la dernière date de modification pour détecter les modifications du fichier source ?

Ou peut-être existe-t-il un outil récursif de réinitialisation de la date de modification qui peut être utilisé dans cette situation ?

Était-ce utile?

La solution

Si tel était mon problème, je chercherais des moyens d'éviter de modifier l'heure du système.Isoler le code sous des tests unitaires, ou une machine virtuelle, ou quelque chose du genre.

Mais parce que j'aime PowerShell:

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

Autres conseils

Je recommanderais d'utiliser une machine virtuelle sur laquelle vous pouvez jouer avec l'horloge à votre guise et cela n'affectera pas votre machine de développement.Deux gratuits sont PC virtuel de Microsoft et Boîte Virtuelle du Soleil.

Je ne sais pas si cela fonctionne dans votre situation, mais que diriez-vous de ne pas avancer votre horloge, mais d'envelopper votre méthode gettime (ou tout ce que vous utilisez) et de lui faire renvoyer l'heure future dont vous avez besoin ?

Installer Utilitaire Unix

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

Assurez-vous d'utiliser le chemin complet lors de l'appel de find, sinon il utilisera probablement find.exe de Windows à la place.Ceci n'a pas été testé dans le shell Windows - vous devrez peut-être modifier un peu la syntaxe.

Je n'utilise pas Windows - mais il existe sûrement quelque chose comme awk ou grep que vous pouvez utiliser pour rechercher les "futurs" fichiers horodatés, puis les "toucher" pour qu'ils aient le bon moment - même un script Perl.

1) Utilisez un système de build qui n'utilise pas d'horodatage pour détecter les modifications, comme scons

2) Utiliser cache pour accélérer votre système de construction qui utilise des horodatages (et tout reconstruire).

Dans les deux cas, il utilise la somme md5 pour vérifier qu'un fichier a été modifié, et non les horodatages.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top