From 96107e21f14df1d31b3593e2a1df6dd5c24305dc Mon Sep 17 00:00:00 2001 From: Rob Frawley 2nd Date: Sun, 29 Jan 2017 16:51:59 -0500 Subject: [PATCH 1/2] return false early from directory resource --- .../Component/Config/Resource/DirectoryResource.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Config/Resource/DirectoryResource.php b/src/Symfony/Component/Config/Resource/DirectoryResource.php index 7ae5694ff0..6fe36793e1 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() From d5746ecfd283dafae14d0b8025461e88cf61dd5b Mon Sep 17 00:00:00 2001 From: Rob Frawley 2nd Date: Mon, 30 Jan 2017 13:31:59 -0500 Subject: [PATCH 2/2] fix directory resource considers same timestamp not fresh --- src/Symfony/Component/Config/Resource/DirectoryResource.php | 4 ++-- .../Component/Config/Tests/Resource/DirectoryResourceTest.php | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Config/Resource/DirectoryResource.php b/src/Symfony/Component/Config/Resource/DirectoryResource.php index 6fe36793e1..e403725d6a 100644 --- a/src/Symfony/Component/Config/Resource/DirectoryResource.php +++ b/src/Symfony/Component/Config/Resource/DirectoryResource.php @@ -68,7 +68,7 @@ class DirectoryResource implements ResourceInterface, \Serializable return false; } - if ($timestamp <= filemtime($this->resource)) { + if ($timestamp < filemtime($this->resource)) { return false; } @@ -85,7 +85,7 @@ class DirectoryResource implements ResourceInterface, \Serializable } // early return if a file's mtime exceeds the passed timestamp - if ($timestamp <= $file->getMTime()) { + if ($timestamp < $file->getMTime()) { return false; } } 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()