1
0
Fork 0

Use a simpler suggested require version of * to keep things simple for extensions which are versioned like PHP, fixes #9483

pull/9887/head
Jordi Boggiano 2021-05-17 14:36:46 +02:00
parent 0021758e0b
commit 459a7d9623
No known key found for this signature in database
GPG Key ID: 7BBD42C429EC80BC
2 changed files with 20 additions and 2 deletions

View File

@ -153,6 +153,16 @@ class VersionSelector
*/ */
public function findRecommendedRequireVersion(PackageInterface $package) public function findRecommendedRequireVersion(PackageInterface $package)
{ {
// Extensions which are versioned in sync with PHP should rather be required as "*" to simplify
// the requires and have only one required version to change when bumping the php requirement
if (0 === strpos($package->getName(), 'ext-')) {
$phpVersion = PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION . '.' . PHP_RELEASE_VERSION;
$extVersion = implode('.', array_slice(explode('.', $package->getVersion()), 0, 3));
if ($phpVersion === $extVersion) {
return '*';
}
}
$version = $package->getVersion(); $version = $package->getVersion();
if (!$package->isDev()) { if (!$package->isDev()) {
return $this->transformVersion($version, $package->getPrettyVersion(), $package->getStability()); return $this->transformVersion($version, $package->getPrettyVersion(), $package->getStability());

View File

@ -270,7 +270,7 @@ class VersionSelectorTest extends TestCase
/** /**
* @dataProvider getRecommendedRequireVersionPackages * @dataProvider getRecommendedRequireVersionPackages
*/ */
public function testFindRecommendedRequireVersion($prettyVersion, $isDev, $stability, $expectedVersion, $branchAlias = null) public function testFindRecommendedRequireVersion($prettyVersion, $isDev, $stability, $expectedVersion, $branchAlias = null, $packageName = null)
{ {
$repositorySet = $this->createMockRepositorySet(); $repositorySet = $this->createMockRepositorySet();
$versionSelector = new VersionSelector($repositorySet); $versionSelector = new VersionSelector($repositorySet);
@ -281,6 +281,10 @@ class VersionSelectorTest extends TestCase
->expects($this->any()) ->expects($this->any())
->method('getPrettyVersion') ->method('getPrettyVersion')
->will($this->returnValue($prettyVersion)); ->will($this->returnValue($prettyVersion));
$package
->expects($this->any())
->method('getName')
->will($this->returnValue($packageName));
$package $package
->expects($this->any()) ->expects($this->any())
->method('getVersion') ->method('getVersion')
@ -312,7 +316,7 @@ class VersionSelectorTest extends TestCase
public function getRecommendedRequireVersionPackages() public function getRecommendedRequireVersionPackages()
{ {
return array( return array(
// real version, is dev package, stability, expected recommendation, [branch-alias] // real version, is dev package, stability, expected recommendation, [branch-alias], [pkg name]
array('1.2.1', false, 'stable', '^1.2'), array('1.2.1', false, 'stable', '^1.2'),
array('1.2', false, 'stable', '^1.2'), array('1.2', false, 'stable', '^1.2'),
array('v1.2.1', false, 'stable', '^1.2'), array('v1.2.1', false, 'stable', '^1.2'),
@ -342,6 +346,10 @@ class VersionSelectorTest extends TestCase
// numeric alias // numeric alias
array('3.x-dev', true, 'dev', '^3.0@dev', '3.0.x-dev'), array('3.x-dev', true, 'dev', '^3.0@dev', '3.0.x-dev'),
array('3.x-dev', true, 'dev', '^3.0@dev', '3.0-dev'), array('3.x-dev', true, 'dev', '^3.0@dev', '3.0-dev'),
// ext in sync with php
array(PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION . '.' . PHP_RELEASE_VERSION, false, 'stable', '*', null, 'ext-filter'),
// ext versioned individually
array('3.0.5', false, 'stable', '^3.0', null, 'ext-xdebug'),
); );
} }