From 0f099828586939274d1c20d5f1bcdbcd2b04f2eb Mon Sep 17 00:00:00 2001 From: Rob Bast Date: Thu, 21 Jan 2016 16:18:00 +0100 Subject: [PATCH 1/4] add a test attempting to reproduce composer/composer#4795 --- .../installer/update-refs-issue-4795.test | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 tests/Composer/Test/Fixtures/installer/update-refs-issue-4795.test diff --git a/tests/Composer/Test/Fixtures/installer/update-refs-issue-4795.test b/tests/Composer/Test/Fixtures/installer/update-refs-issue-4795.test new file mode 100644 index 000000000..c28fd57d5 --- /dev/null +++ b/tests/Composer/Test/Fixtures/installer/update-refs-issue-4795.test @@ -0,0 +1,32 @@ +--TEST-- +Refs issue #4795 +--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.0" } }, + { "name": "C", "version": "1.0.0", "require": { "A": "~1.0" } } + ] + } + ], + "require": { + "B": "~1.1", + "C": "~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" } } +] +--RUN-- +update B --with-dependencies +--EXPECT-- +Updating A (1.0.0) to A (1.1.0) +Updating B (1.0.0) to B (1.1.0) From 17d6b98707a6460582c25831a87163e1c05c7193 Mon Sep 17 00:00:00 2001 From: Rob Bast Date: Thu, 21 Jan 2016 18:40:33 +0100 Subject: [PATCH 2/4] add A to root requirements --- .../Test/Fixtures/installer/update-refs-issue-4795.test | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/Composer/Test/Fixtures/installer/update-refs-issue-4795.test b/tests/Composer/Test/Fixtures/installer/update-refs-issue-4795.test index c28fd57d5..a359303bb 100644 --- a/tests/Composer/Test/Fixtures/installer/update-refs-issue-4795.test +++ b/tests/Composer/Test/Fixtures/installer/update-refs-issue-4795.test @@ -9,13 +9,14 @@ Refs issue #4795 { "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.0" } }, + { "name": "B", "version": "1.1.0", "require": { "A": "~1.1" } }, { "name": "C", "version": "1.0.0", "require": { "A": "~1.0" } } ] } ], "require": { - "B": "~1.1", + "A": "~1.0", + "B": "~1.0", "C": "~1.0" } } From 0e584aa9808c82d72bb7e3d54fccd70865951783 Mon Sep 17 00:00:00 2001 From: Rob Bast Date: Tue, 2 Feb 2016 10:45:57 +0100 Subject: [PATCH 3/4] resolve issue --- src/Composer/Installer.php | 1 + .../installer/github-issues-4795.test | 47 +++++++++++++++++++ .../installer/update-refs-issue-4795.test | 33 ------------- 3 files changed, 48 insertions(+), 33 deletions(-) create mode 100644 tests/Composer/Test/Fixtures/installer/github-issues-4795.test delete mode 100644 tests/Composer/Test/Fixtures/installer/update-refs-issue-4795.test diff --git a/src/Composer/Installer.php b/src/Composer/Installer.php index f59eac7d3..adc2dc67b 100644 --- a/src/Composer/Installer.php +++ b/src/Composer/Installer.php @@ -1199,6 +1199,7 @@ class Installer foreach ($requirePackages as $requirePackage) { 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.test b/tests/Composer/Test/Fixtures/installer/github-issues-4795.test new file mode 100644 index 000000000..cf0a3ae6a --- /dev/null +++ b/tests/Composer/Test/Fixtures/installer/github-issues-4795.test @@ -0,0 +1,47 @@ +--TEST-- + +See Github issue #4795 ( github.com/composer/composer/issues/4795 ). + +Composer\Installer::whitelistUpdateDependencies intentionally ignores root requirements even if said package is also a +dependency of one the requirements that is whitelisted for update. + +--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" } }, + { "name": "c", "version": "1.0.0", "require": { "a": "~1.0" } } + ] + } + ], + "require": { + "a": "~1.0", + "b": "~1.0", + "c": "~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" } } +] + +--RUN-- +update B --with-dependencies + +--EXPECT-OUTPUT-- +Dependency "a" is also a root requirement, but is not explicitly whitelisted. Ignoring. +Loading composer repositories with package information +Updating dependencies (including require-dev) +Nothing to install or update +Writing lock file +Generating autoload files + +--EXPECT-- diff --git a/tests/Composer/Test/Fixtures/installer/update-refs-issue-4795.test b/tests/Composer/Test/Fixtures/installer/update-refs-issue-4795.test deleted file mode 100644 index a359303bb..000000000 --- a/tests/Composer/Test/Fixtures/installer/update-refs-issue-4795.test +++ /dev/null @@ -1,33 +0,0 @@ ---TEST-- -Refs issue #4795 ---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" } }, - { "name": "C", "version": "1.0.0", "require": { "A": "~1.0" } } - ] - } - ], - "require": { - "A": "~1.0", - "B": "~1.0", - "C": "~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" } } -] ---RUN-- -update B --with-dependencies ---EXPECT-- -Updating A (1.0.0) to A (1.1.0) -Updating B (1.0.0) to B (1.1.0) From df23153932af03d75d2bb86a45bb989ddb6cc438 Mon Sep 17 00:00:00 2001 From: Rob Bast Date: Thu, 4 Feb 2016 12:45:55 +0100 Subject: [PATCH 4/4] fix output --- .../Test/Fixtures/installer/github-issues-4795.test | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/Composer/Test/Fixtures/installer/github-issues-4795.test b/tests/Composer/Test/Fixtures/installer/github-issues-4795.test index cf0a3ae6a..6dc3ced3d 100644 --- a/tests/Composer/Test/Fixtures/installer/github-issues-4795.test +++ b/tests/Composer/Test/Fixtures/installer/github-issues-4795.test @@ -38,10 +38,10 @@ update B --with-dependencies --EXPECT-OUTPUT-- Dependency "a" is also a root requirement, but is not explicitly whitelisted. Ignoring. -Loading composer repositories with package information -Updating dependencies (including require-dev) +Loading composer repositories with package information +Updating dependencies (including require-dev) Nothing to install or update -Writing lock file -Generating autoload files +Writing lock file +Generating autoload files --EXPECT--