1
0
Fork 0

Revert Locker change, ignore PEAR packages whose version cannot be parsed.

pull/831/head
Alexey Prilipko 2012-07-02 23:11:37 +11:00
parent 9ba3deb91b
commit 22aef0124e
4 changed files with 16 additions and 36 deletions

View File

@ -229,22 +229,18 @@ In this case the short name of the channel is `pear2`, so the
It is possible to alias all pear channel packages with custom name.
Example:
You own private pear repository and going to use composer abilities to bring
dependencies from vcs or transit to composer repository scheme.
List of packages:
You own private pear repository and going to use composer abilities to bring dependencies from vcs or transit to composer repository scheme.
Your repository list of packages:
* BasePackage, requires nothing
* IntermediatePackage, depends on BasePackage
* TopLevelPackage1 and TopLevelPackage2 both dependth on IntermediatePackage.
For composer it looks like:
For composer it looks like:
* "pear-pear.foobar.repo/IntermediatePackage" depends on "pear-pear.foobar.repo/BasePackage",
* "pear-pear.foobar.repo/TopLevelPackage1" depends on "pear-pear.foobar.repo/IntermediatePackage",
* "pear-pear.foobar.repo/TopLevelPackage2" depends on "pear-pear.foobar.repo/IntermediatePackage"
When you update one of your packages to composer naming scheme or made it
available through vcs your older dependencies would not see new version cause it would be named
like "foobar/IntermediatePackage".
Specifying 'vendor-alias' for pear repository you will get all its packages aliased with composer-like names.
Following example would take BasePackage, TopLevelPackage1 and TopLevelPackage2 packages from pear repository
and IntermediatePackage from github repository:
When you update one of your packages to composer naming scheme or made it available through vcs, your older dependencies would not see new version, cause it would be named like "foobar/IntermediatePackage". Specifying 'vendor-alias' for pear repository, you will get all its packages aliased with composer-like names. Following example would take BasePackage, TopLevelPackage1 and TopLevelPackage2 packages from pear repository and IntermediatePackage from github repository:
{
"repositories": [

View File

@ -211,7 +211,7 @@ class Locker
}
$name = $package->getPrettyName();
$version = $package->getVersion();
$version = $package->getPrettyVersion();
if (!$name || !$version) {
throw new \LogicException(sprintf(

View File

@ -91,9 +91,13 @@ class PearRepository extends ArrayRepository
$result = array();
foreach ($channelInfo->getPackages() as $packageDefinition) {
foreach ($packageDefinition->getReleases() as $version => $releaseInfo) {
$normalizedVersion = $this->parseVersion($version);
if (!$normalizedVersion) {
continue; // skip packages with unparsable versions
try {
$normalizedVersion = $versionParser->normalize($version);
} catch (\UnexpectedValueException $e) {
if ($this->io->isVerbose()) {
$this->io->write('Could not load '.$packageDefinition->getPackageName().' '.$version.': '.$e->getMessage());
}
continue;
}
$composerPackageName = $this->buildComposerPackageName($packageDefinition->getChannelName(), $packageDefinition->getPackageName());
@ -175,24 +179,4 @@ class PearRepository extends ArrayRepository
return "pear-{$channelName}/{$packageName}";
}
/**
* Softened version parser.
*
* @param string $version
* @return null|string
*/
private function parseVersion($version)
{
if (preg_match('{^v?(\d{1,3})(\.\d+)?(\.\d+)?(\.\d+)?}i', $version, $matches)) {
$version = $matches[1]
.(!empty($matches[2]) ? $matches[2] : '.0')
.(!empty($matches[3]) ? $matches[3] : '.0')
.(!empty($matches[4]) ? $matches[4] : '.0');
return $version;
}
return null;
}
}

View File

@ -138,7 +138,7 @@ class LockerTest extends \PHPUnit_Framework_TestCase
->will($this->returnValue('pkg1'));
$package1
->expects($this->once())
->method('getVersion')
->method('getPrettyVersion')
->will($this->returnValue('1.0.0-beta'));
$package2
@ -147,7 +147,7 @@ class LockerTest extends \PHPUnit_Framework_TestCase
->will($this->returnValue('pkg2'));
$package2
->expects($this->once())
->method('getVersion')
->method('getPrettyVersion')
->will($this->returnValue('0.1.10'));
$json