From 6b77a1418152d1bd6d50239e2805679f0338c2d1 Mon Sep 17 00:00:00 2001 From: suVene Date: Sun, 28 Dec 2008 21:49:43 +0000 Subject: version の比較を厳密に。 git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27536 d0d07461-0603-4401-acd4-de1884942a52 --- pluginManager.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'pluginManager.js') diff --git a/pluginManager.js b/pluginManager.js index 33901f4..fcf2be4 100644 --- a/pluginManager.js +++ b/pluginManager.js @@ -198,7 +198,7 @@ function updatePlugin(plugin, checkOnly){ var [localResource, serverResource, store] = getResourceInfo(plugin); var localDate = Date.parse(localResource['Last-Modified']) || 0; var serverDate = Date.parse(serverResource.headers['Last-Modified']) || 0; - + var data = { 'Local Version': plugin.info.version || 'unknown', 'Local Last-Modified': localResource['Last-Modified'] || 'unkonwn', @@ -215,7 +215,7 @@ function updatePlugin(plugin, checkOnly){ } else if (plugin.info.version == serverResource.version && localResource['Last-Modified'] == serverResource.headers['Last-Modified']){ data.Information = 'up to date.'; - } else if (plugin.info.version > serverResource.version || + } else if (compVersion(plugin.info.version, serverResource.version) > 0 || localDate > serverDate){ data.information = 'local version is newest.'; } else { @@ -227,6 +227,18 @@ function updatePlugin(plugin, checkOnly){ } return template.table(plugin.name, data); } +function compVersion(a, b){ + a = (a || '').split('.'); + b = (b || '').split('.'); + if (!a.length && b.length) return -1; + if (a.length && !b.length) return 1; + for (let [i, bv] in Iterator(b)) { + var av = i < a.length ? a[i] : 0; + if (av == bv) continue; + return av < bv ? -1 : 1; + } + return 0; +} function getResourceInfo(plugin){ var store = storage.newMap('plugins-pluginManager', true); var url = plugin.info.updateURL; -- cgit v1.2.3