@@ -1596,34 +1596,66 @@ function FWVersionStrToNum(verStr, usePrereleaseRank)
15961596 if (isNaN (baseVersionNum))
15971597 { return 0 ; }
15981598
1599- // Default: numeric-only comparison //
1600- if (usePrereleaseRank !== true )
1601- { return (baseVersionNum * 100 ); }
1599+ let buildSuffixNum = 0 ;
1600+ let versionForBuild = versionText;
16021601
1603- let lowerVersionText = versionText .toLowerCase ();
1604- let prereleaseRank = 99 ; // release //
1602+ // Match shell behavior: do not treat alpha/beta/rc tag numbers
1603+ // as build suffix numbers.
1604+ versionForBuild = versionForBuild .replace (/ [. ][Aa] lpha. * / , ' .0' );
1605+ versionForBuild = versionForBuild .replace (/ [. ][Bb] eta. * / , ' .0' );
1606+ versionForBuild = versionForBuild .replace (/ [. ][Rr][Cc] . * / , ' .0' );
16051607
1606- let rcMatch = lowerVersionText . match ( / rc( \d * ) / );
1607- let betaMatch = lowerVersionText . match ( / beta( \d * ) / );
1608- let alphaMatch = lowerVersionText . match ( / alpha( \d * ) / );
1608+ versionForBuild = versionForBuild . replace ( / [_-] ? [Aa] lpha . * / , ' ' );
1609+ versionForBuild = versionForBuild . replace ( / [_-] ? [Bb] eta . * / , ' ' );
1610+ versionForBuild = versionForBuild . replace ( / [_-] ? [Rr][Cc] . * / , ' ' );
16091611
1610- if (alphaMatch != null )
1611- {
1612- let alphaNum = parseInt (alphaMatch[1 ] || ' 0' , 10 );
1613- prereleaseRank = 20 + Math .min (alphaNum, 19 );
1614- }
1615- else if (betaMatch != null )
1612+ let buildSuffixMatch = versionForBuild .match (
1613+ / ^ \d + (?:\. \d + )* [^ 0-9 . ] + (\d + )(?:[_-][A-Za-z ] + )? $ /
1614+ );
1615+
1616+ if (buildSuffixMatch != null )
16161617 {
1617- let betaNum = parseInt (betaMatch[1 ] || ' 0' , 10 );
1618- prereleaseRank = 50 + Math .min (betaNum, 19 );
1618+ buildSuffixNum = parseInt (buildSuffixMatch[1 ], 10 );
1619+ if (isNaN (buildSuffixNum))
1620+ { buildSuffixNum = 0 ; }
1621+
1622+ // Keep suffix as a 2-digit tie-breaker field.
1623+ buildSuffixNum = Math .min (buildSuffixNum, 99 );
16191624 }
1620- else if (rcMatch != null )
1625+
1626+ let prereleaseRank = 0 ;
1627+
1628+ if (usePrereleaseRank === true )
16211629 {
1622- let rcNum = parseInt (rcMatch[1 ] || ' 0' , 10 );
1623- prereleaseRank = 80 + Math .min (rcNum, 19 );
1630+ let lowerVersionText = versionText .toLowerCase ();
1631+ prereleaseRank = 99 ; // release //
1632+
1633+ let rcMatch = lowerVersionText .match (/ rc(\d * )/ );
1634+ let betaMatch = lowerVersionText .match (/ beta(\d * )/ );
1635+ let alphaMatch = lowerVersionText .match (/ alpha(\d * )/ );
1636+
1637+ if (alphaMatch != null )
1638+ {
1639+ let alphaNum = parseInt (alphaMatch[1 ] || ' 0' , 10 );
1640+ prereleaseRank = 20 + Math .min (alphaNum, 19 );
1641+ }
1642+ else if (betaMatch != null )
1643+ {
1644+ let betaNum = parseInt (betaMatch[1 ] || ' 0' , 10 );
1645+ prereleaseRank = 50 + Math .min (betaNum, 19 );
1646+ }
1647+ else if (rcMatch != null )
1648+ {
1649+ let rcNum = parseInt (rcMatch[1 ] || ' 0' , 10 );
1650+ prereleaseRank = 80 + Math .min (rcNum, 19 );
1651+ }
16241652 }
16251653
1626- return ((baseVersionNum * 100 ) + prereleaseRank);
1654+ return (
1655+ (baseVersionNum * 10000 ) +
1656+ (buildSuffixNum * 100 ) +
1657+ prereleaseRank
1658+ );
16271659}
16281660
16291661/* *----------------------------------------**/
0 commit comments