summaryrefslogtreecommitdiffstats
path: root/apk-model.lua
diff options
context:
space:
mode:
Diffstat (limited to 'apk-model.lua')
-rw-r--r--apk-model.lua73
1 files changed, 22 insertions, 51 deletions
diff --git a/apk-model.lua b/apk-model.lua
index 59c994b..57ed341 100644
--- a/apk-model.lua
+++ b/apk-model.lua
@@ -2,7 +2,6 @@
module (..., package.seeall)
require("modelfunctions")
require("posix")
-apk = require("acf.apk")
fs = require("acf.fs")
format = require("acf.format")
@@ -32,14 +31,6 @@ local function gettoplevel()
return toplevel
end
-local run_apk_cmd = function(cmd)
- local c = path.."apk "..cmd.." 2>&1"
- local f = io.popen(c)
- local cmdresult = f:read("*a")
- f:close()
- return cmdresult
-end
-
local reload_upgrades = function()
if repo then
-- clear out upgrade info
@@ -49,14 +40,13 @@ local reload_upgrades = function()
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 f = modelfunctions.run_executable({"apk", "version", "-l", "<"})
+ for line in string.gmatch(f, "[^\n]+") 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
@@ -72,8 +62,8 @@ local reload_installed = function()
end
end
-- read in which are installed
- local f = io.popen(path.."apk info -vv 2>/dev/null")
- for line in f:lines() do
+ local f = modelfunctions.run_executable({"apk", "info", "-vv"})
+ for line in string.gmatch(f, "[^\n]+") do
local name, ver, comment = string.match(line, "(%S+)%-(%d+%S*)%s+%-%s+(.*)")
if not repo[name] then
repo[name] = {}
@@ -81,7 +71,6 @@ local reload_installed = function()
repo[name].installed = ver
repo[name].comment = comment
end
- f:close()
install_cache = true
end
return repo
@@ -90,18 +79,17 @@ end
local repository = function()
if not repo then
-- read in all of the packages
- local f = io.popen(path.."apk search 2>/dev/null")
+ local f,errtxt = modelfunctions.run_executable({"apk", "search"})
repo = {}
install_cache = false
upgrade_cache = false
- for line in f:lines() do
+ for line in string.gmatch(f, "[^\n]+") do
local name, ver = string.match(line, "(.*)%-(%d+.*)")
if name and (not repo[name] or repo[name].version < ver) then
repo[name] = {}
repo[name].version = ver
end
end
- f:close()
end
if not install_cache then
reload_installed()
@@ -121,9 +109,8 @@ find_dependents = function(package)
end
if not repo[package].dependents then
repo[package].dependents = {}
- local cmd = path .. "apk info -R "..package
- local f = io.popen(cmd)
- for line in f:lines() do
+ local f = modelfunctions.run_executable({"apk", "info", "-R", package})
+ for line in string.gmatch(f, "[^\n]+") do
if not line:find("depends on:") and not line:find("^%s*$") then
table.insert(repo[package].dependents, line)
for i,dep in ipairs(find_dependents(line, saved, output)) do
@@ -210,14 +197,12 @@ get_delete_package = function(self, clientdata)
end
delete_package = function(self, deleterequest)
- local success, res = apk.delete(deleterequest.value.package.value)
- if success then
- deleterequest.descr = res
- -- Destroy menu and permissions info in session so recalculated
- resetpermissions(self)
- else
+ deleterequest.descr, deleterequest.errtxt = modelfunctions.run_executable({"apk", "del", deleterequest.value.package.value}, true)
+ if deleterequest.errtxt == "" then
deleterequest.errtxt = "Failed to delete package."
end
+ -- Destroy menu and permissions info in session so recalculated
+ resetpermissions(self)
return deleterequest
end
@@ -230,13 +215,10 @@ get_install_package = function(self, clientdata)
end
install_package = function(self, installrequest)
- local success, res = apk.install(installrequest.value.package.value)
- if success then
- installrequest.descr = res
+ installrequest.descr, installrequest.errtxt = modelfunctions.run_executable({"apk", "add", installrequest.value.package.value}, true)
+ if not installrequest.errtxt then
-- Destroy menu and permissions info in session so recalculated
resetpermissions(self)
- else
- installrequest.errtxt = "Failed to install package."
end
return installrequest
@@ -250,10 +232,8 @@ get_upgrade_package = function(self, clientdata)
end
upgrade_package = function(self, upgraderequest)
- local res = run_apk_cmd("fix -u "..upgraderequest.value.package.value)
- if res then
- upgraderequest.descr = res
- else
+ upgraderequest.descr, upgraderequest.errtxt = modelfunctions.run_executable({"apk", "fix", "-u", upgraderequest.value.package.value}, true)
+ if upgraderequest.errtxt == "" then
upgraderequest.errtxt = "Failed to upgrade package."
end
-- Destroy menu and permissions info in session so recalculated
@@ -269,11 +249,9 @@ get_update_all = function(self, clientdata)
end
update_all = function(self, updaterequest)
- local res = run_apk_cmd("update")
- if res then
- updaterequest.descr = res
- else
- updaterequest.errtxt = "Failed to upgrade packages."
+ updaterequest.descr, updaterequest.errtxt = modelfunctions.run_executable({"apk", "update"}, true)
+ if updaterequest.errtxt == "" then
+ updaterequest.errtxt = "Failed to update index."
end
return updaterequest
@@ -286,15 +264,8 @@ get_upgrade_all = function(self, clientdata)
end
upgrade_all = function(self, upgraderequest)
- local result = {}
- result[#result+1] = run_apk_cmd("update")
- result[#result+1] = run_apk_cmd("add -u apk-tools")
- result[#result+1] = run_apk_cmd("upgrade")
-
- local res = table.concat(result, "")
- if res then
- upgraderequest.descr = res
- else
+ upgraderequest.descr, upgraderequest.errtxt = modelfunctions.run_executable({"apk", "upgrade", "-U"}, true)
+ if upgraderequest.errtxt == "" then
upgraderequest.errtxt = "Failed to upgrade packages."
end
-- Destroy menu and permissions info in session so recalculated
@@ -379,7 +350,7 @@ get_package_details = function(package)
if repo[package].installed then
details.installed.value = repo[package].installed
details.comment.value = repo[package].comment
- local cmdresult = format.string_to_table(run_apk_cmd("info -ws "..package), "\n")
+ local cmdresult = format.string_to_table((modelfunctions.run_executable({"apk", "info", "-ws", package})), "\n")
details.webpage.value = cmdresult[2] or ""
details.size.value = cmdresult[5] or ""
local dependents = find_dependents(package)