diff --git a/src/Composer/Command/CreateProjectCommand.php b/src/Composer/Command/CreateProjectCommand.php index 622e27787..315983499 100644 --- a/src/Composer/Command/CreateProjectCommand.php +++ b/src/Composer/Command/CreateProjectCommand.php @@ -311,7 +311,7 @@ EOT throw new \InvalidArgumentException('Invalid stability provided ('.$stability.'), must be one of: '.implode(', ', array_keys(BasePackage::$stabilities))); } - $repositorySet = new RepositorySet(array(), array(), $stability); + $repositorySet = new RepositorySet($stability); $repositorySet->addRepository($sourceRepo); $phpVersion = null; diff --git a/src/Composer/Command/InitCommand.php b/src/Composer/Command/InitCommand.php index e4c62ad69..d653ad61c 100644 --- a/src/Composer/Command/InitCommand.php +++ b/src/Composer/Command/InitCommand.php @@ -693,7 +693,7 @@ EOT $key = $minimumStability ?: 'default'; if (!isset($this->repositorySets[$key])) { - $this->repositorySets[$key] = $repositorySet = new RepositorySet(array(), array(), $minimumStability ?: $this->getMinimumStability($input)); + $this->repositorySets[$key] = $repositorySet = new RepositorySet($minimumStability ?: $this->getMinimumStability($input)); $repositorySet->addRepository($this->getRepos()); } diff --git a/src/Composer/Command/ShowCommand.php b/src/Composer/Command/ShowCommand.php index 58cc969b3..3dd75c697 100644 --- a/src/Composer/Command/ShowCommand.php +++ b/src/Composer/Command/ShowCommand.php @@ -541,7 +541,8 @@ EOT $constraint = is_string($version) ? $this->versionParser->parseConstraints($version) : $version; $policy = new DefaultPolicy(); - $repositorySet = new RepositorySet(array(), array(), 'dev'); + $repositorySet = new RepositorySet('dev'); + $repositorySet->allowInstalledRepositories(); $repositorySet->addRepository($repos); $matchedPackage = null; @@ -1194,7 +1195,7 @@ EOT private function getRepositorySet(Composer $composer) { if (!$this->repositorySet) { - $this->repositorySet = new RepositorySet(array(), array(), $composer->getPackage()->getMinimumStability(), $composer->getPackage()->getStabilityFlags()); + $this->repositorySet = new RepositorySet($composer->getPackage()->getMinimumStability(), $composer->getPackage()->getStabilityFlags()); $this->repositorySet->addRepository(new CompositeRepository($composer->getRepositoryManager()->getRepositories())); } diff --git a/src/Composer/Installer.php b/src/Composer/Installer.php index b1ed2db2c..f47d3ec09 100644 --- a/src/Composer/Installer.php +++ b/src/Composer/Installer.php @@ -719,7 +719,7 @@ class Installer $this->fixedRootPackage->setRequires(array()); $this->fixedRootPackage->setDevRequires(array()); - $repositorySet = new RepositorySet($rootAliases, $this->package->getReferences(), $minimumStability, $stabilityFlags, $rootRequires); + $repositorySet = new RepositorySet($minimumStability, $stabilityFlags, $rootAliases, $this->package->getReferences(), $rootRequires); $repositorySet->addRepository(new RootPackageRepository(array($this->fixedRootPackage))); $repositorySet->addRepository($platformRepo); if ($this->additionalFixedRepository) { @@ -873,7 +873,7 @@ class Installer } } - $repositorySet = new RepositorySet(array(), array(), 'dev'); + $repositorySet = new RepositorySet('dev'); $repositorySet->addRepository($lockRepo); $seen = array(); diff --git a/src/Composer/Plugin/PluginManager.php b/src/Composer/Plugin/PluginManager.php index 517b27d7b..a706bf8ad 100644 --- a/src/Composer/Plugin/PluginManager.php +++ b/src/Composer/Plugin/PluginManager.php @@ -158,7 +158,7 @@ class PluginManager $localRepo = $this->composer->getRepositoryManager()->getLocalRepository(); $globalRepo = $this->globalComposer ? $this->globalComposer->getRepositoryManager()->getLocalRepository() : null; - $repositorySet = new RepositorySet(array(), array(), 'dev'); + $repositorySet = new RepositorySet('dev'); $repositorySet->addRepository($localRepo); if ($globalRepo) { $repositorySet->addRepository($globalRepo); diff --git a/src/Composer/Repository/RepositorySet.php b/src/Composer/Repository/RepositorySet.php index f931a17a2..80df9bb1d 100644 --- a/src/Composer/Repository/RepositorySet.php +++ b/src/Composer/Repository/RepositorySet.php @@ -56,8 +56,10 @@ class RepositorySet /** @var bool */ private $locked = false; + /** @var bool */ + private $allowInstalledRepositories = false; - public function __construct(array $rootAliases = array(), array $rootReferences = array(), $minimumStability = 'stable', array $stabilityFlags = array(), array $rootRequires = array()) + public function __construct($minimumStability = 'stable', array $stabilityFlags = array(), array $rootAliases = array(), array $rootReferences = array(), array $rootRequires = array()) { $this->rootAliases = $rootAliases; $this->rootReferences = $rootReferences; @@ -77,6 +79,11 @@ class RepositorySet } } + public function allowInstalledRepositories($allow = true) + { + $this->allowInstalledRepositories = $allow; + } + public function getRootRequires() { return $this->rootRequires; @@ -186,7 +193,7 @@ class RepositorySet $poolBuilder = new PoolBuilder($this->acceptableStabilities, $this->stabilityFlags, $this->rootAliases, $this->rootReferences); foreach ($this->repositories as $repo) { - if ($repo instanceof InstalledRepositoryInterface) { + if ($repo instanceof InstalledRepositoryInterface && !$this->allowInstalledRepositories) { throw new \LogicException('The pool can not accept packages from an installed repository'); } } diff --git a/tests/Composer/Test/DependencyResolver/DefaultPolicyTest.php b/tests/Composer/Test/DependencyResolver/DefaultPolicyTest.php index a2869290e..8a0e5a15a 100644 --- a/tests/Composer/Test/DependencyResolver/DefaultPolicyTest.php +++ b/tests/Composer/Test/DependencyResolver/DefaultPolicyTest.php @@ -36,7 +36,7 @@ class DefaultPolicyTest extends TestCase public function setUp() { - $this->repositorySet = new RepositorySet(array(), array(), 'dev'); + $this->repositorySet = new RepositorySet('dev'); $this->repo = new ArrayRepository; $this->repoLocked = new LockArrayRepository; @@ -144,7 +144,7 @@ class DefaultPolicyTest extends TestCase $this->assertSame($expected, $selected); - $this->repositorySet = new RepositorySet(array(), array(), 'dev'); + $this->repositorySet = new RepositorySet('dev'); $this->repositorySet->addRepository($repo2); $this->repositorySet->addRepository($repo1); @@ -250,7 +250,7 @@ class DefaultPolicyTest extends TestCase $repo->addPackage($packageA = clone $packageA); $repo->addPackage($packageB = clone $packageB); - $repositorySet = new RepositorySet(array(), array(), 'dev'); + $repositorySet = new RepositorySet('dev'); $repositorySet->addRepository($this->repo); $pool = $this->repositorySet->createPoolForPackages(array('vendor-a/replacer', 'vendor-b/replacer'), $this->repoLocked); diff --git a/tests/Composer/Test/DependencyResolver/PoolBuilderTest.php b/tests/Composer/Test/DependencyResolver/PoolBuilderTest.php index 05bbe922d..c55431b6e 100644 --- a/tests/Composer/Test/DependencyResolver/PoolBuilderTest.php +++ b/tests/Composer/Test/DependencyResolver/PoolBuilderTest.php @@ -74,7 +74,7 @@ class PoolBuilderTest extends TestCase return $pkg; }; - $repositorySet = new RepositorySet($normalizedAliases, array(), $minimumStability, $stabilityFlags); + $repositorySet = new RepositorySet($minimumStability, $stabilityFlags, $normalizedAliases); $repositorySet->addRepository($repo = new ArrayRepository()); foreach ($packages as $package) { $repo->addPackage($loadPackage($package)); diff --git a/tests/Composer/Test/DependencyResolver/SolverTest.php b/tests/Composer/Test/DependencyResolver/SolverTest.php index 38e16c6a0..46d882e9f 100644 --- a/tests/Composer/Test/DependencyResolver/SolverTest.php +++ b/tests/Composer/Test/DependencyResolver/SolverTest.php @@ -38,7 +38,7 @@ class SolverTest extends TestCase public function setUp() { - $this->repoSet = new RepositorySet(array()); + $this->repoSet = new RepositorySet(); $this->repo = new ArrayRepository; $this->repoLocked = new LockArrayRepository;