diff --git a/src/Symfony/Component/Config/Resource/DirectoryResource.php b/src/Symfony/Component/Config/Resource/DirectoryResource.php index 7ae5694ff0..e403725d6a 100644 --- a/src/Symfony/Component/Config/Resource/DirectoryResource.php +++ b/src/Symfony/Component/Config/Resource/DirectoryResource.php @@ -68,7 +68,10 @@ class DirectoryResource implements ResourceInterface, \Serializable return false; } - $newestMTime = filemtime($this->resource); + if ($timestamp < filemtime($this->resource)) { + return false; + } + foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($this->resource), \RecursiveIteratorIterator::SELF_FIRST) as $file) { // if regex filtering is enabled only check matching files if ($this->pattern && $file->isFile() && !preg_match($this->pattern, $file->getBasename())) { @@ -81,10 +84,13 @@ class DirectoryResource implements ResourceInterface, \Serializable continue; } - $newestMTime = max($file->getMTime(), $newestMTime); + // early return if a file's mtime exceeds the passed timestamp + if ($timestamp < $file->getMTime()) { + return false; + } } - return $newestMTime < $timestamp; + return true; } public function serialize() diff --git a/src/Symfony/Component/Config/Tests/Resource/DirectoryResourceTest.php b/src/Symfony/Component/Config/Tests/Resource/DirectoryResourceTest.php index 0e64b4ce80..7117e4389b 100644 --- a/src/Symfony/Component/Config/Tests/Resource/DirectoryResourceTest.php +++ b/src/Symfony/Component/Config/Tests/Resource/DirectoryResourceTest.php @@ -96,8 +96,10 @@ class DirectoryResourceTest extends \PHPUnit_Framework_TestCase public function testIsFreshDeleteFile() { $resource = new DirectoryResource($this->directory); + $time = time(); + sleep(1); unlink($this->directory.'/tmp.xml'); - $this->assertFalse($resource->isFresh(time()), '->isFresh() returns false if an existing file is removed'); + $this->assertFalse($resource->isFresh($time), '->isFresh() returns false if an existing file is removed'); } public function testIsFreshDeleteDirectory()