diff --git a/src/Composer/Repository/ArtifactRepository.php b/src/Composer/Repository/ArtifactRepository.php index 7910d62f7..869e4757f 100644 --- a/src/Composer/Repository/ArtifactRepository.php +++ b/src/Composer/Repository/ArtifactRepository.php @@ -47,7 +47,11 @@ class ArtifactRepository extends ArrayRepository private function scanDirectory($path) { $io = $this->io; - foreach (new \RecursiveDirectoryIterator($path) as $file) { + + $directory = new \RecursiveDirectoryIterator($path); + $iterator = new \RecursiveIteratorIterator($directory); + $regex = new \RegexIterator($iterator, '/^.+\.(zip|phar)$/i'); + foreach ($regex as $file) { /* @var $file \SplFileInfo */ if (!$file->isFile()) { continue; diff --git a/tests/Composer/Test/Repository/ArtifactRepositoryTest.php b/tests/Composer/Test/Repository/ArtifactRepositoryTest.php index ac1bcbbe4..5ffae515a 100644 --- a/tests/Composer/Test/Repository/ArtifactRepositoryTest.php +++ b/tests/Composer/Test/Repository/ArtifactRepositoryTest.php @@ -25,6 +25,7 @@ class ArtifactRepositoryTest extends TestCase 'vendor0/package0-0.0.1', 'composer/composer-1.0.0-alpha6', 'vendor1/package2-4.3.2', + 'vendor3/package1-5.4.3', ); $coordinates = array('type' => 'artifact', 'url' => __DIR__ . '/Fixtures/artifacts'); diff --git a/tests/Composer/Test/Repository/Fixtures/artifacts/subfolder/not-an-artifact.zip b/tests/Composer/Test/Repository/Fixtures/artifacts/subfolder/not-an-artifact.zip new file mode 100644 index 000000000..3e788dcc2 Binary files /dev/null and b/tests/Composer/Test/Repository/Fixtures/artifacts/subfolder/not-an-artifact.zip differ diff --git a/tests/Composer/Test/Repository/Fixtures/artifacts/subfolder/package1.zip b/tests/Composer/Test/Repository/Fixtures/artifacts/subfolder/package1.zip new file mode 100644 index 000000000..a2d96c387 Binary files /dev/null and b/tests/Composer/Test/Repository/Fixtures/artifacts/subfolder/package1.zip differ