8000 [Finder] Handle filtering of recursive iterators and use it to skip l… · symfony/symfony@8c691bd · GitHub
[go: up one dir, main page]

Skip to content

Commit 8c691bd

Browse files
nicolas-grekasfabpot
authored andcommitted
[Finder] Handle filtering of recursive iterators and use it to skip looping over excluded directories
1 parent 306d88a commit 8c691bd

File tree

2 files changed

+18
-9
lines changed

2 files changed

+18
-9
lines changed

src/Symfony/Component/Finder/Adapter/PhpAdapter.php

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,13 @@ public function searchInDirectory($dir)
3131
$flags |= \RecursiveDirectoryIterator::FOLLOW_SYMLINKS;
3232
}
3333

34-
$iterator = new \RecursiveIteratorIterator(
35-
new Iterator\RecursiveDirectoryIterator($dir, $flags, $this->ignoreUnreadableDirs),
36-
\RecursiveIteratorIterator::SELF_FIRST
37-
);
34+
$iterator = new Iterator\RecursiveDirectoryIterator($dir, $flags, $this->ignoreUnreadableDirs);
35+
36+
if ($this->exclude) {
37+
$iterator = new Iterator\ExcludeDirectoryFilterIterator($iterator, $this->exclude);
38+
}
39+
40+
$iterator = new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::SELF_FIRST);
3841

3942
if ($this->minDepth > 0 || $this->maxDepth < PHP_INT_MAX) {
4043
$iterator = new Iterator\DepthRangeFilterIterator($iterator, $this->minDepth, $this->maxDepth);
@@ -44,10 +47,6 @@ public function searchInDirectory($dir)
4447
$iterator = new Iterator\FileTypeFilterIterator($iterator, $this->mode);
4548
}
4649

47-
if ($this->exclude) {
48-
$iterator = new Iterator\ExcludeDirectoryFilterIterator($iterator, $this->exclude);
49-
}
50-
5150
if ($this->names || $this->notNames) {
5251
$iterator = new Iterator\FilenameFilterIterator($iterator, $this->names, $this->notNames);
5352
}

src/Symfony/Component/Finder/Iterator/FilterIterator.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,18 @@
1818
*
1919
* @author Alex Bogomazov
2020
*/
21-
abstract class FilterIterator extends \FilterIterator
21+
abstract class FilterIterator extends \FilterIterator implements \RecursiveIterator
2222
{
23+
public function hasChildren()
24+
{
25+
return $this->getInnerIterator() instanceof \RecursiveIterator && $this->getInnerIterator()->hasChildren();
26+
}
27+
28+
public function getChildren()
29+
{
30+
return $this->getInnerIterator()->getChildren();
31+
}
32+
2333
/**
2434
* This is a workaround for the problem with \FilterIterator leaving inner \FilesystemIterator in wrong state after
2535
* rewind in some cases.

0 commit comments

Comments
 (0)
0