Pergunta

Às vezes tenho que trabalhar em um código que avance o relógio do computador.Nesse caso, alguns arquivos .cpp ou .h têm a data de última modificação definida para o futuro.

Mais tarde, quando meu relógio está fixo e eu compilo meus fontes, o sistema reconstrói a maior parte do projeto porque algumas das datas de modificação mais recentes estão no futuro.Cada recompilação subsequente tem o mesmo problema.

A solução que eu conheço é:

a) Encontre o arquivo que contém a hora futura e salve-o novamente.Este método não é o ideal porque o projeto é muito grande e leva tempo até mesmo para a pesquisa avançada do Windows encontrar os arquivos que foram alterados.

b) Exclua todo o projeto e verifique-o novamente no svn.

Alguém sabe como posso contornar esse problema?

Existe talvez uma configuração no visual studio que me permita dizer ao compilador para usar o bit de arquivo em vez da data da última modificação para detectar alterações no arquivo de origem?

Ou talvez exista uma ferramenta de redefinição de data de modificação recursiva que possa ser usada nesta situação?

Foi útil?

Solução

Se esse fosse o meu problema, procuraria maneiras de evitar interferir na hora do sistema.Isolar o código em testes de unidade, ou em uma máquina virtual, ou algo assim.

Porém, porque eu amo PowerShell:

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

Outras dicas

Eu recomendaria usar uma máquina virtual onde você possa mexer no relógio o quanto quiser e isso não afetará sua máquina de desenvolvimento.Dois gratuitos são PC virtual da Microsoft e Caixa Virtual do Sol.

Não sei se isso funciona na sua situação, mas que tal você não adiantar o relógio, mas agrupar o método gettime (ou o que estiver usando) e fazê-lo retornar o tempo futuro que você precisa?

Instalar Utilitários Unix

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

Certifique-se de usar o caminho completo ao chamar find ou provavelmente usará o find.exe do Windows.Isso não foi testado no shell do Windows - talvez seja necessário modificar um pouco a sintaxe.

Eu não uso o Windows - mas certamente existe algo como awk ou grep que você pode usar para encontrar os arquivos "futuros" com carimbo de data e hora e depois "tocá-los" para que tenham a hora certa - até mesmo um script perl.

1) Use um sistema de compilação que não use carimbos de data/hora para detectar modificações, como escárnios

2) Usar cache para acelerar seu sistema de compilação que usa carimbos de data/hora (e reconstruir tudo).

Em ambos os casos, ele está usando md5sum para verificar se um arquivo foi modificado, não carimbos de data e hora.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top