Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Command/InfoCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ public function execute(InputInterface $input, OutputInterface $output): int
$platformConstraints = [];
$composerPlatform = new PhpBinaryPathBasedPlatformRepository($targetPlatform->phpBinaryPath, $composer, new InstalledPiePackages(), null);
foreach ($composerPlatform->getPackages() as $platformPackage) {
$platformConstraints[$platformPackage->getName()][] = new Constraint('==', $platformPackage->getPrettyVersion());
$platformConstraints[$platformPackage->getName()][] = new Constraint('==', $platformPackage->getVersion());
}

foreach ($requires as $requireName => $requireLink) {
Expand Down
6 changes: 3 additions & 3 deletions src/ComposerIntegration/VersionSelectorFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ private function __construct()
{
}

private static function factoryRepositorySet(Composer $composer, string|null $requestedVersion): RepositorySet
private static function factoryRepositorySet(Composer $composer, RequestedPackageAndVersion $requestedPackageAndVersion): RepositorySet
{
$repositorySet = new RepositorySet(DetermineMinimumStability::fromRequestedVersion($requestedVersion));
$repositorySet = new RepositorySet(DetermineMinimumStability::fromRequestedVersion($requestedPackageAndVersion));
$repositorySet->addRepository(new CompositeRepository($composer->getRepositoryManager()->getRepositories()));

return $repositorySet;
Expand All @@ -34,7 +34,7 @@ public static function make(
TargetPlatform $targetPlatform,
): VersionSelector {
return new VersionSelector(
self::factoryRepositorySet($composer, $requestedPackageAndVersion->version),
self::factoryRepositorySet($composer, $requestedPackageAndVersion),
new PhpBinaryPathBasedPlatformRepository($targetPlatform->phpBinaryPath, $composer, new InstalledPiePackages(), null),
);
}
Expand Down
12 changes: 9 additions & 3 deletions src/DependencyResolver/DetermineMinimumStability.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
use Composer\Semver\VersionParser;
use Webmozart\Assert\Assert;

use function str_starts_with;

/**
* Utility to extract a valid Stability (see {@see \Composer\Package\BasePackage::$stabilities}) from a requested
* package version in a predictable way.
Expand Down Expand Up @@ -39,13 +41,17 @@ private static function assertValidStabilityString(string $stability): void
}

/** @return self::STABILITY_* */
public static function fromRequestedVersion(string|null $requestedVersion): string
public static function fromRequestedVersion(RequestedPackageAndVersion $requestedPackageAndVersion): string
{
if ($requestedVersion === null) {
if ($requestedPackageAndVersion->version === null) {
if (str_starts_with($requestedPackageAndVersion->package, 'php/')) {
return self::STABILITY_DEV;
}

return self::DEFAULT_MINIMUM_STABILITY;
}

$stability = VersionParser::parseStability($requestedVersion);
$stability = VersionParser::parseStability($requestedPackageAndVersion->version);
self::assertValidStabilityString($stability);

return $stability;
Expand Down
2 changes: 1 addition & 1 deletion src/DependencyResolver/UnableToResolveRequirement.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public static function fromRequirement(
'Unable to find an installable package %s for %s, with minimum stability %s.%s',
$requestedPackageAndVersion->package,
$requestedPackageAndVersion->version !== null ? sprintf('version %s', $requestedPackageAndVersion->version) : 'the latest compatible version',
DetermineMinimumStability::fromRequestedVersion($requestedPackageAndVersion->version),
DetermineMinimumStability::fromRequestedVersion($requestedPackageAndVersion),
count($errors) ? "\n\n" . implode("\n\n", $errors) : '',
),
$requestedPackageAndVersion,
Expand Down
46 changes: 26 additions & 20 deletions test/unit/DependencyResolver/DetermineMinimumStabilityTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace Php\PieUnitTest\DependencyResolver;

use Php\Pie\DependencyResolver\DetermineMinimumStability;
use Php\Pie\DependencyResolver\RequestedPackageAndVersion;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\TestCase;
Expand All @@ -15,43 +16,48 @@
#[CoversClass(DetermineMinimumStability::class)]
final class DetermineMinimumStabilityTest extends TestCase
{
/** @return array<string, array{0: non-empty-string|null, 1: non-empty-string}> */
/** @return array<string, array{0: RequestedPackageAndVersion, 1: non-empty-string}> */
public static function requestedVersionToStabilityProvider(): array
{
$providerCases = [
[null, 'stable'],
['1.2.3', 'stable'],
['1.2.3@stable', 'stable'],
['1.2.3@RC', 'RC'],
['1.2.3@rc', 'RC'],
['1.2.3@beta', 'beta'],
['1.2.3@alpha', 'alpha'],
['1.2.3@dev', 'dev'],
['*@stable', 'stable'],
['*@RC', 'RC'],
['*@rc', 'RC'],
['*@beta', 'beta'],
['*@alpha', 'alpha'],
['*@dev', 'dev'],
['dev-main', 'dev'],
['v1.x-dev', 'dev'],
[new RequestedPackageAndVersion('foo/bar', '1.2.3'), 'stable'],
[new RequestedPackageAndVersion('foo/bar', '1.2.3@stable'), 'stable'],
[new RequestedPackageAndVersion('foo/bar', '1.2.3@RC'), 'RC'],
[new RequestedPackageAndVersion('foo/bar', '1.2.3@rc'), 'RC'],
[new RequestedPackageAndVersion('foo/bar', '1.2.3@beta'), 'beta'],
[new RequestedPackageAndVersion('foo/bar', '1.2.3@alpha'), 'alpha'],
[new RequestedPackageAndVersion('foo/bar', '1.2.3@dev'), 'dev'],
[new RequestedPackageAndVersion('foo/bar', '*@stable'), 'stable'],
[new RequestedPackageAndVersion('foo/bar', '*@RC'), 'RC'],
[new RequestedPackageAndVersion('foo/bar', '*@rc'), 'RC'],
[new RequestedPackageAndVersion('foo/bar', '*@beta'), 'beta'],
[new RequestedPackageAndVersion('foo/bar', '*@alpha'), 'alpha'],
[new RequestedPackageAndVersion('foo/bar', '*@dev'), 'dev'],
[new RequestedPackageAndVersion('foo/bar', 'dev-main'), 'dev'],
[new RequestedPackageAndVersion('foo/bar', 'v1.x-dev'), 'dev'],
[new RequestedPackageAndVersion('php/bz2', null), 'dev'],
[new RequestedPackageAndVersion('php/bz2', '*@stable'), 'stable'],
[new RequestedPackageAndVersion('php/bz2', '*@RC'), 'RC'],
[new RequestedPackageAndVersion('php/bz2', '*@beta'), 'beta'],
[new RequestedPackageAndVersion('php/bz2', '*@alpha'), 'alpha'],
[new RequestedPackageAndVersion('php/bz2', '*@dev'), 'dev'],
];

return array_combine(
array_map(
static fn (array $case) => $case[0] ?? 'null',
static fn (array $case) => $case[0]->package . ':' . ($case[0]->version ?? 'null'),
$providerCases,
),
$providerCases,
);
}

#[DataProvider('requestedVersionToStabilityProvider')]
public function testFromRequestedVersion(string|null $requestedVersion, string $expectedStability): void
public function testFromRequestedVersion(RequestedPackageAndVersion $requestedPackageAndVersion, string $expectedStability): void
{
self::assertSame(
$expectedStability,
DetermineMinimumStability::fromRequestedVersion($requestedVersion),
DetermineMinimumStability::fromRequestedVersion($requestedPackageAndVersion),
);
}
}