11
11
use Composer \DependencyResolver \Pool ;
12
12
use Composer \Package \PackageInterface ;
13
13
use Composer \Repository \RepositoryInterface ;
14
- use Magento \ComposerDependencyVersionAuditPlugin \VersionSelectorFactory ;
14
+ use Composer \Package \Version \VersionSelector ;
15
+ use Composer \Repository \RepositorySet ;
16
+ use Exception ;
15
17
16
18
/**
17
19
* Wrapper class for calling Composer functions
@@ -26,20 +28,65 @@ class Version
26
28
* @param string $packageName
27
29
* @param RepositoryInterface $repository
28
30
* @return PackageInterface|null
31
+ * @throws Exception
29
32
*/
30
33
public function findBestCandidate (Composer $ composer , string $ packageName , RepositoryInterface $ repository ): ?PackageInterface
31
34
{
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
+ }
39
44
40
45
if ($ bestCandidate instanceof PackageInterface){
41
46
return $ bestCandidate ;
42
47
}
43
48
return null ;
44
49
}
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
+ }
45
92
}
0 commit comments