From 2b7fc1012ea9413e24c318d6982df5562086cf08 Mon Sep 17 00:00:00 2001 From: Ted Trask Date: Wed, 23 Sep 2009 16:28:08 +0000 Subject: Modifed to use apk version for upgrade status, bumped to 0.4.3 Fixed bug where 9->10 wasn't recognized as upgrade --- Makefile | 2 +- apk-model.lua | 43 +++++++++++++++++++++++++++++++++---------- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index 84db57c..51ca232 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ APP_NAME=apk-tools PACKAGE=acf-$(APP_NAME) -VERSION=0.4.2 +VERSION=0.4.3 APP_DIST=\ apk* \ diff --git a/apk-model.lua b/apk-model.lua index c1f410c..f77e88e 100644 --- a/apk-model.lua +++ b/apk-model.lua @@ -15,6 +15,7 @@ local path = "PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin local repo = nil local install_cache = false +local upgrade_cache = false local toplevel -- ################################################################################ @@ -39,6 +40,28 @@ local run_apk_cmd = function(cmd) return cmdresult end +local reload_upgrades = function() + if repo then + -- clear out upgrade info + for name,value in pairs(repo) do + if value then + value.upgrade = nil + end + end + -- read in which need upgrades + local f = io.popen(path.."apk version -l '<' 2>/dev/null") + for line in f:lines() do + local name = string.match(line, "(%S+)%-%d") + if repo[name] then + repo[name].upgrade = true + end + end + f:close() + upgrade_cache = true + end + return repo +end + local reload_installed = function() if repo then -- clear out installed info @@ -70,6 +93,7 @@ local repository = function() local f = io.popen(path.."apk search 2>/dev/null") repo = {} install_cache = false + upgrade_cache = false for line in f:lines() do local name, ver = string.match(line, "(.*)%-(%d+.*)") if name and (not repo[name] or repo[name].version < ver) then @@ -82,6 +106,9 @@ local repository = function() if not install_cache then reload_installed() end + if not upgrade_cache then + reload_upgrades() + end return repo end @@ -110,11 +137,11 @@ end local function upgrade_available(package) local retval = false repo = repo or repository() - if repo[package] and repo[package].installed and repo[package].version and repo[package].version > repo[package].installed then + if repo[package] and repo[package].upgrade then retval = true else -- check the dependents for i,dep in ipairs(find_dependents(package)) do - if repo[dep] and repo[dep].installed and repo[dep].version and repo[dep].version > repo[dep].installed then + if repo[dep] and repo[dep].upgrade then retval = true break end @@ -139,9 +166,7 @@ get_loaded_packages = function() temp.name = name temp.version = value.installed temp.description = value.comment - if value.version and value.version > value.installed then - temp.upgrade = true - end + temp.upgrade = value.upgrade if toplevel[name] then top.value[#top.value+1] = temp else @@ -159,13 +184,11 @@ get_available_packages = function() -- available are all except same version installed local available = cfe({ type="list", value={}, label="Available Packages" }) for name,value in pairs(repo) do - if value.version and (not value.installed or value.version > value.installed) then + if value.version and (not value.installed or value.upgrade) then local temp = {} temp.name = name temp.version = value.version - if value.installed and value.version > value.installed then - temp.upgrade = true - end + temp.upgrade = value.upgrade available.value[#available.value + 1] = temp end end @@ -296,7 +319,7 @@ get_package_details = function(package) for i,val in ipairs(dependents) do if not revdeps[val] then revdeps[val] = true - if repo[val].version > repo[val].installed then + if repo[val].upgrade then table.insert(details.upgrade.value, val.." "..repo[val].installed.." -> "..repo[val].version) end end -- cgit v1.2.3