diff --git a/src/Composer/Downloader/PearPackageExtractor.php b/src/Composer/Downloader/PearPackageExtractor.php index 746853e6d..3a83a91dd 100644 --- a/src/Composer/Downloader/PearPackageExtractor.php +++ b/src/Composer/Downloader/PearPackageExtractor.php @@ -115,13 +115,13 @@ class PearPackageExtractor throw new \RuntimeException('Package definition file is not valid.'); $packageSchemaVersion = $package['version']; - if ($packageSchemaVersion == '1.0') { + if ('1.0' == $packageSchemaVersion) { $children = $package->release->filelist->children(); $packageName = (string) $package->name; $packageVersion = (string) $package->release->version; $sourceDir = $packageName . '-' . $packageVersion; $result = $this->buildSourceList10($children, $role, $sourceDir); - } elseif ($packageSchemaVersion == '2.0') { + } elseif ('2.0' == $packageSchemaVersion || '2.1' == $packageSchemaVersion) { $children = $package->contents->children(); $packageName = (string) $package->name; $packageVersion = (string) $package->version->release; diff --git a/tests/Composer/Test/Downloader/Fixtures/Package_v2.1/package.xml b/tests/Composer/Test/Downloader/Fixtures/Package_v2.1/package.xml new file mode 100644 index 000000000..6a982ef60 --- /dev/null +++ b/tests/Composer/Test/Downloader/Fixtures/Package_v2.1/package.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<package xmlns="http://pear.php.net/dtd/package-2.1" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.1 http://pear.php.net/dtd/package-2.1.xsd" packagerversion="2.0.0"> + <!-- stripped version of package--> + <name>Zend_Authentication</name> + <channel>packages.zendframework.com</channel> + <summary> + Package Zend_Authentication summary.\n\n" . "Package detailed description here (found in README) + </summary> + <description/> + <version> + <release>2.0.0beta4</release> + <api>2.0.0beta4</api> + </version> + <stability> + <release>beta</release> + <api>beta</api> + </stability> + <contents> + <dir name="/"> + <file role="php" name="php/Zend/Authentication/Storage/StorageInterface.php"/> + <file role="php" name="php/Zend/Authentication/Result.php"/> + </dir> + </contents> + <phprelease/> +</package> \ No newline at end of file diff --git a/tests/Composer/Test/Downloader/PearPackageExtractorTest.php b/tests/Composer/Test/Downloader/PearPackageExtractorTest.php index 0a4e84d39..42010a39c 100644 --- a/tests/Composer/Test/Downloader/PearPackageExtractorTest.php +++ b/tests/Composer/Test/Downloader/PearPackageExtractorTest.php @@ -57,4 +57,25 @@ class PearPackageExtractorTest extends \PHPUnit_Framework_TestCase ); $this->assertSame($expectedFileActions, $fileActions); } + + public function testShouldExtractPackage_2_1() + { + $extractor = $this->getMockForAbstractClass('Composer\Downloader\PearPackageExtractor', array(), '', false); + $method = new \ReflectionMethod($extractor, 'buildCopyActions'); + $method->setAccessible(true); + + $fileActions = $method->invoke($extractor, __DIR__ . '/Fixtures/Package_v2.1', 'php'); + + $expectedFileActions = array( + 0 => Array( + 'from' => 'Zend_Authentication-2.0.0beta4/php/Zend/Authentication/Storage/StorageInterface.php', + 'to' => '/php/Zend/Authentication/Storage/StorageInterface.php', + ), + 1 => Array( + 'from' => 'Zend_Authentication-2.0.0beta4/php/Zend/Authentication/Result.php', + 'to' => '/php/Zend/Authentication/Result.php', + ) + ); + $this->assertSame($expectedFileActions, $fileActions); + } }