99use Cake \Console \ConsoleIo ;
1010use Cake \Log \Log ;
1111use Composer \Semver \Intervals ;
12- use Composer \Semver \Semver ;
1312use Composer \Semver \VersionParser ;
1413use Packagist \Api \Client ;
1514use UnexpectedValueException ;
1918 */
2019class SyncPackagesCommand extends Command
2120{
21+ private const CAKEPHP_SUBPACKAGES = [
22+ 'cakephp/cache ' ,
23+ 'cakephp/collection ' ,
24+ 'cakephp/console ' ,
25+ 'cakephp/database ' ,
26+ 'cakephp/datasource ' ,
27+ 'cakephp/event ' ,
28+ 'cakephp/form ' ,
29+ 'cakephp/http ' ,
30+ 'cakephp/i18n ' ,
31+ 'cakephp/log ' ,
32+ 'cakephp/orm ' ,
33+ 'cakephp/utility ' ,
34+ 'cakephp/validation ' ,
35+ ];
36+
37+ private const PHP_VERSIONS = [
38+ '7 ' => [0 , 1 , 2 , 3 , 4 ],
39+ '8 ' => [0 , 1 , 2 , 3 , 4 , 5 ],
40+ ];
41+
42+ private const CAKEPHP_VERSIONS = [
43+ '3 ' => [0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ],
44+ '4 ' => [0 , 1 , 2 , 3 , 4 , 5 , 6 ],
45+ '5 ' => [0 , 1 , 2 , 3 ],
46+ ];
47+
2248 private Client $ client ;
2349
2450 /**
@@ -121,34 +147,18 @@ private function getDataForPackage(string $packageName): array
121147 foreach ($ versions as $ versionMeta ) {
122148 $ phpRequire = $ versionMeta ->getRequire ()['php ' ] ?? null ;
123149 if ($ phpRequire ) {
124- $ meta = $ this ->checkPHPVersion ($ meta , $ phpRequire );
150+ $ meta = $ this ->appendVersionTags ($ meta , $ phpRequire, ' PHP ' , self :: PHP_VERSIONS );
125151 }
126152
127153 $ cakephpRequire = $ versionMeta ->getRequire ()['cakephp/cakephp ' ] ?? null ;
128154 if ($ cakephpRequire ) {
129- $ meta = $ this ->checkCakeVersion ($ meta , $ cakephpRequire );
155+ $ meta = $ this ->appendVersionTags ($ meta , $ cakephpRequire, ' CakePHP ' , self :: CAKEPHP_VERSIONS );
130156 } else {
131157 // Cake has standalone sub-packages
132- $ subpackages = [
133- 'cakephp/cache ' ,
134- 'cakephp/collection ' ,
135- 'cakephp/console ' ,
136- 'cakephp/database ' ,
137- 'cakephp/datasource ' ,
138- 'cakephp/event ' ,
139- 'cakephp/form ' ,
140- 'cakephp/http ' ,
141- 'cakephp/i18n ' ,
142- 'cakephp/log ' ,
143- 'cakephp/orm ' ,
144- 'cakephp/utility ' ,
145- 'cakephp/validation ' ,
146- ];
147-
148- foreach ($ subpackages as $ subpackage ) {
158+ foreach (self ::CAKEPHP_SUBPACKAGES as $ subpackage ) {
149159 $ cakephpRequire = $ versionMeta ->getRequire ()[$ subpackage ] ?? null ;
150160 if ($ cakephpRequire ) {
151- $ meta = $ this ->checkCakeVersion ($ meta , $ cakephpRequire );
161+ $ meta = $ this ->appendVersionTags ($ meta , $ cakephpRequire, ' CakePHP ' , self :: CAKEPHP_VERSIONS );
152162 }
153163 }
154164 }
@@ -160,7 +170,7 @@ private function getDataForPackage(string $packageName): array
160170 });
161171 $ latestStable = end ($ stableVersions );
162172
163- $ data = [
173+ return [
164174 'package ' => $ packageName ,
165175 'description ' => $ metaDetails ->getDescription (),
166176 'repo_url ' => $ metaDetails ->getRepository (),
@@ -170,57 +180,25 @@ private function getDataForPackage(string $packageName): array
170180 'latest_stable_version ' => $ latestStable ? $ latestStable ->getVersion () : null ,
171181 'is_abandoned ' => $ metaDetails ->isAbandoned (),
172182 ];
173-
174- return $ data ;
175- }
176-
177- /**
178- * @param array $meta
179- * @param string $packageConstraint
180- * @return array
181- */
182- private function checkPHPVersion (array $ meta , string $ packageConstraint ): array
183- {
184- $ phpVersions = [
185- '8.5.0 ' => 'PHP: 8.5 ' ,
186- '8.4.0 ' => 'PHP: 8.4 ' ,
187- '8.3.0 ' => 'PHP: 8.3 ' ,
188- '8.2.0 ' => 'PHP: 8.2 ' ,
189- '8.1.0 ' => 'PHP: 8.1 ' ,
190- '8.0.0 ' => 'PHP: 8.0 ' ,
191- '7.4.0 ' => 'PHP: 7.4 ' ,
192- '7.3.0 ' => 'PHP: 7.3 ' ,
193- '7.2.0 ' => 'PHP: 7.2 ' ,
194- '7.1.0 ' => 'PHP: 7.1 ' ,
195- '7.0.0 ' => 'PHP: 7.0 ' ,
196- ];
197-
198- foreach ($ phpVersions as $ version => $ label ) {
199- if (Semver::satisfies ($ version , $ packageConstraint ) && !in_array ($ label , $ meta )) {
200- $ meta [] = $ label ;
201- }
202- }
203-
204- return $ meta ;
205183 }
206184
207185 /**
208- * @param array $meta
209- * @param string $packageConstraint
186+ * @param array $meta The meta array to adjust
187+ * @param string $packageConstraint The meta array which contains the current version strings
188+ * @param string $tagPrefix The prefix which should be used for the tag
189+ * @param array<string, array<int>> $versions The versions to check
210190 * @return array
211191 */
212- private function checkCakeVersion (array $ meta , string $ packageConstraint ): array
213- {
214- $ versions = [
215- '3 ' => [0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ],
216- '4 ' => [0 ,1 ,2 ,3 ,4 ,5 ,6 ],
217- '5 ' => [0 ,1 ,2 ,3 ],
218- ];
219-
192+ private function appendVersionTags (
193+ array $ meta ,
194+ string $ packageConstraint ,
195+ string $ tagPrefix ,
196+ array $ versions ,
197+ ): array {
220198 foreach ($ versions as $ majorVersionNr => $ minorVersions ) {
221199 foreach ($ minorVersions as $ minorVersionNr ) {
222200 $ minorVersion = sprintf ('%s.%s ' , $ majorVersionNr , $ minorVersionNr );
223- $ tagLabel = sprintf ('CakePHP : %s.%s ' , $ majorVersionNr , $ minorVersionNr );
201+ $ tagLabel = sprintf ('%s : %s ' , $ tagPrefix , $ minorVersion );
224202 if (
225203 $ this ->constraintsIntersect ($ packageConstraint , $ minorVersion ) &&
226204 !in_array ($ tagLabel , $ meta , true )
0 commit comments