diff --git a/src/Composer/Installer.php b/src/Composer/Installer.php index a3481a45b..1c8d7bb41 100644 --- a/src/Composer/Installer.php +++ b/src/Composer/Installer.php @@ -1175,10 +1175,15 @@ class Installer $requirePackages = $pool->whatProvides($require->getTarget()); foreach ($requirePackages as $requirePackage) { + if (isset($this->updateWhitelist[$requirePackage->getName()])) { + continue; + } + if (isset($skipPackages[$requirePackage->getName()])) { $this->io->writeError('Dependency "' . $requirePackage->getName() . '" is also a root requirement, but is not explicitly whitelisted. Ignoring.'); continue; } + $packageQueue->enqueue($requirePackage); } } diff --git a/tests/Composer/Test/Fixtures/installer/github-issues-4795-2.test b/tests/Composer/Test/Fixtures/installer/github-issues-4795-2.test new file mode 100644 index 000000000..29fc0d38f --- /dev/null +++ b/tests/Composer/Test/Fixtures/installer/github-issues-4795-2.test @@ -0,0 +1,44 @@ +--TEST-- + +See Github issue #4795 ( github.com/composer/composer/issues/4795 ). + +Composer\Installer::whitelistUpdateDependencies should not output a warning for dependencies that need to be updated +that are also a root package, when that root package is also explicitly whitelisted. + +--COMPOSER-- +{ + "repositories": [ + { + "type": "package", + "package": [ + { "name": "a", "version": "1.0.0" }, + { "name": "a", "version": "1.1.0" }, + { "name": "b", "version": "1.0.0", "require": { "a": "~1.0" } }, + { "name": "b", "version": "1.1.0", "require": { "a": "~1.1" } } + ] + } + ], + "require": { + "a": "~1.0", + "b": "~1.0" + } +} + +--INSTALLED-- +[ + { "name": "a", "version": "1.0.0" }, + { "name": "b", "version": "1.0.0", "require": { "a": "~1.0" } } +] + +--RUN-- +update a b --with-dependencies + +--EXPECT-OUTPUT-- +Loading composer repositories with package information +Updating dependencies (including require-dev) +Writing lock file +Generating autoload files + +--EXPECT-- +Updating a (1.0.0) to a (1.1.0) +Updating b (1.0.0) to b (1.1.0) diff --git a/tests/Composer/Test/Fixtures/installer/github-issues-4795.test b/tests/Composer/Test/Fixtures/installer/github-issues-4795.test index 6dc3ced3d..5a1158f26 100644 --- a/tests/Composer/Test/Fixtures/installer/github-issues-4795.test +++ b/tests/Composer/Test/Fixtures/installer/github-issues-4795.test @@ -14,27 +14,24 @@ dependency of one the requirements that is whitelisted for update. { "name": "a", "version": "1.0.0" }, { "name": "a", "version": "1.1.0" }, { "name": "b", "version": "1.0.0", "require": { "a": "~1.0" } }, - { "name": "b", "version": "1.1.0", "require": { "a": "~1.1" } }, - { "name": "c", "version": "1.0.0", "require": { "a": "~1.0" } } + { "name": "b", "version": "1.1.0", "require": { "a": "~1.1" } } ] } ], "require": { "a": "~1.0", - "b": "~1.0", - "c": "~1.0" + "b": "~1.0" } } --INSTALLED-- [ { "name": "a", "version": "1.0.0" }, - { "name": "b", "version": "1.0.0", "require": { "a": "~1.0" } }, - { "name": "c", "version": "1.0.0", "require": { "a": "~1.0" } } + { "name": "b", "version": "1.0.0", "require": { "a": "~1.0" } } ] --RUN-- -update B --with-dependencies +update b --with-dependencies --EXPECT-OUTPUT-- Dependency "a" is also a root requirement, but is not explicitly whitelisted. Ignoring.