1111use Composer \DependencyResolver \Pool ;
1212use Composer \Package \PackageInterface ;
1313use 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}
0 commit comments