Merge pull request #18 from dacarley/version-comparisons
Improved version comparison logic
This commit is contained in:
@@ -30,27 +30,39 @@
|
|||||||
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++) {
|
if (!currentParts || !latestParts) {
|
||||||
var diff = parseInt(segsA[i], 10) - parseInt(segsB[i], 10);
|
return false;
|
||||||
if (diff) return diff;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return segsA.length - segsB.length;
|
// Normal version comparisons
|
||||||
|
const major = latestParts[1] - currentParts[1];
|
||||||
|
const minor = latestParts[2] - currentParts[2];
|
||||||
|
const patch = latestParts[3] - currentParts[3];
|
||||||
|
|
||||||
|
// If current is a pre-release, and latest is a release
|
||||||
|
const betaToRelease = latestParts[4].length === 0 && currentParts[4].length > 0;
|
||||||
|
|
||||||
|
switch (true) {
|
||||||
|
case major > 0:
|
||||||
|
case major === 0 && minor > 0:
|
||||||
|
case major === 0 && minor === 0 && patch > 0:
|
||||||
|
case major === 0 && minor === 0 && patch === 0 && betaToRelease:
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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 +304,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 () {
|
||||||
|
|||||||
Reference in New Issue
Block a user