From bac9f4226a2a68336a5c15adb8d3dfeec89c3ee8 Mon Sep 17 00:00:00 2001 From: Sebastian Bergmann Date: Sat, 8 Feb 2025 09:43:29 +0100 Subject: [PATCH 1/2] Update tools --- .phive/phars.xml | 4 ++-- tools/composer | Bin 3063028 -> 3060478 bytes tools/php-cs-fixer | Bin 3247042 -> 3248666 bytes 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.phive/phars.xml b/.phive/phars.xml index 4d092a33..da39c81e 100644 --- a/.phive/phars.xml +++ b/.phive/phars.xml @@ -1,6 +1,6 @@ - + - + diff --git a/tools/composer b/tools/composer index b59d7e1062a6d30e44d75cf6520c60abd8f92fa7..4fa5122674b5547ffb636d45baf8677227f4eef6 100755 GIT binary patch delta 12531 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 From 89e694721a7721fccf4cc665dd3d75049984e97a Mon Sep 17 00:00:00 2001 From: Sebastian Bergmann Date: Sat, 8 Feb 2025 09:52:03 +0100 Subject: [PATCH 2/2] Use Version::id() instead of "MD5 over source code" for encoding static analysis cache format in cache keys for static analysis cache This means that cached static analysis results will be treated as outdated when a new/different version of php-code-coverage is used even if the static analysis code has not changed. Optimizing this edge case for performance is not worth risking errors in the code for calculating the "MD5 over source code" that we previously used for this. --- ChangeLog-10.1.md | 7 +++++++ src/StaticAnalysis/CachingFileAnalyser.php | 23 ++-------------------- 2 files changed, 9 insertions(+), 21 deletions(-) diff --git a/ChangeLog-10.1.md b/ChangeLog-10.1.md index 27cb92fb..7e254220 100644 --- a/ChangeLog-10.1.md +++ b/ChangeLog-10.1.md @@ -2,6 +2,12 @@ All notable changes are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. +## [10.1.17] - 2025-MM-DD + +### Changed + +* Changed version identifier for static analysis cache from "MD5 over source code" to `Version::id()` + ## [10.1.16] - 2024-08-22 ### Changed @@ -113,6 +119,7 @@ All notable changes are documented in this file using the [Keep a CHANGELOG](htt * The `SebastianBergmann\CodeCoverage\Filter::includeDirectory()`, `SebastianBergmann\CodeCoverage\Filter::excludeDirectory()`, and `SebastianBergmann\CodeCoverage\Filter::excludeFile()` methods are now deprecated +[10.1.17]: https://github.com/sebastianbergmann/php-code-coverage/compare/10.1.16...10.1 [10.1.16]: https://github.com/sebastianbergmann/php-code-coverage/compare/10.1.15...10.1.16 [10.1.15]: https://github.com/sebastianbergmann/php-code-coverage/compare/10.1.14...10.1.15 [10.1.14]: https://github.com/sebastianbergmann/php-code-coverage/compare/10.1.13...10.1.14 diff --git a/src/StaticAnalysis/CachingFileAnalyser.php b/src/StaticAnalysis/CachingFileAnalyser.php index 2ce4d604..3512b4b5 100644 --- a/src/StaticAnalysis/CachingFileAnalyser.php +++ b/src/StaticAnalysis/CachingFileAnalyser.php @@ -17,7 +17,7 @@ use function serialize; use function unserialize; use SebastianBergmann\CodeCoverage\Util\Filesystem; -use SebastianBergmann\FileIterator\Facade as FileIteratorFacade; +use SebastianBergmann\CodeCoverage\Version; /** * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage @@ -26,7 +26,6 @@ */ final class CachingFileAnalyser implements FileAnalyser { - private static ?string $cacheVersion = null; private readonly string $directory; private readonly FileAnalyser $analyser; private readonly bool $useAnnotationsForIgnoringCode; @@ -152,7 +151,7 @@ private function cacheFile(string $filename): string [ $filename, file_get_contents($filename), - self::cacheVersion(), + Version::id(), $this->useAnnotationsForIgnoringCode, $this->ignoreDeprecatedCode, ], @@ -161,22 +160,4 @@ private function cacheFile(string $filename): string return $this->directory . DIRECTORY_SEPARATOR . $cacheKey; } - - private static function cacheVersion(): string - { - if (self::$cacheVersion !== null) { - return self::$cacheVersion; - } - - $buffer = []; - - foreach ((new FileIteratorFacade)->getFilesAsArray(__DIR__, '.php') as $file) { - $buffer[] = $file; - $buffer[] = file_get_contents($file); - } - - self::$cacheVersion = md5(implode("\0", $buffer)); - - return self::$cacheVersion; - } }