From 36d7efb95c40965c85fe3c0ea0f7f4be61f82f6b Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Wed, 14 Apr 2010 05:36:56 +0000 Subject: [PATCH] BUGFIX #4974: Improve accuracy of ManifestBuilder::parse_file() cache, to remove a source of upgrade bugs. (from r99738) git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@102877 467b73ca-7a2a-4603-9d3b-597d59a354a9 --- core/ManifestBuilder.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/core/ManifestBuilder.php b/core/ManifestBuilder.php index 0563ad838..ee0ce8fb4 100644 --- a/core/ManifestBuilder.php +++ b/core/ManifestBuilder.php @@ -414,9 +414,12 @@ class ManifestBuilder { if(!$file) return; // We cache the parse results of each file, since only a few files will have changed between flushings - // And, although it's accurate, TokenisedRegularExpression isn't particularly fast - $parseCacheFile = TEMP_FOLDER . "/manifestClassParse-" . str_replace(array("/",":", "\\"),"_", realpath($filename)); - if(!file_exists($parseCacheFile) || filemtime($parseCacheFile) < filemtime($filename)) { + // And, although it's accurate, TokenisedRegularExpression isn't particularly fast. + // We use an MD5 of the file as a part of the cache key because using datetime caused problems when users + // were upgrading their sites + $fileMD5 = md5($file); + $parseCacheFile = TEMP_FOLDER . "/manifestClassParse-" . str_replace(array("/",":", "\\"),"_", realpath($filename)) . "-$fileMD5"; + if(!file_exists($parseCacheFile)) { $tokens = token_get_all($file); $classes = self::getClassDefParser()->findAll($tokens); $interfaces = self::getInterfaceDefParser()->findAll($tokens);