7
7
use PHPStan \File \FileReader ;
8
8
use function array_fill_keys ;
9
9
use function array_key_exists ;
10
- use function filemtime ;
11
10
12
11
class ResultCacheManager
13
12
{
14
13
15
- private const CACHE_VERSION = 'v1 ' ;
14
+ private const CACHE_VERSION = 'v2-hashes ' ;
16
15
17
16
/** @var string */
18
17
private $ cacheFilePath ;
@@ -32,6 +31,9 @@ class ResultCacheManager
32
31
/** @var string */
33
32
private $ usedLevel ;
34
33
34
+ /** @var array<string, string> */
35
+ private $ fileHashes = [];
36
+
35
37
/**
36
38
* @param string $cacheFilePath
37
39
* @param string[] $allCustomConfigFiles
@@ -113,15 +115,12 @@ public function restore(array $allAnalysedFiles, bool $debug): ResultCache
113
115
unset($ deletedFiles [$ analysedFile ]);
114
116
115
117
$ analysedFileData = $ invertedDependencies [$ analysedFile ];
116
- $ cachedModifiedTime = $ analysedFileData ['modifiedTime ' ];
118
+ $ cachedFileHash = $ analysedFileData ['fileHash ' ];
117
119
$ dependentFiles = $ analysedFileData ['dependentFiles ' ];
118
120
$ invertedDependenciesToReturn [$ analysedFile ] = $ dependentFiles ;
119
- $ currentModifiedTime = filemtime ($ analysedFile );
120
- if ($ currentModifiedTime === false ) {
121
- $ currentModifiedTime = time ();
122
- }
121
+ $ currentFileHash = $ this ->getFileHash ($ analysedFile );
123
122
124
- if ($ cachedModifiedTime === $ currentModifiedTime ) {
123
+ if ($ cachedFileHash === $ currentFileHash ) {
125
124
continue ;
126
125
}
127
126
@@ -293,12 +292,8 @@ private function save(
293
292
foreach ($ dependencies as $ file => $ fileDependencies ) {
294
293
foreach ($ fileDependencies as $ fileDep ) {
295
294
if (!array_key_exists ($ fileDep , $ invertedDependencies )) {
296
- $ modifiedTime = filemtime ($ fileDep );
297
- if ($ modifiedTime === false ) {
298
- $ modifiedTime = time ();
299
- }
300
295
$ invertedDependencies [$ fileDep ] = [
301
- 'modifiedTime ' => $ modifiedTime ,
296
+ 'fileHash ' => $ this -> getFileHash ( $ fileDep ) ,
302
297
'dependentFiles ' => [],
303
298
];
304
299
unset($ filesNoOneIsDependingOn [$ fileDep ]);
@@ -316,12 +311,8 @@ private function save(
316
311
continue ;
317
312
}
318
313
319
- $ modifiedTime = filemtime ($ file );
320
- if ($ modifiedTime === false ) {
321
- $ modifiedTime = time ();
322
- }
323
314
$ invertedDependencies [$ file ] = [
324
- 'modifiedTime ' => $ modifiedTime ,
315
+ 'fileHash ' => $ this -> getFileHash ( $ file ) ,
325
316
'dependentFiles ' => [],
326
317
];
327
318
}
@@ -385,10 +376,17 @@ private function getConfigFiles(): array
385
376
386
377
private function getFileHash (string $ path ): string
387
378
{
379
+ if (array_key_exists ($ path , $ this ->fileHashes )) {
380
+ return $ this ->fileHashes [$ path ];
381
+ }
382
+
388
383
$ contents = FileReader::read ($ path );
389
384
$ contents = str_replace ("\r\n" , "\n" , $ contents );
390
385
391
- return sha1 ($ contents );
386
+ $ hash = sha1 ($ contents );
387
+ $ this ->fileHashes [$ path ] = $ hash ;
388
+
389
+ return $ hash ;
392
390
}
393
391
394
392
private function getPhpStanVersion (): string
0 commit comments