@@ -276,7 +276,7 @@ public function getVersion(string $normalizedVersion): ?Version
276276 if (!isset ($ this ->cachedVersions )) {
277277 $ this ->cachedVersions = [];
278278 foreach ($ this ->getVersions () as $ version ) {
279- $ this ->cachedVersions [strtolower ($ version ->getNormalizedVersion ())] = $ version ;
279+ $ this ->cachedVersions [strtolower ($ version ->getNormalizedName ())] = $ version ;
280280 }
281281 }
282282
@@ -420,25 +420,25 @@ public function getActiveVersions(): array
420420 $ activePrereleaseVersions = [];
421421
422422 foreach ($ this ->getSortedVersions () as $ version ) {
423- if ('stable ' !== VersionParser::parseStability ($ version ->getNormalizedVersion ())) {
423+ if ('stable ' !== VersionParser::parseStability ($ version ->getNormalizedName ())) {
424424 continue ;
425425 }
426426
427- [$ majorVersion , $ minorVersion ] = explode ('. ' , $ version ->getNormalizedVersion ());
427+ [$ majorVersion , $ minorVersion ] = explode ('. ' , $ version ->getNormalizedName ());
428428
429429 if ('0 ' === $ majorVersion ) {
430430 $ prereleaseVersion = "$ majorVersion. $ minorVersion " ;
431431
432432 $ activePrereleaseVersions [$ prereleaseVersion ] ??= $ version ;
433- if (version_compare ($ version ->getNormalizedVersion (), $ activePrereleaseVersions [$ prereleaseVersion ]->getNormalizedVersion (), '> ' )) {
433+ if (version_compare ($ version ->getNormalizedName (), $ activePrereleaseVersions [$ prereleaseVersion ]->getNormalizedName (), '> ' )) {
434434 $ activePrereleaseVersions [$ prereleaseVersion ] = $ version ;
435435 }
436436
437437 continue ;
438438 }
439439
440440 $ activeVersions [$ majorVersion ] ??= $ version ;
441- if (version_compare ($ version ->getNormalizedVersion (), $ activeVersions [$ majorVersion ]->getNormalizedVersion (), '> ' )) {
441+ if (version_compare ($ version ->getNormalizedName (), $ activeVersions [$ majorVersion ]->getNormalizedName (), '> ' )) {
442442 $ activeVersions [$ majorVersion ] = $ version ;
443443 }
444444 }
@@ -448,34 +448,34 @@ public function getActiveVersions(): array
448448
449449 // Find newer unstable releases of active versions
450450 foreach ($ this ->getSortedVersions () as $ version ) {
451- if (in_array (VersionParser::parseStability ($ version ->getNormalizedVersion ()), ['stable ' , 'dev ' ], true )) {
451+ if (in_array (VersionParser::parseStability ($ version ->getNormalizedName ()), ['stable ' , 'dev ' ], true )) {
452452 continue ;
453453 }
454454
455- [$ majorVersion , $ minorVersion ] = explode ('. ' , $ version ->getNormalizedVersion ());
455+ [$ majorVersion , $ minorVersion ] = explode ('. ' , $ version ->getNormalizedName ());
456456
457457 $ developmentVersion = "$ majorVersion. $ minorVersion " ;
458458
459459 if ('0 ' === $ majorVersion ) {
460- if (isset ($ activePrereleaseVersions [$ developmentVersion ]) && !version_compare ($ version ->getNormalizedVersion (), $ activePrereleaseVersions [$ developmentVersion ]->getNormalizedVersion (), '> ' )) {
460+ if (isset ($ activePrereleaseVersions [$ developmentVersion ]) && !version_compare ($ version ->getNormalizedName (), $ activePrereleaseVersions [$ developmentVersion ]->getNormalizedName (), '> ' )) {
461461 continue ;
462462 }
463463
464464 $ activePrereleaseDevelopmentVersions [$ developmentVersion ] ??= $ version ;
465- if (version_compare ($ version ->getNormalizedVersion (), $ activePrereleaseDevelopmentVersions [$ developmentVersion ]->getNormalizedVersion (), '> ' )) {
465+ if (version_compare ($ version ->getNormalizedName (), $ activePrereleaseDevelopmentVersions [$ developmentVersion ]->getNormalizedName (), '> ' )) {
466466 $ activePrereleaseDevelopmentVersions [$ developmentVersion ] = $ version ;
467467 }
468468
469469 continue ;
470470 }
471471
472- if (isset ($ activeVersions [$ majorVersion ]) && !version_compare ($ version ->getNormalizedVersion (), $ activeVersions [$ majorVersion ]->getNormalizedVersion (), '> ' )) {
472+ if (isset ($ activeVersions [$ majorVersion ]) && !version_compare ($ version ->getNormalizedName (), $ activeVersions [$ majorVersion ]->getNormalizedName (), '> ' )) {
473473 continue ;
474474 }
475475
476476 $ activeDevelopmentVersions [$ developmentVersion ] ??= $ version ;
477- if (version_compare ($ version ->getNormalizedVersion (), $ activeDevelopmentVersions [$ developmentVersion ]->getNormalizedVersion (), '> ' )) {
478- $ activeDevelopmentVersions [$ version ->getNormalizedVersion ()] = $ version ;
477+ if (version_compare ($ version ->getNormalizedName (), $ activeDevelopmentVersions [$ developmentVersion ]->getNormalizedName (), '> ' )) {
478+ $ activeDevelopmentVersions [$ version ->getNormalizedName ()] = $ version ;
479479 }
480480 }
481481
@@ -515,7 +515,7 @@ public function getHistoricalVersions(): array
515515 public function getDevVersions (): array
516516 {
517517 return array_filter ($ this ->getSortedVersions (), static function (Version $ version ) {
518- if (str_ends_with ($ version ->getNormalizedVersion (), '.9999999-dev ' )) {
518+ if (str_ends_with ($ version ->getNormalizedName (), '.9999999-dev ' )) {
519519 return true ;
520520 }
521521
@@ -532,44 +532,49 @@ public function getDevVersions(): array
532532 */
533533 public function getDevBranchVersions (): array
534534 {
535- return array_filter ($ this ->getSortedVersions (), static fn (Version $ version ) => str_starts_with ($ version ->getNormalizedVersion (), 'dev- ' ));
535+ return array_filter ($ this ->getSortedVersions (), static fn (Version $ version ) => str_starts_with ($ version ->getNormalizedName (), 'dev- ' ));
536536 }
537537
538+ /**
539+ * Sort versions from newest to oldest.
540+ */
538541 public static function sortVersions (Version $ a , Version $ b ): int
539542 {
540- $ aVersion = $ a ->getNormalizedVersion ();
541- $ bVersion = $ b ->getNormalizedVersion ();
543+ $ aName = $ a ->getNormalizedName ();
544+ $ bName = $ b ->getNormalizedName ();
542545
543- // use branch alias for sorting if one is provided
544- if (isset ( $ a ->getExtra ()['branch-alias ' ][$ aVersion ]) ) {
545- $ aVersion = Preg::replace ('{(.x)?-dev$} ' , '.9999999-dev ' , $ a -> getExtra ()[ ' branch-alias ' ][ $ aVersion ] );
546+ // Use the branch alias for sorting if one is provided
547+ if (null !== $ aBranchAlias = $ a ->getExtra ()['branch-alias ' ][$ aName ] ?? null ) {
548+ $ aName = Preg::replace ('{(.x)?-dev$} ' , '.9999999-dev ' , $ aBranchAlias );
546549 }
547- if (isset ( $ b ->getExtra ()['branch-alias ' ][$ bVersion ]) ) {
548- $ bVersion = Preg::replace ('{(.x)?-dev$} ' , '.9999999-dev ' , $ b -> getExtra ()[ ' branch-alias ' ][ $ bVersion ] );
550+ if (null !== $ bBranchAlias = $ b ->getExtra ()['branch-alias ' ][$ bName ] ?? null ) {
551+ $ bName = Preg::replace ('{(.x)?-dev$} ' , '.9999999-dev ' , $ bBranchAlias );
549552 }
550553
551- $ aVersion = Preg::replace ('{^dev-.*} ' , '0.0.0-alpha ' , $ aVersion );
552- $ bVersion = Preg::replace ('{^dev-.*} ' , '0.0.0-alpha ' , $ bVersion );
554+ $ aName = Preg::replace ('{^dev-.*} ' , '0.0.0-alpha ' , $ aName );
555+ $ bName = Preg::replace ('{^dev-.*} ' , '0.0.0-alpha ' , $ bName );
553556
554- // sort default branch first if it is non numeric
555- if ('0.0.0-alpha ' === $ aVersion && $ a ->isDefaultBranch ()) {
557+ // Sort the default branch first if it is non- numeric
558+ if ('0.0.0-alpha ' === $ aName && $ a ->isDefaultBranch ()) {
556559 return -1 ;
557560 }
558- if ('0.0.0-alpha ' === $ bVersion && $ b ->isDefaultBranch ()) {
561+ if ('0.0.0-alpha ' === $ bName && $ b ->isDefaultBranch ()) {
559562 return 1 ;
560563 }
561564
562- // equal versions are sorted by date
563- if ($ aVersion === $ bVersion ) {
564- // make sure sort is stable
565- if ($ a ->getReleasedAt () === $ b ->getReleasedAt ()) {
566- return $ a ->getNormalizedVersion () <=> $ b ->getNormalizedVersion ();
567- }
565+ if ($ aName !== $ bName ) {
566+ return version_compare ($ bName , $ aName );
567+ }
568+
569+ // Equal versions are sorted by release date
570+ $ aReleasedAt = $ a ->getReleasedAt ();
571+ $ bReleasedAt = $ b ->getReleasedAt ();
568572
569- return $ b ->getReleasedAt () > $ a ->getReleasedAt () ? 1 : -1 ;
573+ if (0 !== $ sort = $ bReleasedAt <=> $ aReleasedAt ) {
574+ return $ sort ;
570575 }
571576
572- // the rest is sorted by version
573- return version_compare ( $ bVersion , $ aVersion );
577+ // Add a stable fallback sort
578+ return $ b -> getId () <=> $ a -> getId ( );
574579 }
575580}
0 commit comments