Improved version comparison logic

This commit is contained in:
David Carley
2021-03-05 15:32:10 -08:00
parent fd371f5189
commit 565a8324fb

View File

@@ -30,27 +30,27 @@
var api = require('./api'); var api = require('./api');
var cookie = require('./cookie')('bbctrl-'); var cookie = require('./cookie')('bbctrl-');
var Sock = require('./sock'); var Sock = require('./sock');
const { exec } = require('child_process');
function compare_versions(a, b) { function is_newer_version(current, latest) {
var reStripTrailingZeros = /(\.0+)+$/; const pattern = /(\d+)\.(\d+)\.(\d+)(.*)/;
var segsA = a.replace(reStripTrailingZeros, '').split('.'); const currentParts = current.match(pattern);
var segsB = b.replace(reStripTrailingZeros, '').split('.'); const latestParts = latest.match(pattern);
var l = Math.min(segsA.length, segsB.length);
for (var i = 0; i < l; i++) { // Normal version comparisons
var diff = parseInt(segsA[i], 10) - parseInt(segsB[i], 10); const major = latestParts[1] > currentParts[1];
if (diff) return diff; const minor = latestParts[2] > currentParts[2];
const patch = latestParts[3] > currentParts[3];
// If current is a pre-release, and latest is a release
const prerelease = latestParts[4].length === 0 && currentParts[4].length > 0;
// 'latest' is newer than 'current' if any of them are true
return major || minor || patch || prerelease;
} }
return segsA.length - segsB.length;
}
function is_object(o) {return o !== null && typeof o == 'object'} function is_object(o) {return o !== null && typeof o == 'object'}
function is_array(o) {return Array.isArray(o)} function is_array(o) {return Array.isArray(o)}
function update_array(dst, src) { function update_array(dst, src) {
while (dst.length) dst.pop() while (dst.length) dst.pop()
for (var i = 0; i < src.length; i++) for (var i = 0; i < src.length; i++)
@@ -292,7 +292,7 @@ module.exports = new Vue({
show_upgrade: function () { show_upgrade: function () {
if (!this.latestVersion) return false; if (!this.latestVersion) return false;
return compare_versions(this.config.version, this.latestVersion) < 0; return is_newer_version(this.config.version, this.latestVersion);
}, },
update: function () { update: function () {