libs/ipkg: simplify parsing logic to take advantage of the opkg improvements in trunk, introduce find() operation

This commit is contained in:
Jo-Philipp Wich 2012-11-15 20:59:03 +00:00
parent 7933cad0fa
commit e3bb15012b

View file

@ -10,7 +10,6 @@ You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0 http://www.apache.org/licenses/LICENSE-2.0
$Id$
]]-- ]]--
local os = require "os" local os = require "os"
@ -23,7 +22,7 @@ local pairs = pairs
local error = error local error = error
local table = table local table = table
local ipkg = "opkg --force-removal-of-dependent-packages --force-overwrite" local ipkg = "opkg --force-removal-of-dependent-packages --force-overwrite --nocase"
local icfg = "/etc/opkg.conf" local icfg = "/etc/opkg.conf"
--- LuCI OPKG call abstraction library --- LuCI OPKG call abstraction library
@ -159,7 +158,7 @@ end
-- List helper -- List helper
function _list(action, pat, cb) function _list(action, pat, cb)
local fd = io.popen(ipkg .. " " .. action .. local fd = io.popen(ipkg .. " " .. action ..
(pat and (" '%s'" % pat:gsub("'", "")) or "")) -- .. " | grep -vE '^ '") (pat and (" '%s'" % pat:gsub("'", "")) or ""))
if fd then if fd then
local name, version, desc local name, version, desc
@ -167,20 +166,18 @@ function _list(action, pat, cb)
local line = fd:read("*l") local line = fd:read("*l")
if not line then break end if not line then break end
if line:sub(1,1) ~= " " then name, version, desc = line:match("^(.-) %- (.-) %- (.+)")
name, version, desc = line:match("^(.-) %- (.-) %- (.+)")
if not name then if not name then
name, version = line:match("^(.-) %- (.+)") name, version = line:match("^(.-) %- (.+)")
desc = "" desc = ""
end
cb(name, version, desc)
name = nil
version = nil
desc = nil
end end
cb(name, version, desc)
name = nil
version = nil
desc = nil
end end
fd:close() fd:close()
@ -203,6 +200,15 @@ function list_installed(pat, cb)
_list("list_installed", pat, cb) _list("list_installed", pat, cb)
end end
--- Find packages that match the given pattern.
-- @param pat Find packages whose names or descriptions match this pattern, nil results in zero results
-- @param cb Callback function invoked for each patckage, receives name, version and description as arguments
-- @return nothing
function find(pat, cb)
_list("find", pat, cb)
end
--- Determines the overlay root used by opkg. --- Determines the overlay root used by opkg.
-- @return String containing the directory path of the overlay root. -- @return String containing the directory path of the overlay root.
function overlay_root() function overlay_root()