Merge branch '2.3' into 2.7
* 2.3: [Finder] Handle filtering of recursive iterators and use it to skip looping over excluded directories Exclude files based on path before applying the sorting [Console] fix phpdoc of DialogHelper
This commit is contained in:
commit
c67e8b26b3
@ -399,7 +399,7 @@ class DialogHelper extends InputAwareHelper
|
|||||||
/**
|
/**
|
||||||
* Returns the helper's input stream.
|
* Returns the helper's input stream.
|
||||||
*
|
*
|
||||||
* @return string
|
* @return resource|null The input stream or null if the default STDIN is used
|
||||||
*/
|
*/
|
||||||
public function getInputStream()
|
public function getInputStream()
|
||||||
{
|
{
|
||||||
|
@ -31,10 +31,13 @@ class PhpAdapter extends AbstractAdapter
|
|||||||
$flags |= \RecursiveDirectoryIterator::FOLLOW_SYMLINKS;
|
$flags |= \RecursiveDirectoryIterator::FOLLOW_SYMLINKS;
|
||||||
}
|
}
|
||||||
|
|
||||||
$iterator = new \RecursiveIteratorIterator(
|
$iterator = new Iterator\RecursiveDirectoryIterator($dir, $flags, $this->ignoreUnreadableDirs);
|
||||||
new Iterator\RecursiveDirectoryIterator($dir, $flags, $this->ignoreUnreadableDirs),
|
|
||||||
\RecursiveIteratorIterator::SELF_FIRST
|
if ($this->exclude) {
|
||||||
);
|
$iterator = new Iterator\ExcludeDirectoryFilterIterator($iterator, $this->exclude);
|
||||||
|
}
|
||||||
|
|
||||||
|
$iterator = new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::SELF_FIRST);
|
||||||
|
|
||||||
if ($this->minDepth > 0 || $this->maxDepth < PHP_INT_MAX) {
|
if ($this->minDepth > 0 || $this->maxDepth < PHP_INT_MAX) {
|
||||||
$iterator = new Iterator\DepthRangeFilterIterator($iterator, $this->minDepth, $this->maxDepth);
|
$iterator = new Iterator\DepthRangeFilterIterator($iterator, $this->minDepth, $this->maxDepth);
|
||||||
@ -44,10 +47,6 @@ class PhpAdapter extends AbstractAdapter
|
|||||||
$iterator = new Iterator\FileTypeFilterIterator($iterator, $this->mode);
|
$iterator = new Iterator\FileTypeFilterIterator($iterator, $this->mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->exclude) {
|
|
||||||
$iterator = new Iterator\ExcludeDirectoryFilterIterator($iterator, $this->exclude);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->names || $this->notNames) {
|
if ($this->names || $this->notNames) {
|
||||||
$iterator = new Iterator\FilenameFilterIterator($iterator, $this->names, $this->notNames);
|
$iterator = new Iterator\FilenameFilterIterator($iterator, $this->names, $this->notNames);
|
||||||
}
|
}
|
||||||
@ -68,15 +67,15 @@ class PhpAdapter extends AbstractAdapter
|
|||||||
$iterator = new Iterator\CustomFilterIterator($iterator, $this->filters);
|
$iterator = new Iterator\CustomFilterIterator($iterator, $this->filters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($this->paths || $this->notPaths) {
|
||||||
|
$iterator = new Iterator\PathFilterIterator($iterator, $this->paths, $this->notPaths);
|
||||||
|
}
|
||||||
|
|
||||||
if ($this->sort) {
|
if ($this->sort) {
|
||||||
$iteratorAggregate = new Iterator\SortableIterator($iterator, $this->sort);
|
$iteratorAggregate = new Iterator\SortableIterator($iterator, $this->sort);
|
||||||
$iterator = $iteratorAggregate->getIterator();
|
$iterator = $iteratorAggregate->getIterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->paths || $this->notPaths) {
|
|
||||||
$iterator = new Iterator\PathFilterIterator($iterator, $this->paths, $this->notPaths);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $iterator;
|
return $iterator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,8 +18,18 @@ namespace Symfony\Component\Finder\Iterator;
|
|||||||
*
|
*
|
||||||
* @author Alex Bogomazov
|
* @author Alex Bogomazov
|
||||||
*/
|
*/
|
||||||
abstract class FilterIterator extends \FilterIterator
|
abstract class FilterIterator extends \FilterIterator implements \RecursiveIterator
|
||||||
{
|
{
|
||||||
|
public function hasChildren()
|
||||||
|
{
|
||||||
|
return $this->getInnerIterator() instanceof \RecursiveIterator && $this->getInnerIterator()->hasChildren();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getChildren()
|
||||||
|
{
|
||||||
|
return $this->getInnerIterator()->getChildren();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is a workaround for the problem with \FilterIterator leaving inner \FilesystemIterator in wrong state after
|
* This is a workaround for the problem with \FilterIterator leaving inner \FilesystemIterator in wrong state after
|
||||||
* rewind in some cases.
|
* rewind in some cases.
|
||||||
|
Reference in New Issue
Block a user