Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 44a16fc

Browse filesBrowse files
committed
[Finder] fixed exclude iterator (now only match with the relative path)
1 parent c605d7f commit 44a16fc
Copy full SHA for 44a16fc

File tree

Expand file treeCollapse file tree

4 files changed

+40
-19
lines changed
Filter options
Expand file treeCollapse file tree

4 files changed

+40
-19
lines changed

‎src/Symfony/Components/Finder/Iterator/DepthRangeFilterIterator.php

Copy file name to clipboardExpand all lines: src/Symfony/Components/Finder/Iterator/DepthRangeFilterIterator.php
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ class DepthRangeFilterIterator extends \FilterIterator
2525
/**
2626
* Constructor.
2727
*
28-
* @param \Iterator $iterator The Iterator to filter
29-
* @param array $comparators An array of \NumberComparator instances
28+
* @param \RecursiveIteratorIterator $iterator The Iterator to filter
29+
* @param array $comparators An array of \NumberComparator instances
3030
*/
3131
public function __construct(\RecursiveIteratorIterator $iterator, array $comparators)
3232
{

‎src/Symfony/Components/Finder/Iterator/ExcludeDirectoryFilterIterator.php

Copy file name to clipboardExpand all lines: src/Symfony/Components/Finder/Iterator/ExcludeDirectoryFilterIterator.php
+7-8Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public function __construct(\Iterator $iterator, array $directories)
3232
{
3333
$this->patterns = array();
3434
foreach ($directories as $directory) {
35-
$this->patterns[] = '#/'.preg_quote($directory, '#').'(/|$)#';
35+
$this->patterns[] = '#(^|/)'.preg_quote($directory, '#').'(/|$)#';
3636
}
3737

3838
parent::__construct($iterator);
@@ -45,15 +45,14 @@ public function __construct(\Iterator $iterator, array $directories)
4545
*/
4646
public function accept()
4747
{
48-
$fileinfo = $this->getInnerIterator()->current();
48+
$inner = $this;
49+
while ($inner && !$inner->getInnerIterator() instanceof \RecursiveIteratorIterator) {
50+
$inner = $inner->getInnerIterator();
51+
}
4952

5053
foreach ($this->patterns as $pattern) {
51-
$path = $fileinfo->getPathname();
52-
if ($fileinfo->isDir()) {
53-
$path .= '/';
54-
}
55-
56-
if (preg_match($pattern, $path)) {
54+
$method = $inner->current()->isDir() ? 'getSubPathname' : 'getSubPath';
55+
if (preg_match($pattern, $this->getInnerIterator()->$method())) {
5756
return false;
5857
}
5958
}

‎tests/Symfony/Tests/Components/Finder/Iterator/ExcludeDirectoryFileIteratorTest.php

Copy file name to clipboardExpand all lines: tests/Symfony/Tests/Components/Finder/Iterator/ExcludeDirectoryFileIteratorTest.php
+19-5Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,16 @@
1313

1414
use Symfony\Components\Finder\Iterator\ExcludeDirectoryFilterIterator;
1515

16-
require_once __DIR__.'/IteratorTestCase.php';
16+
require_once __DIR__.'/RealIteratorTestCase.php';
1717

18-
class ExcludeDirectoryFilterIteratorTest extends IteratorTestCase
18+
class ExcludeDirectoryFilterIteratorTest extends RealIteratorTestCase
1919
{
2020
/**
2121
* @dataProvider getAcceptData
2222
*/
2323
public function testAccept($directories, $expected)
2424
{
25-
$inner = new Iterator(array('/foo/test.php', '/foo/test.py', '/bar/foo.php'));
25+
$inner = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator(sys_get_temp_dir().'/symfony2_finder', \FilesystemIterator::SKIP_DOTS), \RecursiveIteratorIterator::SELF_FIRST);
2626

2727
$iterator = new ExcludeDirectoryFilterIterator($inner, $directories);
2828

@@ -31,9 +31,23 @@ public function testAccept($directories, $expected)
3131

3232
public function getAcceptData()
3333
{
34+
$tmpDir = sys_get_temp_dir().'/symfony2_finder';
35+
3436
return array(
35-
array(array('foo'), array('/bar/foo.php')),
36-
array(array('fo'), array('/foo/test.php', '/foo/test.py', '/bar/foo.php')),
37+
array(array('foo'), array(
38+
$tmpDir.'/.git',
39+
$tmpDir.'/test.py',
40+
$tmpDir.'/test.php',
41+
$tmpDir.'/toto'
42+
)),
43+
array(array('fo'), array(
44+
$tmpDir.'/.git',
45+
$tmpDir.'/test.py',
46+
$tmpDir.'/foo',
47+
$tmpDir.'/foo/bar.tmp',
48+
$tmpDir.'/test.php',
49+
$tmpDir.'/toto'
50+
)),
3751
);
3852
}
3953
}

‎tests/Symfony/Tests/Components/Finder/Iterator/IgnoreVcsFilterIteratorTest.php

Copy file name to clipboardExpand all lines: tests/Symfony/Tests/Components/Finder/Iterator/IgnoreVcsFilterIteratorTest.php
+12-4Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,24 @@
1313

1414
use Symfony\Components\Finder\Iterator\IgnoreVcsFilterIterator;
1515

16-
require_once __DIR__.'/IteratorTestCase.php';
16+
require_once __DIR__.'/RealIteratorTestCase.php';
1717

18-
class IgnoreVcsFilterIteratorTest extends IteratorTestCase
18+
class IgnoreVcsFilterIteratorTest extends RealIteratorTestCase
1919
{
2020
public function testAccept()
2121
{
22-
$inner = new Iterator(array('/.git/test.php', '/foo/test.py', '/bar/foo.php'));
22+
$inner = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator(sys_get_temp_dir().'/symfony2_finder', \FilesystemIterator::SKIP_DOTS), \RecursiveIteratorIterator::SELF_FIRST);
23+
//$inner = new Iterator(array('/.git/test.php', '/foo/test.py', '/bar/foo.php'));
2324

2425
$iterator = new IgnoreVcsFilterIterator($inner);
26+
$tmpDir = sys_get_temp_dir().'/symfony2_finder';
2527

26-
$this->assertIterator(array('/foo/test.py', '/bar/foo.php'), $iterator);
28+
$this->assertIterator(array(
29+
$tmpDir.'/test.py',
30+
$tmpDir.'/foo',
31+
$tmpDir.'/foo/bar.tmp',
32+
$tmpDir.'/test.php',
33+
$tmpDir.'/toto'
34+
), $iterator);
2735
}
2836
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.