From: Steven Barth Date: Wed, 6 Aug 2008 19:51:48 +0000 (+0000) Subject: Outsourced IPKG abstraction to own directory X-Git-Tag: 0.8.0~520 X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=commitdiff_plain;h=b1b0c085de7483c5a778f0056a97da14e87b7f16 Outsourced IPKG abstraction to own directory --- diff --git a/contrib/package/luci/Makefile b/contrib/package/luci/Makefile index 4dff5a7b5..edd8949d0 100644 --- a/contrib/package/luci/Makefile +++ b/contrib/package/luci/Makefile @@ -177,6 +177,16 @@ define Package/luci-http/install endef +define Package/luci-ipkg + $(call Package/luci/libtemplate) + TITLE:=LuCI IPKG/OPKG call abstraction library +endef + +define Package/luci-ipkg/install + $(call Package/luci/install/template,$(1),libs/ipkg) +endef + + define Package/luci-web $(call Package/luci/libtemplate) DEPENDS+=+luci-http +luci-addons +luci-uci +luci-sgi-cgi @@ -314,7 +324,7 @@ endef define Package/luci-admin-full $(call Package/luci/webtemplate) - DEPENDS+=+luci-admin-core + DEPENDS+=+luci-admin-core +luci-ipkg TITLE:=LuCI Administration - power user's interface endef @@ -544,6 +554,9 @@ endif ifneq ($(CONFIG_PACKAGE_luci-http),) PKG_SELECTED_MODULES+=libs/http endif +ifneq ($(CONFIG_PACKAGE_luci-ipkg),) + PKG_SELECTED_MODULES+=libs/ipkg +endif ifneq ($(CONFIG_PACKAGE_luci-uci),) PKG_SELECTED_MODULES+=libs/uci endif @@ -653,6 +666,7 @@ $(eval $(call BuildPackage,luci-core)) $(eval $(call BuildPackage,luci-cbi)) $(eval $(call BuildPackage,luci-fastindex)) $(eval $(call BuildPackage,luci-http)) +$(eval $(call BuildPackage,luci-ipkg)) $(eval $(call BuildPackage,luci-uci)) $(eval $(call BuildPackage,luci-web)) diff --git a/libs/core/luasrc/model/ipkg.lua b/libs/core/luasrc/model/ipkg.lua deleted file mode 100644 index 075acc4c3..000000000 --- a/libs/core/luasrc/model/ipkg.lua +++ /dev/null @@ -1,141 +0,0 @@ ---[[ -LuCI - IPKG wrapper library - -Description: -Wrapper for the ipkg Package manager - -Any return value of false or nil can be interpreted as an error - -FileId: -$Id$ - -License: -Copyright 2008 Steven Barth - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -]]-- -module("luci.model.ipkg", package.seeall) -require("luci.sys") -require("luci.util") -require("luci.fs") - -ipkg = luci.fs.access("/bin/opkg") and "opkg" or "ipkg" - --- Returns repository information -function info(pkg) - return _lookup("info", pkg) -end - --- Returns a table with status information -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 - --- 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.." "..cmd.." "..pkg.." >/dev/null 2>&1" - local r = os.execute(c) - return (r == 0), r -end - --- Internal lookup function -function _lookup(act, pkg) - local cmd = ipkg .. " " .. act - if pkg then - cmd = cmd .. " '" .. pkg:gsub("'", "") .. "'" - end - - return _parselist(luci.sys.exec(cmd .. " 2>/dev/null")) -end - --- Internal parser function -function _parselist(rawdata) - if type(rawdata) ~= "string" then - error("IPKG: Invalid rawdata given") - end - - rawdata = luci.util.split(rawdata) - local data = {} - local c = {} - local l = nil - - for k, line in pairs(rawdata) do - if line:sub(1, 1) ~= " " then - local split = luci.util.split(line, ":", 1) - local key = nil - local val = nil - - if split[1] then - key = luci.util.trim(split[1]) - end - - if split[2] then - val = luci.util.trim(split[2]) - end - - if key and val then - if key == "Package" then - c = {Package = val} - data[val] = c - elseif key == "Status" then - c.Status = {} - for i, j in pairs(luci.util.split(val, " ")) do - c.Status[j] = true - end - else - c[key] = val - end - l = key - end - else - -- Multi-line field - c[l] = c[l] .. "\n" .. line:sub(2) - end - end - - return data -end \ No newline at end of file diff --git a/libs/ipkg/luasrc/model/ipkg.lua b/libs/ipkg/luasrc/model/ipkg.lua new file mode 100644 index 000000000..075acc4c3 --- /dev/null +++ b/libs/ipkg/luasrc/model/ipkg.lua @@ -0,0 +1,141 @@ +--[[ +LuCI - IPKG wrapper library + +Description: +Wrapper for the ipkg Package manager + +Any return value of false or nil can be interpreted as an error + +FileId: +$Id$ + +License: +Copyright 2008 Steven Barth + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +]]-- +module("luci.model.ipkg", package.seeall) +require("luci.sys") +require("luci.util") +require("luci.fs") + +ipkg = luci.fs.access("/bin/opkg") and "opkg" or "ipkg" + +-- Returns repository information +function info(pkg) + return _lookup("info", pkg) +end + +-- Returns a table with status information +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 + +-- 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.." "..cmd.." "..pkg.." >/dev/null 2>&1" + local r = os.execute(c) + return (r == 0), r +end + +-- Internal lookup function +function _lookup(act, pkg) + local cmd = ipkg .. " " .. act + if pkg then + cmd = cmd .. " '" .. pkg:gsub("'", "") .. "'" + end + + return _parselist(luci.sys.exec(cmd .. " 2>/dev/null")) +end + +-- Internal parser function +function _parselist(rawdata) + if type(rawdata) ~= "string" then + error("IPKG: Invalid rawdata given") + end + + rawdata = luci.util.split(rawdata) + local data = {} + local c = {} + local l = nil + + for k, line in pairs(rawdata) do + if line:sub(1, 1) ~= " " then + local split = luci.util.split(line, ":", 1) + local key = nil + local val = nil + + if split[1] then + key = luci.util.trim(split[1]) + end + + if split[2] then + val = luci.util.trim(split[2]) + end + + if key and val then + if key == "Package" then + c = {Package = val} + data[val] = c + elseif key == "Status" then + c.Status = {} + for i, j in pairs(luci.util.split(val, " ")) do + c.Status[j] = true + end + else + c[key] = val + end + l = key + end + else + -- Multi-line field + c[l] = c[l] .. "\n" .. line:sub(2) + end + end + + return data +end \ No newline at end of file