@@ -91,25 +91,29 @@ public function __construct(
91
91
public function restore (array $ allAnalysedFiles , bool $ debug , bool $ onlyFiles , ?array $ projectConfigArray , Output $ output ): ResultCache
92
92
{
93
93
$ startTime = microtime (true );
94
+ $ currentFileHashes = [];
95
+ foreach ($ allAnalysedFiles as $ analysedFile ) {
96
+ $ currentFileHashes [$ analysedFile ] = $ this ->getFileHash ($ analysedFile );
97
+ }
94
98
if ($ debug ) {
95
99
if ($ output ->isVeryVerbose ()) {
96
100
$ output ->writeLineFormatted ('Result cache not used because of debug mode. ' );
97
101
}
98
- return new ResultCache ($ allAnalysedFiles , true , time (), $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray ), [], [], [], [], [], [], [], []);
102
+ return new ResultCache ($ allAnalysedFiles , true , time (), $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray ), [], [], [], [], [], [], [], [], $ currentFileHashes );
99
103
}
100
104
if ($ onlyFiles ) {
101
105
if ($ output ->isVeryVerbose ()) {
102
106
$ output ->writeLineFormatted ('Result cache not used because only files were passed as analysed paths. ' );
103
107
}
104
- return new ResultCache ($ allAnalysedFiles , true , time (), $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray ), [], [], [], [], [], [], [], []);
108
+ return new ResultCache ($ allAnalysedFiles , true , time (), $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray ), [], [], [], [], [], [], [], [], $ currentFileHashes );
105
109
}
106
110
107
111
$ cacheFilePath = $ this ->cacheFilePath ;
108
112
if (!is_file ($ cacheFilePath )) {
109
113
if ($ output ->isVeryVerbose ()) {
110
114
$ output ->writeLineFormatted ('Result cache not used because the cache file does not exist. ' );
111
115
}
112
- return new ResultCache ($ allAnalysedFiles , true , time (), $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray ), [], [], [], [], [], [], [], []);
116
+ return new ResultCache ($ allAnalysedFiles , true , time (), $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray ), [], [], [], [], [], [], [], [], $ currentFileHashes );
113
117
}
114
118
115
119
try {
@@ -121,7 +125,7 @@ public function restore(array $allAnalysedFiles, bool $debug, bool $onlyFiles, ?
121
125
122
126
@unlink ($ cacheFilePath );
123
127
124
- return new ResultCache ($ allAnalysedFiles , true , time (), $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray ), [], [], [], [], [], [], [], []);
128
+ return new ResultCache ($ allAnalysedFiles , true , time (), $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray ), [], [], [], [], [], [], [], [], $ currentFileHashes );
125
129
}
126
130
127
131
if (!is_array ($ data )) {
@@ -130,7 +134,7 @@ public function restore(array $allAnalysedFiles, bool $debug, bool $onlyFiles, ?
130
134
$ output ->writeLineFormatted ('Result cache not used because the cache file is corrupted. ' );
131
135
}
132
136
133
- return new ResultCache ($ allAnalysedFiles , true , time (), $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray ), [], [], [], [], [], [], [], []);
137
+ return new ResultCache ($ allAnalysedFiles , true , time (), $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray ), [], [], [], [], [], [], [], [], $ currentFileHashes );
134
138
}
135
139
136
140
$ meta = $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray );
@@ -139,15 +143,16 @@ public function restore(array $allAnalysedFiles, bool $debug, bool $onlyFiles, ?
139
143
$ diffs = $ this ->getMetaKeyDifferences ($ data ['meta ' ], $ meta );
140
144
$ output ->writeLineFormatted ('Result cache not used because the metadata do not match: ' . implode (', ' , $ diffs ));
141
145
}
142
- return new ResultCache ($ allAnalysedFiles , true , time (), $ meta , [], [], [], [], [], [], [], []);
146
+ return new ResultCache ($ allAnalysedFiles , true , time (), $ meta , [], [], [], [], [], [], [], [], $ currentFileHashes );
143
147
}
144
148
145
149
if (time () - $ data ['lastFullAnalysisTime ' ] >= 60 * 60 * 24 * 7 ) {
146
150
if ($ output ->isVeryVerbose ()) {
147
151
$ output ->writeLineFormatted ('Result cache not used because it \'s more than 7 days since last full analysis. ' );
148
152
}
153
+
149
154
// run full analysis if the result cache is older than 7 days
150
- return new ResultCache ($ allAnalysedFiles , true , time (), $ meta , [], [], [], [], [], [], [], []);
155
+ return new ResultCache ($ allAnalysedFiles , true , time (), $ meta , [], [], [], [], [], [], [], [], $ currentFileHashes );
151
156
}
152
157
153
158
/**
@@ -162,7 +167,7 @@ public function restore(array $allAnalysedFiles, bool $debug, bool $onlyFiles, ?
162
167
if ($ output ->isVeryVerbose ()) {
163
168
$ output ->writeLineFormatted (sprintf ('Result cache not used because extension file %s was not found. ' , $ extensionFile ));
164
169
}
165
- return new ResultCache ($ allAnalysedFiles , true , time (), $ meta , [], [], [], [], [], [], [], []);
170
+ return new ResultCache ($ allAnalysedFiles , true , time (), $ meta , [], [], [], [], [], [], [], [], $ currentFileHashes );
166
171
}
167
172
168
173
if ($ this ->getFileHash ($ extensionFile ) === $ fileHash ) {
@@ -173,7 +178,7 @@ public function restore(array $allAnalysedFiles, bool $debug, bool $onlyFiles, ?
173
178
$ output ->writeLineFormatted (sprintf ('Result cache not used because extension file %s hash does not match. ' , $ extensionFile ));
174
179
}
175
180
176
- return new ResultCache ($ allAnalysedFiles , true , time (), $ meta , [], [], [], [], [], [], [], []);
181
+ return new ResultCache ($ allAnalysedFiles , true , time (), $ meta , [], [], [], [], [], [], [], [], $ currentFileHashes );
177
182
}
178
183
179
184
$ invertedDependencies = $ data ['dependencies ' ];
@@ -234,7 +239,7 @@ public function restore(array $allAnalysedFiles, bool $debug, bool $onlyFiles, ?
234
239
$ cachedFileHash = $ analysedFileData ['fileHash ' ];
235
240
$ dependentFiles = $ analysedFileData ['dependentFiles ' ];
236
241
$ invertedDependenciesToReturn [$ analysedFile ] = $ dependentFiles ;
237
- $ currentFileHash = $ this -> getFileHash ( $ analysedFile) ;
242
+ $ currentFileHash = $ currentFileHashes [ $ analysedFile] ;
238
243
239
244
if ($ cachedFileHash === $ currentFileHash ) {
240
245
continue ;
@@ -301,7 +306,7 @@ public function restore(array $allAnalysedFiles, bool $debug, bool $onlyFiles, ?
301
306
));
302
307
}
303
308
304
- return new ResultCache ($ filesToAnalyse , false , $ data ['lastFullAnalysisTime ' ], $ meta , $ filteredErrors , $ filteredLocallyIgnoredErrors , $ filteredLinesToIgnore , $ filteredUnmatchedLineIgnores , $ filteredCollectedData , $ invertedDependenciesToReturn , $ filteredExportedNodes , $ data ['projectExtensionFiles ' ]);
309
+ return new ResultCache ($ filesToAnalyse , false , $ data ['lastFullAnalysisTime ' ], $ meta , $ filteredErrors , $ filteredLocallyIgnoredErrors , $ filteredLinesToIgnore , $ filteredUnmatchedLineIgnores , $ filteredCollectedData , $ invertedDependenciesToReturn , $ filteredExportedNodes , $ data ['projectExtensionFiles ' ], $ currentFileHashes );
305
310
}
306
311
307
312
/**
@@ -445,7 +450,7 @@ public function process(AnalyserResult $analyserResult, ResultCache $resultCache
445
450
}
446
451
}
447
452
448
- $ this ->save ($ resultCache ->getLastFullAnalysisTime (), $ errorsByFile , $ locallyIgnoredErrorsByFile , $ linesToIgnore , $ unmatchedLineIgnores , $ collectedDataByFile , $ dependencies , $ exportedNodes , $ projectExtensionFiles , $ meta );
453
+ $ this ->save ($ resultCache ->getLastFullAnalysisTime (), $ errorsByFile , $ locallyIgnoredErrorsByFile , $ linesToIgnore , $ unmatchedLineIgnores , $ collectedDataByFile , $ dependencies , $ exportedNodes , $ projectExtensionFiles , $ resultCache -> getCurrentFileHashes (), $ meta );
449
454
450
455
if ($ output ->isVeryVerbose ()) {
451
456
$ output ->writeLineFormatted ('Result cache is saved. ' );
@@ -702,6 +707,7 @@ private function mergeUnmatchedLineIgnores(ResultCache $resultCache, array $fres
702
707
* @param array<string, array<string>> $dependencies
703
708
* @param array<string, array<RootExportedNode>> $exportedNodes
704
709
* @param array<string, array{string, bool, string}> $projectExtensionFiles
710
+ * @param array<string, string> $currentFileHashes
705
711
* @param mixed[] $meta
706
712
*/
707
713
private function save (
@@ -714,6 +720,7 @@ private function save(
714
720
array $ dependencies ,
715
721
array $ exportedNodes ,
716
722
array $ projectExtensionFiles ,
723
+ array $ currentFileHashes ,
717
724
array $ meta ,
718
725
): void
719
726
{
@@ -723,7 +730,7 @@ private function save(
723
730
foreach ($ fileDependencies as $ fileDep ) {
724
731
if (!array_key_exists ($ fileDep , $ invertedDependencies )) {
725
732
$ invertedDependencies [$ fileDep ] = [
726
- 'fileHash ' => $ this ->getFileHash ($ fileDep ),
733
+ 'fileHash ' => $ currentFileHashes [ $ fileDep ] ?? $ this ->getFileHash ($ fileDep ),
727
734
'dependentFiles ' => [],
728
735
];
729
736
unset($ filesNoOneIsDependingOn [$ fileDep ]);
@@ -742,7 +749,7 @@ private function save(
742
749
}
743
750
744
751
$ invertedDependencies [$ file ] = [
745
- 'fileHash ' => $ this ->getFileHash ($ file ),
752
+ 'fileHash ' => $ currentFileHashes [ $ file ] ?? $ this ->getFileHash ($ file ),
746
753
'dependentFiles ' => [],
747
754
];
748
755
}
0 commit comments