Skip to content

Commit 5ca20e9

Browse files
Allow capture suffix build digits like -gnuton1
Allow capture suffix build digits like -gnuton1
1 parent 8a018e1 commit 5ca20e9

1 file changed

Lines changed: 52 additions & 20 deletions

File tree

MerlinAU.asp

Lines changed: 52 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)