@@ -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,13 +515,15 @@ 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
522+ $ metadata = $ version ->getCurrentMetadata ();
523+
522524 static $ parser = new VersionParser ();
523525
524- return $ version ->hasVersionAlias () && str_ends_with ((string ) $ parser ->normalize ($ version ->getVersionAlias ()), '.9999999-dev ' );
526+ return $ metadata ->hasVersionAlias () && str_ends_with ((string ) $ parser ->normalize ($ metadata ->getVersionAlias ()), '.9999999-dev ' );
525527 });
526528 }
527529
@@ -532,44 +534,49 @@ public function getDevVersions(): array
532534 */
533535 public function getDevBranchVersions (): array
534536 {
535- return array_filter ($ this ->getSortedVersions (), static fn (Version $ version ) => str_starts_with ($ version ->getNormalizedVersion (), 'dev- ' ));
537+ return array_filter ($ this ->getSortedVersions (), static fn (Version $ version ) => str_starts_with ($ version ->getNormalizedName (), 'dev- ' ));
536538 }
537539
540+ /**
541+ * Sort versions from newest to oldest.
542+ */
538543 public static function sortVersions (Version $ a , Version $ b ): int
539544 {
540- $ aVersion = $ a ->getNormalizedVersion ();
541- $ bVersion = $ b ->getNormalizedVersion ();
545+ $ aName = $ a ->getNormalizedName ();
546+ $ bName = $ b ->getNormalizedName ();
542547
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 ] );
548+ // Use the branch alias for sorting if one is provided
549+ if (null !== $ aBranchAlias = $ a ->getCurrentMetadata ()-> getExtra ()['branch-alias ' ][$ aName ] ?? null ) {
550+ $ aName = Preg::replace ('{(.x)?-dev$} ' , '.9999999-dev ' , $ aBranchAlias );
546551 }
547- if (isset ( $ b ->getExtra ()['branch-alias ' ][$ bVersion ]) ) {
548- $ bVersion = Preg::replace ('{(.x)?-dev$} ' , '.9999999-dev ' , $ b -> getExtra ()[ ' branch-alias ' ][ $ bVersion ] );
552+ if (null !== $ bBranchAlias = $ b ->getCurrentMetadata ()-> getExtra ()['branch-alias ' ][$ bName ] ?? null ) {
553+ $ bName = Preg::replace ('{(.x)?-dev$} ' , '.9999999-dev ' , $ bBranchAlias );
549554 }
550555
551- $ aVersion = Preg::replace ('{^dev-.*} ' , '0.0.0-alpha ' , $ aVersion );
552- $ bVersion = Preg::replace ('{^dev-.*} ' , '0.0.0-alpha ' , $ bVersion );
556+ $ aName = Preg::replace ('{^dev-.*} ' , '0.0.0-alpha ' , $ aName );
557+ $ bName = Preg::replace ('{^dev-.*} ' , '0.0.0-alpha ' , $ bName );
553558
554- // sort default branch first if it is non numeric
555- if ('0.0.0-alpha ' === $ aVersion && $ a ->isDefaultBranch ()) {
559+ // Sort the default branch first if it is non- numeric
560+ if ('0.0.0-alpha ' === $ aName && $ a ->isDefaultBranch ()) {
556561 return -1 ;
557562 }
558- if ('0.0.0-alpha ' === $ bVersion && $ b ->isDefaultBranch ()) {
563+ if ('0.0.0-alpha ' === $ bName && $ b ->isDefaultBranch ()) {
559564 return 1 ;
560565 }
561566
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- }
567+ if ($ aName !== $ bName ) {
568+ return version_compare ($ bName , $ aName );
569+ }
570+
571+ // Equal versions are sorted by release date
572+ $ aReleasedAt = $ a ->getCurrentMetadata ()->getReleasedAt ();
573+ $ bReleasedAt = $ b ->getCurrentMetadata ()->getReleasedAt ();
568574
569- return $ b ->getReleasedAt () > $ a ->getReleasedAt () ? 1 : -1 ;
575+ if (0 !== $ sort = $ bReleasedAt <=> $ aReleasedAt ) {
576+ return $ sort ;
570577 }
571578
572- // the rest is sorted by version
573- return version_compare ( $ bVersion , $ aVersion );
579+ // Add a stable fallback sort
580+ return $ b -> getId () <=> $ a -> getId ( );
574581 }
575582}
0 commit comments