Make sure the default branch alias is never used as a constraint by the VersionSelector
parent
d00edab884
commit
62bd81bf7a
|
@ -346,7 +346,11 @@ class ArrayLoader implements LoaderInterface
|
|||
}
|
||||
|
||||
// normalize without -dev and ensure it's a numeric branch that is parseable
|
||||
$validatedTargetBranch = $this->versionParser->normalizeBranch(substr($targetBranch, 0, -4));
|
||||
if ($targetBranch === VersionParser::DEFAULT_BRANCH_ALIAS) {
|
||||
$validatedTargetBranch = VersionParser::DEFAULT_BRANCH_ALIAS;
|
||||
} else {
|
||||
$validatedTargetBranch = $this->versionParser->normalizeBranch(substr($targetBranch, 0, -4));
|
||||
}
|
||||
if ('-dev' !== substr($validatedTargetBranch, -4)) {
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
namespace Composer\Package\Version;
|
||||
|
||||
use Composer\Package\BasePackage;
|
||||
use Composer\Package\AliasPackage;
|
||||
use Composer\Package\PackageInterface;
|
||||
use Composer\Composer;
|
||||
use Composer\Package\Loader\ArrayLoader;
|
||||
|
@ -127,11 +128,16 @@ class VersionSelector
|
|||
}
|
||||
}
|
||||
|
||||
// if we end up with 9999999-dev as selected package, make sure we use the original version instead of the alias
|
||||
if ($package instanceof AliasPackage && $package->getVersion() === VersionParser::DEFAULT_BRANCH_ALIAS) {
|
||||
$package = $package->getAliasOf();
|
||||
}
|
||||
|
||||
return $package;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a concrete version, this returns a ~ constraint (when possible)
|
||||
* Given a concrete version, this returns a ^ constraint (when possible)
|
||||
* that should be used, for example, in composer.json.
|
||||
*
|
||||
* For example:
|
||||
|
@ -155,7 +161,7 @@ class VersionSelector
|
|||
$loader = new ArrayLoader($this->getParser());
|
||||
$dumper = new ArrayDumper();
|
||||
$extra = $loader->getBranchAlias($dumper->dump($package));
|
||||
if ($extra) {
|
||||
if ($extra && $extra !== VersionParser::DEFAULT_BRANCH_ALIAS) {
|
||||
$extra = preg_replace('{^(\d+\.\d+\.\d+)(\.9999999)-dev$}', '$1.0', $extra, -1, $count);
|
||||
if ($count) {
|
||||
$extra = str_replace('.9999999', '.0', $extra);
|
||||
|
|
|
@ -15,8 +15,9 @@ namespace Composer\Test\Package\Version;
|
|||
use Composer\Package\Version\VersionSelector;
|
||||
use Composer\Package\Package;
|
||||
use Composer\Package\Link;
|
||||
use Composer\Package\AliasPackage;
|
||||
use Composer\Repository\PlatformRepository;
|
||||
use Composer\Semver\VersionParser;
|
||||
use Composer\Package\Version\VersionParser;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class VersionSelectorTest extends TestCase
|
||||
|
@ -233,6 +234,27 @@ class VersionSelectorTest extends TestCase
|
|||
$this->assertSame($package2, $best, 'Latest version should be returned (1.1.0-beta)');
|
||||
}
|
||||
|
||||
public function testDefaultBranchAliasIsNeverReturned()
|
||||
{
|
||||
$packageName = 'foobar';
|
||||
|
||||
$package = $this->createPackage('1.1.0-beta');
|
||||
$package2 = $this->createPackage('dev-main');
|
||||
$package2Alias = new AliasPackage($package2, VersionParser::DEFAULT_BRANCH_ALIAS, VersionParser::DEFAULT_BRANCH_ALIAS);
|
||||
$packages = array($package, $package2Alias);
|
||||
|
||||
$repositorySet = $this->createMockRepositorySet();
|
||||
$repositorySet->expects($this->once())
|
||||
->method('findPackages')
|
||||
->with($packageName, null)
|
||||
->will($this->returnValue($packages));
|
||||
|
||||
$versionSelector = new VersionSelector($repositorySet);
|
||||
$best = $versionSelector->findBestCandidate($packageName, null, 'dev');
|
||||
|
||||
$this->assertSame($package2, $best, 'Latest version should be returned (dev-main)');
|
||||
}
|
||||
|
||||
public function testFalseReturnedOnNoPackages()
|
||||
{
|
||||
$repositorySet = $this->createMockRepositorySet();
|
||||
|
@ -316,6 +338,7 @@ class VersionSelectorTest extends TestCase
|
|||
array('dev-master', true, 'dev', '^2.0@dev', '2.x-dev'),
|
||||
array('dev-master', true, 'dev', '^0.3.0@dev', '0.3.x-dev'),
|
||||
array('dev-master', true, 'dev', '^0.0.3@dev', '0.0.3.x-dev'),
|
||||
array('dev-master', true, 'dev', 'dev-master', VersionParser::DEFAULT_BRANCH_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-dev'),
|
||||
|
|
Loading…
Reference in New Issue