From c29f3c698ea299ec8ca3f48154fa20b0bbab5fb5 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Thu, 28 Feb 2013 10:51:21 +0100 Subject: [PATCH] Fix support of aliases combined with reference locked packages, fixes #1631 --- .../Package/Loader/RootPackageLoader.php | 2 +- .../installer/alias-with-reference.test | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 tests/Composer/Test/Fixtures/installer/alias-with-reference.test diff --git a/src/Composer/Package/Loader/RootPackageLoader.php b/src/Composer/Package/Loader/RootPackageLoader.php index 3c6847c67..627e40ba5 100644 --- a/src/Composer/Package/Loader/RootPackageLoader.php +++ b/src/Composer/Package/Loader/RootPackageLoader.php @@ -103,7 +103,7 @@ class RootPackageLoader extends ArrayLoader private function extractAliases(array $requires, array $aliases) { foreach ($requires as $reqName => $reqVersion) { - if (preg_match('{^([^,\s]+) +as +([^,\s]+)$}', $reqVersion, $match)) { + if (preg_match('{^([^,\s#]+)(?:#[^ ]+)? +as +([^,\s]+)$}', $reqVersion, $match)) { $aliases[] = array( 'package' => strtolower($reqName), 'version' => $this->versionParser->normalize($match[1], $reqVersion), diff --git a/tests/Composer/Test/Fixtures/installer/alias-with-reference.test b/tests/Composer/Test/Fixtures/installer/alias-with-reference.test new file mode 100644 index 000000000..d1609ed9a --- /dev/null +++ b/tests/Composer/Test/Fixtures/installer/alias-with-reference.test @@ -0,0 +1,31 @@ +--TEST-- +Aliases of referenced packages work +--COMPOSER-- +{ + "repositories": [ + { + "type": "package", + "package": [ + { + "name": "a/aliased", "version": "dev-master", + "source": { "reference": "orig", "type": "git", "url": "" } + }, + { + "name": "b/requirer", "version": "1.0.0", + "require": { "a/aliased": "1.0.0" }, + "source": { "reference": "1.0.0", "type": "git", "url": "" } + } + ] + } + ], + "require": { + "a/aliased": "dev-master#abcd as 1.0.0", + "b/requirer": "*" + } +} +--RUN-- +install +--EXPECT-- +Installing a/aliased (dev-master abcd) +Marking a/aliased (1.0.0) as installed, alias of a/aliased (dev-master abcd) +Installing b/requirer (1.0.0)