From d410c9d4bca26fdb9781aebe06c3f64d9899f321 Mon Sep 17 00:00:00 2001 From: kkmuffme <11071985+kkmuffme@users.noreply.github.com> Date: Tue, 15 Nov 2022 10:39:52 +0100 Subject: [PATCH 1/2] improve cache flush debug info and code if cache disabled --- .../Internal/Analyzer/ProjectAnalyzer.php | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php b/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php index 2e1bc2867aa..bd5e6737e92 100644 --- a/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php +++ b/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php @@ -348,15 +348,22 @@ public function __construct( private function clearCacheDirectoryIfConfigOrComposerLockfileChanged(): void { + $cache_directory = $this->config->getCacheDirectory(); + if ($cache_directory === null) { + return; + } + if ($this->project_cache_provider && $this->project_cache_provider->hasLockfileChanged() ) { - $this->progress->debug( - 'Composer lockfile change detected, clearing cache' . "\n" - ); + // we only clear the cache if it actually exists + // if it's not populated yet, we don't clear anything but populate the cache instead + clearstatcache(true, $cache_directory); + if (is_dir($cache_directory)) { + $this->progress->debug( + 'Composer lockfile change detected, clearing cache directory ' . $cache_directory . "\n" + ); - $cache_directory = $this->config->getCacheDirectory(); - if ($cache_directory !== null) { Config::removeCacheDirectory($cache_directory); } @@ -368,12 +375,12 @@ private function clearCacheDirectoryIfConfigOrComposerLockfileChanged(): void } elseif ($this->file_reference_provider->cache && $this->file_reference_provider->cache->hasConfigChanged() ) { - $this->progress->debug( - 'Config change detected, clearing cache' . "\n" - ); + clearstatcache(true, $cache_directory); + if (is_dir($cache_directory)) { + $this->progress->debug( + 'Config change detected, clearing cache directory ' . $cache_directory . "\n" + ); - $cache_directory = $this->config->getCacheDirectory(); - if ($cache_directory !== null) { Config::removeCacheDirectory($cache_directory); } From 17c246b82730d73099f077d4c2fd77df9f7f6bbb Mon Sep 17 00:00:00 2001 From: kkmuffme <11071985+kkmuffme@users.noreply.github.com> Date: Tue, 15 Nov 2022 10:51:44 +0100 Subject: [PATCH 2/2] code style --- src/Psalm/Internal/Analyzer/ProjectAnalyzer.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php b/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php index bd5e6737e92..2bc864fce0d 100644 --- a/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php +++ b/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php @@ -64,6 +64,7 @@ use function array_map; use function array_merge; use function array_shift; +use function clearstatcache; use function cli_set_process_title; use function count; use function defined;