From 55f354f8f4a0042450e2cfba38e7ad7333151de3 Mon Sep 17 00:00:00 2001 From: Bryan Davis Date: Sun, 10 Jul 2016 17:52:52 -0600 Subject: [PATCH] Always prepend repositories Follow up to 9645a93 that makes the use of RepositoryManager::prependRepository() the default behavior for all repository merges. This ensures that repos added by the included/required config files to have a higher priority than the repos added in the root composer.json and most importantly higher than the default packagist repo. Closes #95 --- README.md | 2 ++ composer.json | 2 +- src/Merge/ExtraPackage.php | 32 +++++-------------- src/Merge/PluginState.php | 19 ----------- tests/phpunit/MergePluginTest.php | 5 ++- .../testPrependRepositories/composer.json | 3 +- 6 files changed, 14 insertions(+), 49 deletions(-) diff --git a/README.md b/README.md index 528403c..2fe70e3 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,8 @@ extensions which may be managed via Composer. Installation ------------ +Composer Merge Plugin requires Composer 1.0.0 or newer. + ``` $ composer require wikimedia/composer-merge-plugin ``` diff --git a/composer.json b/composer.json index dce70e7..e504c91 100644 --- a/composer.json +++ b/composer.json @@ -16,7 +16,7 @@ "php": ">=5.3.2" }, "require-dev": { - "composer/composer": "1.0.*@dev", + "composer/composer": "~1.0.0", "jakub-onderka/php-parallel-lint": "~0.8", "phpunit/phpunit": "~4.8|~5.0", "squizlabs/php_codesniffer": "~2.1.0" diff --git a/src/Merge/ExtraPackage.php b/src/Merge/ExtraPackage.php index 70b77c6..c65f5d4 100644 --- a/src/Merge/ExtraPackage.php +++ b/src/Merge/ExtraPackage.php @@ -152,7 +152,7 @@ protected function loadPackage(array $json) */ public function mergeInto(RootPackageInterface $root, PluginState $state) { - $this->addRepositories($root, $state->shouldPrependRepositories()); + $this->prependRepositories($root); $this->mergeRequires('require', $root, $state); @@ -191,9 +191,8 @@ public function mergeDevInto(RootPackageInterface $root, PluginState $state) * to the given package and the global repository manager. * * @param RootPackageInterface $root - * @param bool $prepend Should repositories be prepended to repository manager. */ - protected function addRepositories(RootPackageInterface $root, $prepend) + protected function prependRepositories(RootPackageInterface $root) { if (!isset($this->json['repositories'])) { return; @@ -205,35 +204,20 @@ protected function addRepositories(RootPackageInterface $root, $prepend) if (!isset($repoJson['type'])) { continue; } - if ($prepend) { - $this->logger->info("Prepending {$repoJson['type']} repository"); - } else { - $this->logger->info("Adding {$repoJson['type']} repository"); - } + $this->logger->info("Prepending {$repoJson['type']} repository"); $repo = $repoManager->createRepository( $repoJson['type'], $repoJson ); - if ($prepend) { - $repoManager->prependRepository($repo); - } else { - $repoManager->addRepository($repo); - } + $repoManager->prependRepository($repo); $newRepos[] = $repo; } $unwrapped = self::unwrapIfNeeded($root, 'setRepositories'); - if ($prepend) { - $unwrapped->setRepositories(array_merge( - $newRepos, - $root->getRepositories() - )); - } else { - $unwrapped->setRepositories(array_merge( - $root->getRepositories(), - $newRepos - )); - } + $unwrapped->setRepositories(array_merge( + $newRepos, + $root->getRepositories() + )); } /** diff --git a/src/Merge/PluginState.php b/src/Merge/PluginState.php index 68e2ec2..ef9e3fc 100644 --- a/src/Merge/PluginState.php +++ b/src/Merge/PluginState.php @@ -74,13 +74,6 @@ class PluginState */ protected $mergeExtra = false; - /** - * Whether to prepend repositories to repository manager. - * - * @var bool $prependRepositories - */ - protected $prependRepositories = false; - /** * Whether to merge the extra section in a deep / recursive way. * @@ -139,7 +132,6 @@ public function loadSettings() 'require' => array(), 'recurse' => true, 'replace' => false, - 'prepend-repositories' => false, 'merge-dev' => true, 'merge-extra' => false, 'merge-extra-deep' => false, @@ -153,7 +145,6 @@ public function loadSettings() $config['require'] : array($config['require']); $this->recurse = (bool)$config['recurse']; $this->replace = (bool)$config['replace']; - $this->prependRepositories = (bool)$config['prepend-repositories']; $this->mergeDev = (bool)$config['merge-dev']; $this->mergeExtra = (bool)$config['merge-extra']; $this->mergeExtraDeep = (bool)$config['merge-extra-deep']; @@ -353,16 +344,6 @@ public function shouldMergeExtra() return $this->mergeExtra; } - /** - * Should the merger prepend repositories to repository manager (instead of adding them to end of the list). - * - * @return bool - */ - public function shouldPrependRepositories() - { - return $this->prependRepositories; - } - /** * Should the extra section be merged deep / recursively? * diff --git a/tests/phpunit/MergePluginTest.php b/tests/phpunit/MergePluginTest.php index 5ae166d..84ff9ed 100644 --- a/tests/phpunit/MergePluginTest.php +++ b/tests/phpunit/MergePluginTest.php @@ -348,7 +348,7 @@ function ($args) use ($that, $io) { ); } ); - $repoManager->addRepository(Argument::any())->will( + $repoManager->prependRepository(Argument::any())->will( function ($args) use ($that) { $that->assertInstanceOf( 'Composer\Repository\VcsRepository', @@ -396,7 +396,6 @@ function ($args) use ($that) { /** * Given a root package with an extra section - * and prepend-repositories mode is active * and a composer.local.json with a repository * When the plugin is run * Then the repository from composer.local.json should be prepended to root package repository list @@ -857,7 +856,7 @@ public function testHasBranchAlias($fireInit) new \Composer\Config() ); }); - $repoManager->addRepository(Argument::any())->shouldBeCalled(); + $repoManager->prependRepository(Argument::any())->shouldBeCalled(); $this->composer->getRepositoryManager()->will( function () use ($repoManager) { return $repoManager->reveal(); diff --git a/tests/phpunit/fixtures/testPrependRepositories/composer.json b/tests/phpunit/fixtures/testPrependRepositories/composer.json index c77d816..07c3a46 100644 --- a/tests/phpunit/fixtures/testPrependRepositories/composer.json +++ b/tests/phpunit/fixtures/testPrependRepositories/composer.json @@ -10,8 +10,7 @@ }, "extra": { "merge-plugin": { - "include": "composer.local.json", - "prepend-repositories": true + "include": "composer.local.json" } } }