diff --git a/src/Composer/Installer.php b/src/Composer/Installer.php index 1987db300..6c1761134 100644 --- a/src/Composer/Installer.php +++ b/src/Composer/Installer.php @@ -247,7 +247,8 @@ class Installer // creating repository pool $pool = new Pool($minimumStability, $stabilityFlags); $pool->addRepository($installedRepo, $aliases); - foreach ($this->repositoryManager->getRepositories() as $repository) { + $repositories = $this->repositoryManager->getRepositories(); + foreach ($repositories as $repository) { $pool->addRepository($repository, $aliases); } @@ -360,6 +361,10 @@ class Installer continue; } + if ($package instanceof AliasPackage) { + continue; + } + // skip packages that will be updated/uninstalled foreach ($operations as $operation) { if (('update' === $operation->getJobType() && $operation->getInitialPackage()->equals($package)) @@ -394,9 +399,13 @@ class Installer $newPackage = null; $matches = $pool->whatProvides($package->getName(), new VersionConstraint('=', $package->getVersion())); foreach ($matches as $match) { - if (null === $newPackage || $newPackage->getReleaseDate() < $match->getReleaseDate()) { - $newPackage = $match; + // skip local packages + if (!in_array($match->getRepository(), $repositories, true)) { + continue; } + + $newPackage = $match; + break; } if ($newPackage && $newPackage->getSourceReference() !== $package->getSourceReference()) { diff --git a/tests/Composer/Test/Fixtures/installer/update-alias-lock.test b/tests/Composer/Test/Fixtures/installer/update-alias-lock.test index cc69f17d1..03744bcfd 100644 --- a/tests/Composer/Test/Fixtures/installer/update-alias-lock.test +++ b/tests/Composer/Test/Fixtures/installer/update-alias-lock.test @@ -1,5 +1,5 @@ --TEST-- -Update aliased package to non-aliased version +Update aliased package does not mess up the lock file --COMPOSER-- { "repositories": [ @@ -12,12 +12,22 @@ Update aliased package to non-aliased version "source": { "reference": "master", "type": "git", "url": "" } } ] + }, + { + "type": "package", + "package": [ + { + "name": "a/a", "version": "dev-master", + "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, + "source": { "reference": "lowpriomaster", "type": "git", "url": "" } + } + ] } ], "require": { "a/a": "1.*" }, - "minimum-stability": "stable" + "minimum-stability": "dev" } --LOCK-- { @@ -27,7 +37,7 @@ Update aliased package to non-aliased version ], "packages-dev": null, "aliases": [], - "minimum-stability": "stable", + "minimum-stability": "dev", "stability-flags": [] } --INSTALLED-- @@ -48,7 +58,7 @@ update ], "packages-dev": null, "aliases": [], - "minimum-stability": "stable", + "minimum-stability": "dev", "stability-flags": [] } --EXPECT--