[Config] moved DirectoryResource childs retrieving to the special getFilteredChilds method

This commit is contained in:
everzet 2011-11-19 10:50:13 +01:00
parent 45df2e681e
commit 6b39688586
2 changed files with 42 additions and 16 deletions

View File

@ -33,6 +33,46 @@ class DirectoryResource implements ResourceInterface, \Serializable
$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 @@ class DirectoryResource implements ResourceInterface, \Serializable
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);
}

View File

@ -161,6 +161,7 @@ class DirectoryResourceTest extends \PHPUnit_Framework_TestCase
/**
* @covers Symfony\Component\Config\Resource\DirectoryResource::isFresh
* @covers Symfony\Component\Config\Resource\DirectoryResource::getFilteredChilds
*/
public function testFilterRegexListNoMatch()
{