From 14adc0213e7d60b2e3b26da281a3b4bbe15614db Mon Sep 17 00:00:00 2001 From: Henrique Moody Date: Tue, 17 Jan 2012 14:53:38 -0200 Subject: [PATCH 01/16] Added suport for PEAR2 repositories. --- src/Composer/Repository/PearRepository.php | 233 ++++++++++++++++----- 1 file changed, 176 insertions(+), 57 deletions(-) diff --git a/src/Composer/Repository/PearRepository.php b/src/Composer/Repository/PearRepository.php index 51c1722b4..496950af5 100644 --- a/src/Composer/Repository/PearRepository.php +++ b/src/Composer/Repository/PearRepository.php @@ -31,7 +31,7 @@ class PearRepository extends ArrayRepository throw new \UnexpectedValueException('Invalid url given for PEAR repository: '.$config['url']); } - $this->url = $config['url']; + $this->url = preg_replace('#^(.+)/+$#U', '$1', $config['url']); } protected function initialize() @@ -51,24 +51,62 @@ class PearRepository extends ArrayRepository $categories = $categoryXML->getElementsByTagName("c"); foreach ($categories as $category) { - $categoryLink = $category->getAttribute("xlink:href"); - $categoryLink = str_replace("info.xml", "packages.xml", $categoryLink); - if ('/' !== substr($categoryLink, 0, 1)) { - $categoryLink = '/' . $categoryLink; + $link = $category->getAttribute("xlink:href"); + try { + $packagesLink = str_replace("info.xml", "packagesinfo.xml", $link); + $this->fetchPear2Repositories($this->url . '/' . $packagesLink); + } catch (\ErrorException $e) { + if (false === strpos($e->getMessage(), '404')) { + throw $e; + } + $categoryLink = str_replace("info.xml", "packages.xml", $link); + $this->fetchPearRepositories($this->url . '/' . $categoryLink); + } + + } + } + + /** + * @param string $categoryLink + * @throws ErrorException + * @throws InvalidArgumentException + */ + private function fetchPearRepositories($categoryLink) + { + $packagesXML = $this->requestXml($categoryLink); + $packages = $packagesXML->getElementsByTagName('p'); + $loader = new ArrayLoader(); + foreach ($packages as $package) { + $packageName = $package->nodeValue; + + $packageLink = $package->getAttribute('xlink:href'); + $releaseLink = $this->url . str_replace("/rest/p/", "/rest/r/", $packageLink); + $allReleasesLink = $releaseLink . "/allreleases2.xml"; + + try { + $releasesXML = $this->requestXml($allReleasesLink); + } catch (\ErrorException $e) { + if (strpos($e->getMessage(), '404')) { + continue; + } + throw $e; } - $packagesXML = $this->requestXml($this->url . $categoryLink); - $packages = $packagesXML->getElementsByTagName('p'); - $loader = new ArrayLoader(); - foreach ($packages as $package) { - $packageName = $package->nodeValue; + $releases = $releasesXML->getElementsByTagName('r'); + + foreach ($releases as $release) { + /* @var $release DOMElement */ + $pearVersion = $release->getElementsByTagName('v')->item(0)->nodeValue; - $packageLink = $package->getAttribute('xlink:href'); - $releaseLink = $this->url . str_replace("/rest/p/", "/rest/r/", $packageLink); - $allReleasesLink = $releaseLink . "/allreleases2.xml"; + $packageData = array( + 'name' => $packageName, + 'type' => 'library', + 'dist' => array('type' => 'pear', 'url' => $this->url.'/get/'.$packageName.'-'.$pearVersion.".tgz"), + 'version' => $pearVersion, + ); try { - $releasesXML = $this->requestXml($allReleasesLink); + $deps = file_get_contents($releaseLink . "/deps.".$pearVersion.".txt"); } catch (\ErrorException $e) { if (strpos($e->getMessage(), '404')) { continue; @@ -76,54 +114,135 @@ class PearRepository extends ArrayRepository throw $e; } - $releases = $releasesXML->getElementsByTagName('r'); + $packageData += $this->parseDependences($deps); - foreach ($releases as $release) { - /* @var $release DOMElement */ - $pearVersion = $release->getElementsByTagName('v')->item(0)->nodeValue; + try { + $this->addPackage($loader->load($packageData)); + } catch (\UnexpectedValueException $e) { + continue; + } + } + } + } - $packageData = array( - 'name' => $packageName, - 'type' => 'library', - 'dist' => array('type' => 'pear', 'url' => $this->url.'/get/'.$packageName.'-'.$pearVersion.".tgz"), - 'version' => $pearVersion, - ); + /** + * @todo Improve dependences of pear packages. + * @param array $options + * @return array + */ + private function parseDependencesOptions(array $depsOptions) + { + $data = array(); + foreach ($depsOptions as $name => $options) { + if ('php' == $name) { + $key = $name; + if (isset($options['min'])) { + $value = '>=' . $options['min']; + } else { + $value = '>=0.0.0'; + } + $data[$key] = $value; - try { - $deps = file_get_contents($releaseLink . "/deps.".$pearVersion.".txt"); - } catch (\ErrorException $e) { - if (strpos($e->getMessage(), '404')) { - continue; - } - throw $e; + } elseif ('package' == $name) { + foreach ($options as $key => $value) { + $key = $value['name']; + if (isset($value['min'])) { + $value = '>=' . $value['min']; + } else { + $value = '>=0.0.0'; } + $data[$key] = $value; + } + } elseif ('extension' == $name) { + foreach ($options as $key => $value) { + $key = 'ext-' . $value['name']; + $value = '*'; + $data[$key] = $value; + } + } + } + $data = array_filter($data); + return $data; + } - if (preg_match('((O:([0-9])+:"([^"]+)"))', $deps, $matches)) { - if (strlen($matches[3]) == $matches[2]) { - throw new \InvalidArgumentException("Invalid dependency data, it contains serialized objects."); - } - } - $deps = unserialize($deps); - if (isset($deps['required']['package'])) { - - if (isset($deps['required']['package']['name'])) { - $deps['required']['package'] = array($deps['required']['package']); - } - - foreach ($deps['required']['package'] as $dependency) { - if (isset($dependency['min'])) { - $packageData['require'][$dependency['name']] = '>='.$dependency['min']; - } else { - $packageData['require'][$dependency['name']] = '>=0.0.0'; - } - } - } + /** + * @param string $deps + * @return array + * @throws InvalidArgumentException + */ + private function parseDependences($deps) + { + if (preg_match('((O:([0-9])+:"([^"]+)"))', $deps, $matches)) { + if (strlen($matches[3]) == $matches[2]) { + throw new \InvalidArgumentException("Invalid dependency data, it contains serialized objects."); + } + } + $deps = (array) @unserialize($deps); + unset($deps['required']['pearinstaller']); - try { - $this->addPackage($loader->load($packageData)); - } catch (\UnexpectedValueException $e) { - continue; - } + $depsData = array(); + if (isset($deps['required'])) { + $depsData['require'] = $this->parseDependencesOptions($deps['required']); + } else { + $depsData['require'] = array('php' => '>=5.3.0'); + } + + if (isset($depsData['optional'])) { + $depsData['recommend'] = $this->parseDependencesOptions($depsData['optional']); + } + + return $depsData; + } + + /** + * @param string $packagesLink + * @return void + * @throws InvalidArgumentException + */ + private function fetchPear2Repositories($packagesLink) + { + $loader = new ArrayLoader(); + $packagesXml = $this->requestXml($packagesLink); + $informations = $packagesXml->getElementsByTagName('pi'); + foreach ($informations as $information) { + $package = $information->getElementsByTagName('p')->item(0); + + $packageName = $package->getElementsByTagName('n')->item(0)->nodeValue; + $packageData = array( + 'name' => $packageName, + 'type' => 'library' + ); + $packageKeys = array('l' => 'license', 'd' => 'description'); + foreach ($packageKeys as $pear => $composer) { + if ($package->getElementsByTagName($pear)->length > 0 + && ($pear = $package->getElementsByTagName($pear)->item(0)->nodeValue)) { + $packageData[$composer] = $pear; + } + } + + $depsData = $information->getElementsByTagName('deps')->item(0); + $depsData = $depsData->getElementsByTagName('d')->item(0); + $depsData = $this->parseDependences($depsData->nodeValue); + + $revisions = $information->getElementsByTagName('a')->item(0); + $revisions = $revisions->getElementsByTagName('r'); + $packageUrl = $this->url . '/get/' . $packageName; + foreach ($revisions as $revision) { + $version = $revision->getElementsByTagName('v')->item(0)->nodeValue; + $revisionData = array( + 'dist' => array( + 'type' => 'pear', + 'url' => $packageUrl . '-' . $version . '.tgz' + ), + 'version' => $version + ); + + try { + $this->addPackage( + $loader->load($packageData + $revisionData + $depsData) + ); + } catch (\UnexpectedValueException $e) { + continue; } } } @@ -144,4 +263,4 @@ class PearRepository extends ArrayRepository return $dom; } -} +} \ No newline at end of file From 60831ac3fc310eb549c78e022e19787be474c1e1 Mon Sep 17 00:00:00 2001 From: Henrique Moody Date: Tue, 17 Jan 2012 14:54:55 -0200 Subject: [PATCH 02/16] Update src/Composer/Repository/PearRepository.php --- src/Composer/Repository/PearRepository.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Composer/Repository/PearRepository.php b/src/Composer/Repository/PearRepository.php index 496950af5..b2f12ab2a 100644 --- a/src/Composer/Repository/PearRepository.php +++ b/src/Composer/Repository/PearRepository.php @@ -31,7 +31,7 @@ class PearRepository extends ArrayRepository throw new \UnexpectedValueException('Invalid url given for PEAR repository: '.$config['url']); } - $this->url = preg_replace('#^(.+)/+$#U', '$1', $config['url']); + $this->url = rtrim($config['url'], '/'); } protected function initialize() From c7e0fb7e58bdeb8d839632a418dbea9b55a73164 Mon Sep 17 00:00:00 2001 From: Henrique Moody Date: Tue, 17 Jan 2012 16:19:25 -0200 Subject: [PATCH 03/16] Correction of typo error. --- src/Composer/Repository/PearRepository.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Composer/Repository/PearRepository.php b/src/Composer/Repository/PearRepository.php index b2f12ab2a..119ac1667 100644 --- a/src/Composer/Repository/PearRepository.php +++ b/src/Composer/Repository/PearRepository.php @@ -114,7 +114,7 @@ class PearRepository extends ArrayRepository throw $e; } - $packageData += $this->parseDependences($deps); + $packageData += $this->parseDependencies($deps); try { $this->addPackage($loader->load($packageData)); @@ -130,7 +130,7 @@ class PearRepository extends ArrayRepository * @param array $options * @return array */ - private function parseDependencesOptions(array $depsOptions) + private function parseDependenciesOptions(array $depsOptions) { $data = array(); foreach ($depsOptions as $name => $options) { @@ -170,7 +170,7 @@ class PearRepository extends ArrayRepository * @return array * @throws InvalidArgumentException */ - private function parseDependences($deps) + private function parseDependencies($deps) { if (preg_match('((O:([0-9])+:"([^"]+)"))', $deps, $matches)) { if (strlen($matches[3]) == $matches[2]) { @@ -182,13 +182,13 @@ class PearRepository extends ArrayRepository $depsData = array(); if (isset($deps['required'])) { - $depsData['require'] = $this->parseDependencesOptions($deps['required']); + $depsData['require'] = $this->parseDependenciesOptions($deps['required']); } else { $depsData['require'] = array('php' => '>=5.3.0'); } if (isset($depsData['optional'])) { - $depsData['recommend'] = $this->parseDependencesOptions($depsData['optional']); + $depsData['recommend'] = $this->parseDependenciesOptions($depsData['optional']); } return $depsData; @@ -222,7 +222,7 @@ class PearRepository extends ArrayRepository $depsData = $information->getElementsByTagName('deps')->item(0); $depsData = $depsData->getElementsByTagName('d')->item(0); - $depsData = $this->parseDependences($depsData->nodeValue); + $depsData = $this->parseDependencies($depsData->nodeValue); $revisions = $information->getElementsByTagName('a')->item(0); $revisions = $revisions->getElementsByTagName('r'); From 1e11aff456a9df7b57285a5f2a9db1684f65305d Mon Sep 17 00:00:00 2001 From: Henrique Moody Date: Tue, 17 Jan 2012 16:26:29 -0200 Subject: [PATCH 04/16] Create method parseVersion for parsing of package versions. Now includes "max" version of the package. --- src/Composer/Repository/PearRepository.php | 38 ++++++++++++---------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/Composer/Repository/PearRepository.php b/src/Composer/Repository/PearRepository.php index 119ac1667..d9799598d 100644 --- a/src/Composer/Repository/PearRepository.php +++ b/src/Composer/Repository/PearRepository.php @@ -124,6 +124,23 @@ class PearRepository extends ArrayRepository } } } + + /** + * @param array $data + * @return string + */ + private function parseVersion(array $data) + { + if (isset($data['min'])) { + $version = '>=' . $data['min']; + } else { + $version = '>=0.0.0'; + } + if (isset($data['max'])) { + $version .= ',<=' . $data['max']; + } + return $version; + } /** * @todo Improve dependences of pear packages. @@ -135,29 +152,16 @@ class PearRepository extends ArrayRepository $data = array(); foreach ($depsOptions as $name => $options) { if ('php' == $name) { - $key = $name; - if (isset($options['min'])) { - $value = '>=' . $options['min']; - } else { - $value = '>=0.0.0'; - } - $data[$key] = $value; - + $data[$name] = $this->parseVersion($options); } elseif ('package' == $name) { foreach ($options as $key => $value) { - $key = $value['name']; - if (isset($value['min'])) { - $value = '>=' . $value['min']; - } else { - $value = '>=0.0.0'; - } - $data[$key] = $value; + $key = $value['name']; + $data[$key] = $this->parseVersion($value); } } elseif ('extension' == $name) { foreach ($options as $key => $value) { $key = 'ext-' . $value['name']; - $value = '*'; - $data[$key] = $value; + $data[$key] = '*'; } } } From 0c6d80679146203c1d03408ff6b4870ca32e9bc2 Mon Sep 17 00:00:00 2001 From: Henrique Moody Date: Tue, 17 Jan 2012 16:29:56 -0200 Subject: [PATCH 05/16] Correction of typo. --- src/Composer/Repository/PearRepository.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Composer/Repository/PearRepository.php b/src/Composer/Repository/PearRepository.php index d9799598d..91fc5b654 100644 --- a/src/Composer/Repository/PearRepository.php +++ b/src/Composer/Repository/PearRepository.php @@ -143,7 +143,7 @@ class PearRepository extends ArrayRepository } /** - * @todo Improve dependences of pear packages. + * @todo Improve dependencies resolution of pear packages. * @param array $options * @return array */ From b62a90a981b5131fa9a014210f2e4d3b32182be1 Mon Sep 17 00:00:00 2001 From: Henrique Moody Date: Tue, 17 Jan 2012 16:33:23 -0200 Subject: [PATCH 06/16] Removed hard code - suggestion of a PHP version. --- src/Composer/Repository/PearRepository.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Composer/Repository/PearRepository.php b/src/Composer/Repository/PearRepository.php index 91fc5b654..7738b1a48 100644 --- a/src/Composer/Repository/PearRepository.php +++ b/src/Composer/Repository/PearRepository.php @@ -187,8 +187,6 @@ class PearRepository extends ArrayRepository $depsData = array(); if (isset($deps['required'])) { $depsData['require'] = $this->parseDependenciesOptions($deps['required']); - } else { - $depsData['require'] = array('php' => '>=5.3.0'); } if (isset($depsData['optional'])) { From 6c47d6efe2461aa8b9d8cb9e42727433fc9f952e Mon Sep 17 00:00:00 2001 From: Henrique Moody Date: Tue, 17 Jan 2012 16:38:01 -0200 Subject: [PATCH 07/16] Renamed methods of Composer\Repository\PearRepository: fetchPearRepositories() to fetchPearPackages() and fetchPear2Repositories() to fetchPea2Packages(). --- src/Composer/Repository/PearRepository.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Composer/Repository/PearRepository.php b/src/Composer/Repository/PearRepository.php index 7738b1a48..3c4064eb8 100644 --- a/src/Composer/Repository/PearRepository.php +++ b/src/Composer/Repository/PearRepository.php @@ -54,13 +54,13 @@ class PearRepository extends ArrayRepository $link = $category->getAttribute("xlink:href"); try { $packagesLink = str_replace("info.xml", "packagesinfo.xml", $link); - $this->fetchPear2Repositories($this->url . '/' . $packagesLink); + $this->fetchPear2Packages($this->url . '/' . $packagesLink); } catch (\ErrorException $e) { if (false === strpos($e->getMessage(), '404')) { throw $e; } $categoryLink = str_replace("info.xml", "packages.xml", $link); - $this->fetchPearRepositories($this->url . '/' . $categoryLink); + $this->fetchPearPackages($this->url . '/' . $categoryLink); } } @@ -71,7 +71,7 @@ class PearRepository extends ArrayRepository * @throws ErrorException * @throws InvalidArgumentException */ - private function fetchPearRepositories($categoryLink) + private function fetchPearPackages($categoryLink) { $packagesXML = $this->requestXml($categoryLink); $packages = $packagesXML->getElementsByTagName('p'); @@ -201,7 +201,7 @@ class PearRepository extends ArrayRepository * @return void * @throws InvalidArgumentException */ - private function fetchPear2Repositories($packagesLink) + private function fetchPear2Packages($packagesLink) { $loader = new ArrayLoader(); $packagesXml = $this->requestXml($packagesLink); From 4e6a9806b69f8f0b6a407f315f6832fb6a5b9153 Mon Sep 17 00:00:00 2001 From: Henrique Moody Date: Tue, 17 Jan 2012 16:39:16 -0200 Subject: [PATCH 08/16] Correction of wrong type suggestion. --- src/Composer/Repository/PearRepository.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Composer/Repository/PearRepository.php b/src/Composer/Repository/PearRepository.php index 3c4064eb8..fb1e2b5a6 100644 --- a/src/Composer/Repository/PearRepository.php +++ b/src/Composer/Repository/PearRepository.php @@ -95,7 +95,7 @@ class PearRepository extends ArrayRepository $releases = $releasesXML->getElementsByTagName('r'); foreach ($releases as $release) { - /* @var $release DOMElement */ + /* @var $release \DOMElement */ $pearVersion = $release->getElementsByTagName('v')->item(0)->nodeValue; $packageData = array( From dd2174885bea3d7e6371e13b66aa92da67c12a7e Mon Sep 17 00:00:00 2001 From: Henrique Moody Date: Tue, 17 Jan 2012 16:49:03 -0200 Subject: [PATCH 09/16] Correction of variable overwrite used during an iteration and now the versions of PHP extensions are parsed like packages. --- src/Composer/Repository/PearRepository.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Composer/Repository/PearRepository.php b/src/Composer/Repository/PearRepository.php index fb1e2b5a6..695dcad25 100644 --- a/src/Composer/Repository/PearRepository.php +++ b/src/Composer/Repository/PearRepository.php @@ -155,13 +155,13 @@ class PearRepository extends ArrayRepository $data[$name] = $this->parseVersion($options); } elseif ('package' == $name) { foreach ($options as $key => $value) { - $key = $value['name']; - $data[$key] = $this->parseVersion($value); + $dataKey = $value['name']; + $data[$dataKey] = $this->parseVersion($value); } } elseif ('extension' == $name) { foreach ($options as $key => $value) { - $key = 'ext-' . $value['name']; - $data[$key] = '*'; + $dataKey = 'ext-' . $value['name']; + $data[$dataKey] = $this->parseVersion($value); } } } From be448e09b4fcdb2c51988d4aae1e7fcaa6e9eb9d Mon Sep 17 00:00:00 2001 From: Henrique Moody Date: Tue, 17 Jan 2012 16:45:34 -0200 Subject: [PATCH 10/16] Update src/Composer/Repository/PearRepository.php --- src/Composer/Repository/PearRepository.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Composer/Repository/PearRepository.php b/src/Composer/Repository/PearRepository.php index 695dcad25..9b1d98b93 100644 --- a/src/Composer/Repository/PearRepository.php +++ b/src/Composer/Repository/PearRepository.php @@ -165,7 +165,6 @@ class PearRepository extends ArrayRepository } } } - $data = array_filter($data); return $data; } From 234a6710a14d73103e0bea1ddaa4bfbc028f84a8 Mon Sep 17 00:00:00 2001 From: Henrique Moody Date: Tue, 17 Jan 2012 17:02:39 -0200 Subject: [PATCH 11/16] Correction at method parseVersion() of Composer\Repository\PearRepository. --- src/Composer/Repository/PearRepository.php | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/Composer/Repository/PearRepository.php b/src/Composer/Repository/PearRepository.php index 9b1d98b93..06095e2fe 100644 --- a/src/Composer/Repository/PearRepository.php +++ b/src/Composer/Repository/PearRepository.php @@ -124,22 +124,24 @@ class PearRepository extends ArrayRepository } } } - + /** * @param array $data - * @return string + * @return string */ private function parseVersion(array $data) { + if (!isset($data['min']) && !isset($data['max'])) { + return '*'; + } + $versions = array(); if (isset($data['min'])) { - $version = '>=' . $data['min']; - } else { - $version = '>=0.0.0'; + $versions[] = '>=' . $data['min']; } if (isset($data['max'])) { - $version .= ',<=' . $data['max']; + $versions[] = '<=' . $data['max']; } - return $version; + return implode(',', $versions); } /** @@ -155,7 +157,7 @@ class PearRepository extends ArrayRepository $data[$name] = $this->parseVersion($options); } elseif ('package' == $name) { foreach ($options as $key => $value) { - $dataKey = $value['name']; + $dataKey = $value['name']; $data[$dataKey] = $this->parseVersion($value); } } elseif ('extension' == $name) { @@ -165,6 +167,7 @@ class PearRepository extends ArrayRepository } } } + var_dump($data);die; return $data; } From 9ca157913abbb8567ab530ae4e78b52498447faf Mon Sep 17 00:00:00 2001 From: Henrique Moody Date: Wed, 18 Jan 2012 09:04:01 -0200 Subject: [PATCH 12/16] Remotion of a debug code. --- src/Composer/Repository/PearRepository.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Composer/Repository/PearRepository.php b/src/Composer/Repository/PearRepository.php index 06095e2fe..f502bd0df 100644 --- a/src/Composer/Repository/PearRepository.php +++ b/src/Composer/Repository/PearRepository.php @@ -167,7 +167,6 @@ class PearRepository extends ArrayRepository } } } - var_dump($data);die; return $data; } From b3d91cab02244906f1f97f256a0b5af4ab00833d Mon Sep 17 00:00:00 2001 From: Henrique Moody Date: Sat, 11 Feb 2012 13:04:33 -0200 Subject: [PATCH 13/16] Update dependence resolution for PEAR2 packages. --- src/Composer/Repository/PearRepository.php | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/Composer/Repository/PearRepository.php b/src/Composer/Repository/PearRepository.php index f502bd0df..1ad09637e 100644 --- a/src/Composer/Repository/PearRepository.php +++ b/src/Composer/Repository/PearRepository.php @@ -157,8 +157,10 @@ class PearRepository extends ArrayRepository $data[$name] = $this->parseVersion($options); } elseif ('package' == $name) { foreach ($options as $key => $value) { - $dataKey = $value['name']; - $data[$dataKey] = $this->parseVersion($value); + if (is_array($value)) { + $dataKey = $value['name']; + $data[$dataKey] = $this->parseVersion($value); + } } } elseif ('extension' == $name) { foreach ($options as $key => $value) { @@ -223,9 +225,13 @@ class PearRepository extends ArrayRepository } } - $depsData = $information->getElementsByTagName('deps')->item(0); - $depsData = $depsData->getElementsByTagName('d')->item(0); - $depsData = $this->parseDependencies($depsData->nodeValue); + $depsData = array(); + foreach ($information->getElementsByTagName('deps') as $depElement) { + $depsVersion = $depElement->getElementsByTagName('v')->item(0)->nodeValue; + $depsData[$depsVersion] = $this->parseDependencies( + $depElement->getElementsByTagName('d')->item(0)->nodeValue + ); + } $revisions = $information->getElementsByTagName('a')->item(0); $revisions = $revisions->getElementsByTagName('r'); @@ -239,10 +245,13 @@ class PearRepository extends ArrayRepository ), 'version' => $version ); + if (isset($depsData[$version])) { + $revisionData += $depsData[$version]; + } try { $this->addPackage( - $loader->load($packageData + $revisionData + $depsData) + $loader->load($packageData + $revisionData) ); } catch (\UnexpectedValueException $e) { continue; From 61c66b98a87b5038b42f8a5f7f52d379e54d60bb Mon Sep 17 00:00:00 2001 From: Henrique Moody Date: Sat, 11 Feb 2012 13:33:25 -0200 Subject: [PATCH 14/16] Correction of wrong variable name. --- src/Composer/Repository/PearRepository.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Composer/Repository/PearRepository.php b/src/Composer/Repository/PearRepository.php index 1ad09637e..7b118ad12 100644 --- a/src/Composer/Repository/PearRepository.php +++ b/src/Composer/Repository/PearRepository.php @@ -192,8 +192,8 @@ class PearRepository extends ArrayRepository $depsData['require'] = $this->parseDependenciesOptions($deps['required']); } - if (isset($depsData['optional'])) { - $depsData['recommend'] = $this->parseDependenciesOptions($depsData['optional']); + if (isset($deps['optional'])) { + $depsData['recommend'] = $this->parseDependenciesOptions($deps['optional']); } return $depsData; From 230f43d009c535fa9bb6b946a5765ecc13f73686 Mon Sep 17 00:00:00 2001 From: Henrique Moody Date: Sat, 11 Feb 2012 15:17:27 -0200 Subject: [PATCH 15/16] Chaged the key "recommend" for "suggest" in the parse of the PEAR2 dependences. --- src/Composer/Repository/PearRepository.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Composer/Repository/PearRepository.php b/src/Composer/Repository/PearRepository.php index 7b118ad12..4c277af83 100644 --- a/src/Composer/Repository/PearRepository.php +++ b/src/Composer/Repository/PearRepository.php @@ -193,7 +193,7 @@ class PearRepository extends ArrayRepository } if (isset($deps['optional'])) { - $depsData['recommend'] = $this->parseDependenciesOptions($deps['optional']); + $depsData['suggest'] = $this->parseDependenciesOptions($deps['optional']); } return $depsData; From 8a5c7b39e401bdbbd8f7b5e1575403578a226652 Mon Sep 17 00:00:00 2001 From: Henrique Moody Date: Sat, 11 Feb 2012 15:58:23 -0200 Subject: [PATCH 16/16] Added "nbproject" folder to the .gitignore list. --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index dfbe013f5..5992f93fc 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ /.project /.buildpath /composer.phar -/vendor \ No newline at end of file +/vendor +/nbproject