summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/ffluci/model/ipkg.lua68
1 files changed, 52 insertions, 16 deletions
diff --git a/src/ffluci/model/ipkg.lua b/src/ffluci/model/ipkg.lua
index 4779854037..cbdd0f13b4 100644
--- a/src/ffluci/model/ipkg.lua
+++ b/src/ffluci/model/ipkg.lua
@@ -30,38 +30,74 @@ require("ffluci.sys")
require("ffluci.util")
ipkg = "ipkg"
-local statuslist = nil
-- Returns repository information
function info(pkg)
- -- To be implemented
+ return _lookup("info", pkg)
end
-- Returns a table with status information
-function status(refresh)
- if not statuslist or refresh then
- statuslist = _parselist(ffluci.sys.exec(ipkg .. " status"))
- end
-
- return statuslist
+function status(pkg)
+ return _lookup("status", pkg)
+end
+
+-- Installs packages
+function install(...)
+ return _action("install", ...)
+end
+
+-- Returns whether a package is installed
+function installed(pkg, ...)
+ local p = status(...)[pkg]
+ return (p and p.Status and p.Status.installed)
+end
+
+-- Removes packages
+function remove(...)
+ return _action("remove", ...)
end
--- Installs a package
-function install(pkg)
- if not pkg then
- return nil
+-- Updates package lists
+function update()
+ return _action("update")
+end
+
+-- Upgrades installed packages
+function upgrade()
+ return _action("upgrade")
+end
+
+
+-- Internal action function
+function _action(cmd, ...)
+ local pkg = ""
+ arg.n = nil
+ for k, v in pairs(arg) do
+ pkg = pkg .. " '" .. v:gsub("'", "") .. "'"
end
- local c = ipkg .. " install '" .. pkg:gsub("'", "") .. "' >/dev/null 2>&1"
+ local c = ipkg.." "..cmd.." "..pkg.." >/dev/null 2>&1"
local r = os.execute(c)
return (r == 0), r
end
-function installed(pkg, ...)
- local p = status(...)[pkg]
- return (p and p.Status and p.Status.installed)
+-- Internal lookup function
+function _lookup(act, pkg)
+ local cmd = ipkg .. " " .. act
+ if pkg then
+ cmd = cmd .. " '" .. pkg:gsub("'", "") .. "'"
+ end
+
+ local info = _parselist(ffluci.sys.exec(cmd .. " 2>/dev/null"))
+
+ if pkg then
+ return info[pkg]
+ else
+ return info
+ end
end
+-- Internal parser function
function _parselist(rawdata)
if type(rawdata) ~= "string" then
error("IPKG: Invalid rawdata given")