Skip to content

Commit 2e846ae

Browse files
authored
Merge pull request #2 from magento-commerce/MC-41943
MC-41943: Add Support for Composer V2 in plugin.
2 parents 5d75c24 + 634b893 commit 2e846ae

File tree

3 files changed

+58
-40
lines changed

3 files changed

+58
-40
lines changed

composer.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
"name": "magento/composer-dependency-version-audit-plugin",
33
"type": "composer-plugin",
44
"description": "Validating packages through a composer plugin",
5-
"version": "0.1.0",
5+
"version": "0.1.1",
66
"license": [
77
"OSL-3.0",
88
"AFL-3.0"
99
],
1010
"require": {
11-
"composer/composer": "<=1.10.20",
12-
"composer-plugin-api": "^1.0"
11+
"composer/composer": "^1.9 || ^2.0",
12+
"composer-plugin-api": "^1.0 || ^2.0"
1313
},
1414
"require-dev": {
1515
"phpunit/phpunit": "^9"

src/Utils/Version.php

+55-8
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
use Composer\DependencyResolver\Pool;
1212
use Composer\Package\PackageInterface;
1313
use Composer\Repository\RepositoryInterface;
14-
use Magento\ComposerDependencyVersionAuditPlugin\VersionSelectorFactory;
14+
use Composer\Package\Version\VersionSelector;
15+
use Composer\Repository\RepositorySet;
16+
use Exception;
1517

1618
/**
1719
* Wrapper class for calling Composer functions
@@ -26,20 +28,65 @@ class Version
2628
* @param string $packageName
2729
* @param RepositoryInterface $repository
2830
* @return PackageInterface|null
31+
* @throws Exception
2932
*/
3033
public function findBestCandidate(Composer $composer, string $packageName, RepositoryInterface $repository): ?PackageInterface
3134
{
32-
$pool = new Pool(
33-
$composer->getPackage()->getMinimumStability(),
34-
$composer->getPackage()->getStabilityFlags()
35-
);
36-
$pool->addRepository($repository);
37-
$versionSelector = VersionSelectorFactory::create($pool);
38-
$bestCandidate = $versionSelector->findBestCandidate($packageName);
35+
$composerMajorVersion = (int)explode('.', $composer::VERSION)[0];
36+
37+
if ($composerMajorVersion === 1) {
38+
$bestCandidate = $this->findBestCandidateComposer1($composer, $packageName, $repository);
39+
} elseif ($composerMajorVersion === 2) {
40+
$bestCandidate = $this->findBestCandidateComposer2($composer, $packageName, $repository);
41+
} else {
42+
throw new Exception("Unrecognized Composer Version");
43+
}
3944

4045
if($bestCandidate instanceof PackageInterface){
4146
return $bestCandidate;
4247
}
4348
return null;
4449
}
50+
51+
/**
52+
* Get Highest version package for Composer V1
53+
*
54+
* @param Composer $composer
55+
* @param string $packageName
56+
* @param RepositoryInterface $repository
57+
* @return PackageInterface|false
58+
*/
59+
public function findBestCandidateComposer1(Composer $composer, string $packageName, RepositoryInterface $repository)
60+
{
61+
$minStability = $composer->getPackage()->getMinimumStability();
62+
$stabilityFlags = $composer->getPackage()->getStabilityFlags();
63+
if (!$minStability) {
64+
$minStability = 'stable';
65+
}
66+
$pool = new Pool($minStability, $stabilityFlags);
67+
$pool->addRepository($repository);
68+
return (new VersionSelector($pool))->findBestCandidate($packageName);
69+
}
70+
71+
/**
72+
* Get Highest version package for Composer V2
73+
*
74+
* @param Composer $composer
75+
* @param string $packageName
76+
* @param RepositoryInterface $repository
77+
* @return PackageInterface|false
78+
*/
79+
public function findBestCandidateComposer2(Composer $composer, string $packageName, RepositoryInterface $repository)
80+
{
81+
$minStability = $composer->getPackage()->getMinimumStability();
82+
$stabilityFlags = $composer->getPackage()->getStabilityFlags();
83+
84+
if (!$minStability) {
85+
$minStability = 'stable';
86+
}
87+
88+
$repositorySet = new RepositorySet($minStability, $stabilityFlags);
89+
$repositorySet->addRepository($repository);
90+
return (new VersionSelector($repositorySet))->findBestCandidate($packageName);
91+
}
4592
}

src/VersionSelectorFactory.php

-29
This file was deleted.

0 commit comments

Comments
 (0)