Make update check work with RCs

This commit is contained in:
Tobias Ellinghaus
2015-11-14 13:43:19 +01:00
parent 5f6350c218
commit ae627d9f55

View File

@@ -37,9 +37,25 @@ dt.configuration.check_version(...,{2,0,0})
-- returns -1, 0, 1 if the first version is smaller, equal, greater than the second version,
-- or nil if one or both are of the wrong format
-- strings like "release-1.2.3" and "1.2.3+456~gb00b5" are fine, too
local function parse_version(s)
local rc = 0
local major, minor, patch = s:match("(%d+)%.(%d+)%.(%d+)")
if not major then
patch = 0
major, minor, rc = s:match("(%d+)%.(%d+)rc(%d+)")
end
if not major then
patch = 0
rc = 0
major, minor = s:match("(%d+)%.(%d+)")
end
return tonumber(major), tonumber(minor), tonumber(patch), tonumber(rc)
end
local function compare_versions(a, b)
local a_major, a_minor, a_patch = a:match("(%d+)%.(%d+)%.(%d+)")
local b_major, b_minor, b_patch = b:match("(%d+)%.(%d+)%.(%d+)")
local a_major, a_minor, a_patch, a_rc = parse_version(a)
local b_major, b_minor, b_patch, b_rc = parse_version(b)
if a_major and a_minor and a_patch and b_major and b_minor and b_patch then
if a_major < b_major then return -1 end
if a_major > b_major then return 1 end
@@ -50,6 +66,13 @@ local function compare_versions(a, b)
if a_patch < b_patch then return -1 end
if a_patch > b_patch then return 1 end
-- when rc == 0 then it's a proper release and newer than the rcs
local m = math.max(a_rc, b_rc) + 1
if a_rc == 0 then a_rc = m end
if b_rc == 0 then b_rc = m end
if a_rc < b_rc then return -1 end
if a_rc > b_rc then return 1 end
return 0
else
return
@@ -57,6 +80,29 @@ local function compare_versions(a, b)
end
-- local function test(a, b, r)
-- local cmp = compare_versions(a, b)
-- if(not cmp) then
-- print(a .. " ./. " .. b .. " => MALFORMED INPUT")
-- elseif(cmp == r) then
-- print(a .. " ./. " .. b .. " => PASSED")
-- else
-- print(a .. " ./. " .. b .. " => FAILED")
-- end
-- end
--
-- test("malformed", "1.0.0", 0)
-- test("2.0rc1+135~ge456b2b-dirty", "release-1.6.9", 1)
-- test("release-1.6.9", "2.0rc1+135~ge456b2b-dirty", -1)
-- test("2.0rc1+135~ge456b2b-dirty", "2.0rc2+135~ge456b2b-dirty", -1)
-- test("2.0rc2+135~ge456b2b-dirty", "2.0rc1+135~ge456b2b-dirty", 1)
-- test("2.0rc3+135~ge456b2b-dirty", "release-2.0", -1)
-- test("2.0rc3+135~ge456b2b-dirty", "release-2.0.0", -1)
-- test("1.0.0", "2.0.0", -1)
-- test("2.0.0", "1.0.0", 1)
-- test("3.0.0", "3.0.0", 0)
-- check stored timestamp and skip the check if the last time was not too long ago
-- for now we are assuming that os.time() returns seconds. that's not guaranteed but the case on many systems.
-- the reference date doesn't matter, as long as it's currently positive (we start with 0 the first time)