From 02f92e678fe3d013d20aa62863bb43c9d3c60a91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Haso=C5=88?= Date: Thu, 21 Mar 2013 12:08:58 +0100 Subject: [PATCH] Fixed update alias packages in dry-run mode --- src/Composer/Installer.php | 11 +++-- .../installer/update-all-dry-run.test | 40 +++++++++++++++++ .../update-installed-alias-dry-run.test | 44 +++++++++++++++++++ .../installer/update-installed-alias.test | 44 +++++++++++++++++++ tests/Composer/Test/InstallerTest.php | 5 ++- 5 files changed, 139 insertions(+), 5 deletions(-) create mode 100644 tests/Composer/Test/Fixtures/installer/update-all-dry-run.test create mode 100644 tests/Composer/Test/Fixtures/installer/update-installed-alias-dry-run.test create mode 100644 tests/Composer/Test/Fixtures/installer/update-installed-alias.test diff --git a/src/Composer/Installer.php b/src/Composer/Installer.php index 9a4fea1ab..48a2496b5 100644 --- a/src/Composer/Installer.php +++ b/src/Composer/Installer.php @@ -809,12 +809,15 @@ class Installer */ private function mockLocalRepositories(RepositoryManager $rm) { - $packages = array_map(function ($p) { - return clone $p; - }, $rm->getLocalRepository()->getPackages()); + $packages = array(); + foreach ($rm->getLocalRepository()->getPackages() as $package) { + $packages[(string) $package] = clone $package; + } foreach ($packages as $key => $package) { if ($package instanceof AliasPackage) { - unset($packages[$key]); + $alias = (string) $package->getAliasOf(); + $packages[$key] = new AliasPackage($packages[$alias], $package->getVersion(), $package->getPrettyVersion()); + unset($packages[$alias]); } } $rm->setLocalRepository( diff --git a/tests/Composer/Test/Fixtures/installer/update-all-dry-run.test b/tests/Composer/Test/Fixtures/installer/update-all-dry-run.test new file mode 100644 index 000000000..191f97495 --- /dev/null +++ b/tests/Composer/Test/Fixtures/installer/update-all-dry-run.test @@ -0,0 +1,40 @@ +--TEST-- +Updates updateable packages in dry-run mode +--COMPOSER-- +{ + "repositories": [ + { + "type": "package", + "package": [ + { "name": "a/a", "version": "1.0.0" }, + { "name": "a/a", "version": "1.0.1" }, + { "name": "a/a", "version": "1.1.0" }, + + { "name": "a/b", "version": "1.0.0" }, + { "name": "a/b", "version": "1.0.1" }, + { "name": "a/b", "version": "2.0.0" }, + + { "name": "a/c", "version": "1.0.0" }, + { "name": "a/c", "version": "2.0.0" } + ] + } + ], + "require": { + "a/a": "1.0.*", + "a/c": "1.*" + }, + "require-dev": { + "a/b": "*" + } +} +--INSTALLED-- +[ + { "name": "a/a", "version": "1.0.0" }, + { "name": "a/c", "version": "1.0.0" }, + { "name": "a/b", "version": "1.0.0" } +] +--RUN-- +update --dev --dry-run +--EXPECT-- +Updating a/a (1.0.0) to a/a (1.0.1) +Updating a/b (1.0.0) to a/b (2.0.0) diff --git a/tests/Composer/Test/Fixtures/installer/update-installed-alias-dry-run.test b/tests/Composer/Test/Fixtures/installer/update-installed-alias-dry-run.test new file mode 100644 index 000000000..b53287a32 --- /dev/null +++ b/tests/Composer/Test/Fixtures/installer/update-installed-alias-dry-run.test @@ -0,0 +1,44 @@ +--TEST-- +Updates installed alias packages in dry-run mode +--COMPOSER-- +{ + "repositories": [ + { + "type": "package", + "package": [ + { + "name": "a/a", "version": "dev-master", + "require": { "b/b": "2.0.*" }, + "source": { "reference": "abcdef", "url": "", "type": "git" }, + "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } } + }, + { + "name": "b/b", "version": "dev-master", + "source": { "reference": "123456", "url": "", "type": "git" }, + "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } } + } + ] + } + ], + "require": { + "a/a": "~1.0@dev", + "b/b": "@dev" + } +} +--INSTALLED-- +[ + { + "name": "a/a", "version": "dev-master", + "require": { "b/b": "2.0.*" }, + "source": { "reference": "abcdef", "url": "", "type": "git" }, + "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } } + }, + { + "name": "b/b", "version": "dev-master", + "source": { "reference": "123456", "url": "", "type": "git" }, + "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } } + } +] +--RUN-- +update --dry-run +--EXPECT-- diff --git a/tests/Composer/Test/Fixtures/installer/update-installed-alias.test b/tests/Composer/Test/Fixtures/installer/update-installed-alias.test new file mode 100644 index 000000000..f5b7e0549 --- /dev/null +++ b/tests/Composer/Test/Fixtures/installer/update-installed-alias.test @@ -0,0 +1,44 @@ +--TEST-- +Updates installed alias packages +--COMPOSER-- +{ + "repositories": [ + { + "type": "package", + "package": [ + { + "name": "a/a", "version": "dev-master", + "require": { "b/b": "2.0.*" }, + "source": { "reference": "abcdef", "url": "", "type": "git" }, + "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } } + }, + { + "name": "b/b", "version": "dev-master", + "source": { "reference": "123456", "url": "", "type": "git" }, + "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } } + } + ] + } + ], + "require": { + "a/a": "~1.0@dev", + "b/b": "@dev" + } +} +--INSTALLED-- +[ + { + "name": "a/a", "version": "dev-master", + "require": { "b/b": "2.0.*" }, + "source": { "reference": "abcdef", "url": "", "type": "git" }, + "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } } + }, + { + "name": "b/b", "version": "dev-master", + "source": { "reference": "123456", "url": "", "type": "git" }, + "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } } + } +] +--RUN-- +update +--EXPECT-- diff --git a/tests/Composer/Test/InstallerTest.php b/tests/Composer/Test/InstallerTest.php index 110980dec..bae4beda8 100644 --- a/tests/Composer/Test/InstallerTest.php +++ b/tests/Composer/Test/InstallerTest.php @@ -200,7 +200,9 @@ class InstallerTest extends TestCase $application = new Application; $application->get('install')->setCode(function ($input, $output) use ($installer) { - $installer->setDevMode($input->getOption('dev')); + $installer + ->setDevMode($input->getOption('dev')) + ->setDryRun($input->getOption('dry-run')); return $installer->run() ? 0 : 1; }); @@ -209,6 +211,7 @@ class InstallerTest extends TestCase $installer ->setDevMode($input->getOption('dev')) ->setUpdate(true) + ->setDryRun($input->getOption('dry-run')) ->setUpdateWhitelist($input->getArgument('packages')); return $installer->run() ? 0 : 1;