From 6b396885861cd1836d1031e157170b3bd54fb150 Mon Sep 17 00:00:00 2001 From: everzet Date: Sat, 19 Nov 2011 10:50:13 +0100 Subject: [PATCH] [Config] moved DirectoryResource childs retrieving to the special getFilteredChilds method --- .../Config/Resource/DirectoryResource.php | 57 +++++++++++++------ .../Tests/Resource/DirectoryResourceTest.php | 1 + 2 files changed, 42 insertions(+), 16 deletions(-) diff --git a/src/Symfony/Component/Config/Resource/DirectoryResource.php b/src/Symfony/Component/Config/Resource/DirectoryResource.php index 021523963e70..1818f6da9fbb 100644 --- a/src/Symfony/Component/Config/Resource/DirectoryResource.php +++ b/src/Symfony/Component/Config/Resource/DirectoryResource.php @@ -33,6 +33,46 @@ public function __construct($resource, $pattern = null) $this->pattern = $pattern; } + /** + * Returns the list of filtered file and directory childs of directory resource. + * + * @param Boolean $recursive search for files recursive + * + * @return array An array of files + */ + public function getFilteredChilds($recursive = true) + { + $iterator = $recursive + ? new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($this->resource), \RecursiveIteratorIterator::SELF_FIRST) + : new \DirectoryIterator($this->resource); + + $childs = array(); + foreach ($iterator as $file) { + // if regex filtering is enabled only return matching files + if (isset($this->filterRegexList) && $file->isFile()) { + $regexMatched = false; + foreach ($this->filterRegexList as $regex) { + if (preg_match($regex, (string) $file)) { + $regexMatched = true; + } + } + if (!$regexMatched) { + continue; + } + } + + // always monitor directories for changes, except the .. entries + // (otherwise deleted files wouldn't get detected) + if ($file->isDir() && '/..' === substr($file, -3)) { + continue; + } + + $childs[] = $file; + } + + return $childs; + } + /** * Returns a string representation of the Resource. * @@ -66,24 +106,9 @@ public function getPattern() public function getModificationTime() { clearstatcache(true, $this->resource); - - if (!is_dir($this->resource)) { - return false; - } - $newestMTime = filemtime($this->resource); - 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())) { - continue; - } - - // always monitor directories for changes, except the .. entries - // (otherwise deleted files wouldn't get detected) - if ($file->isDir() && '/..' === substr($file, -3)) { - continue; - } + foreach ($this->getFilteredChilds() as $file) { clearstatcache(true, (string) $file); $newestMTime = max($file->getMTime(), $newestMTime); } diff --git a/src/Symfony/Component/Config/Tests/Resource/DirectoryResourceTest.php b/src/Symfony/Component/Config/Tests/Resource/DirectoryResourceTest.php index 98714289a116..3345b451a3b2 100644 --- a/src/Symfony/Component/Config/Tests/Resource/DirectoryResourceTest.php +++ b/src/Symfony/Component/Config/Tests/Resource/DirectoryResourceTest.php @@ -161,6 +161,7 @@ public function testIsFreshModifySubdirectory() /** * @covers Symfony\Component\Config\Resource\DirectoryResource::isFresh + * @covers Symfony\Component\Config\Resource\DirectoryResource::getFilteredChilds */ public function testFilterRegexListNoMatch() {