From 9021c862375770e7e5b255137ff331af2e9ff261 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Haso=C5=88?= Date: Tue, 6 Mar 2012 10:14:11 +0100 Subject: [PATCH] Added packagist repository as the last repository with the lowest priority --- src/Composer/Factory.php | 39 +++++++++++------ tests/Composer/Test/FactoryTest.php | 65 +++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 13 deletions(-) create mode 100644 tests/Composer/Test/FactoryTest.php diff --git a/src/Composer/Factory.php b/src/Composer/Factory.php index faab0add1..354b6bbdb 100644 --- a/src/Composer/Factory.php +++ b/src/Composer/Factory.php @@ -78,17 +78,7 @@ class Factory $rm = $this->createRepositoryManager($io); // load default repository unless it's explicitly disabled - $loadPackagist = true; - if (isset($packageConfig['repositories'])) { - foreach ($packageConfig['repositories'] as $repo) { - if (isset($repo['packagist']) && $repo['packagist'] === false) { - $loadPackagist = false; - } - } - } - if ($loadPackagist) { - $this->addPackagistRepository($rm); - } + $packageConfig = $this->addPackagistRepository($packageConfig); // load local repository $this->addLocalRepository($rm, $vendorDir); @@ -134,9 +124,32 @@ class Factory $rm->setLocalRepository(new Repository\InstalledFilesystemRepository(new JsonFile($vendorDir.'/.composer/installed.json'))); } - protected function addPackagistRepository(RepositoryManager $rm) + protected function addPackagistRepository(array $packageConfig) { - $rm->addRepository(new Repository\ComposerRepository(array('url' => 'http://packagist.org'))); + $loadPackagist = true; + $packagistConfig = array( + 'type' => 'composer', + 'url' => 'http://packagist.org' + ); + if (isset($packageConfig['repositories'])) { + foreach ($packageConfig['repositories'] as $key => $repo) { + if (isset($repo['packagist'])) { + if (true === $repo['packagist']) { + $packageConfig['repositories'][$key] = $packagistConfig; + } + + $loadPackagist = false; + } + } + } else { + $packageConfig['repositories'] = array(); + } + + if ($loadPackagist) { + $packageConfig['repositories'][] = $packagistConfig; + } + + return $packageConfig; } protected function createDownloadManager(IOInterface $io) diff --git a/tests/Composer/Test/FactoryTest.php b/tests/Composer/Test/FactoryTest.php new file mode 100644 index 000000000..2bb838fef --- /dev/null +++ b/tests/Composer/Test/FactoryTest.php @@ -0,0 +1,65 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Test; + +use Composer\Factory; + +class FactoryTest extends \PHPUnit_Framework_TestCase +{ + /** + * @dataProvider dataAddPackagistRepository + */ + public function testAddPackagistRepository($expected, $config) + { + $factory = new Factory(); + + $ref = new \ReflectionMethod($factory, 'addPackagistRepository'); + $ref->setAccessible(true); + + $this->assertEquals($expected, $ref->invoke($factory, $config)); + } + + public function dataAddPackagistRepository() + { + $f = function() { + $repositories = func_get_args(); + return array('repositories' => $repositories); + }; + + $data = array(); + $data[] = array( + $f(array('type' => 'composer', 'url' => 'http://packagist.org')), + $f() + ); + + $data[] = array( + $f(array('packagist' => false)), + $f(array('packagist' => false)) + ); + + $data[] = array( + $f( + array('type' => 'vcs', 'url' => 'git://github.com/composer/composer.git'), + array('type' => 'composer', 'url' => 'http://packagist.org'), + array('type' => 'pear', 'url' => 'http://pear.composer.org') + ), + $f( + array('type' => 'vcs', 'url' => 'git://github.com/composer/composer.git'), + array('packagist' => true), + array('type' => 'pear', 'url' => 'http://pear.composer.org') + ) + ); + + return $data; + } +}