From 77f8074a01277917ab9ab0d00778f59bb0a88817 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Tue, 3 Jun 2008 22:42:01 +0000 Subject: [PATCH] make use of the new features in the binding for uci v0.4.0 - fixes remaining dependencies of libuci.lua on the cli --- .../luci-statistics/luasrc/statistics/datatree.lua | 2 +- .../luci-statistics/luasrc/statistics/rrdtool.lua | 2 +- .../luci-statistics/root/usr/bin/stat-genconfig | 2 +- libs/core/luasrc/model/uci.lua | 2 +- libs/core/luasrc/model/uci/libuci.lua | 91 ++++------------------ modules/admin-core/luasrc/controller/admin/uci.lua | 36 +++++++-- .../luasrc/view/themes/fledermaus/header.htm | 10 ++- .../luasrc/view/themes/openwrt.org/header.htm | 10 ++- 8 files changed, 58 insertions(+), 97 deletions(-) diff --git a/applications/luci-statistics/luasrc/statistics/datatree.lua b/applications/luci-statistics/luasrc/statistics/datatree.lua index e3c9e34bb..ba6d7740b 100644 --- a/applications/luci-statistics/luasrc/statistics/datatree.lua +++ b/applications/luci-statistics/luasrc/statistics/datatree.lua @@ -4,7 +4,7 @@ local util = require("luci.util") local sys = require("luci.sys") local fs = require("luci.fs") local uci = require("luci.model.uci").Session() -local sections, names = uci:sections( "luci_statistics" ) +local sections = uci:sections( "luci_statistics" ) Instance = util.class() diff --git a/applications/luci-statistics/luasrc/statistics/rrdtool.lua b/applications/luci-statistics/luasrc/statistics/rrdtool.lua index c2ac7a8e6..5f07a41ff 100644 --- a/applications/luci-statistics/luasrc/statistics/rrdtool.lua +++ b/applications/luci-statistics/luasrc/statistics/rrdtool.lua @@ -17,7 +17,7 @@ function Graph.__init__( self, timespan, opts ) opts = opts or { } local uci = luci.model.uci.Session() - local sections, names = uci:sections( "luci_statistics" ) + local sections = uci:sections( "luci_statistics" ) -- helper classes self.colors = luci.statistics.rrdtool.colors.Instance() diff --git a/applications/luci-statistics/root/usr/bin/stat-genconfig b/applications/luci-statistics/root/usr/bin/stat-genconfig index 6241e9814..c106ed39d 100755 --- a/applications/luci-statistics/root/usr/bin/stat-genconfig +++ b/applications/luci-statistics/root/usr/bin/stat-genconfig @@ -22,7 +22,7 @@ require("luci.util") local ipt = luci.sys.iptparser.IptParser() local uci = luci.model.uci.Session() -local sections, names = uci:sections( "luci_statistics" ) +local sections = uci:sections( "luci_statistics" ) function section( plugin ) diff --git a/libs/core/luasrc/model/uci.lua b/libs/core/luasrc/model/uci.lua index 39354bed1..1abf56686 100644 --- a/libs/core/luasrc/model/uci.lua +++ b/libs/core/luasrc/model/uci.lua @@ -89,4 +89,4 @@ end -- Wrapper for "uci set" function set(...) return default:set(...) -end \ No newline at end of file +end diff --git a/libs/core/luasrc/model/uci/libuci.lua b/libs/core/luasrc/model/uci/libuci.lua index 9a1112500..601ff2f87 100644 --- a/libs/core/luasrc/model/uci/libuci.lua +++ b/libs/core/luasrc/model/uci/libuci.lua @@ -35,44 +35,43 @@ Session = luci.util.class() -- Session constructor function Session.__init__(self, savedir) - self.ucicmd = savedir and "uci -P " .. savedir or "uci" self.savedir = savedir or luci.model.uci.savedir + uci.set_savedir(self.savedir) end function Session.add(self, config, section_type) - return self:_uci("add " .. _path(config) .. " " .. _path(section_type)) + return uci.add(config, section_type) end function Session.changes(self, config) - return self:_uci("changes " .. _path(config)) + if config then + return uci.changes(config) + else + return uci.changes() + end end function Session.commit(self, config) - self:t_load(config) return self:t_commit(config) end function Session.del(self, config, section, option) - return self:_uci2("del " .. _path(config, section, option)) + return uci.del(config, section, option) end function Session.get(self, config, section, option) - self:t_load(config) return self:t_get(config, section, option) end function Session.revert(self, config) - self:t_load(config) return self:t_revert(config) end function Session.sections(self, config) - self:t_load(config) return self:t_sections(config) end function Session.set(self, config, section, option, value) - self:t_load(config) return self:t_set(config, section, option, value) and self:t_save(config) end @@ -92,10 +91,7 @@ function Session.t_save(self, config) end function Session.t_add(self, config, type) - self:t_save(config) - local r = self:add(config, type) - self:t_load(config) - return r + return self:add(config, type) end function Session.t_commit(self, config) @@ -103,10 +99,7 @@ function Session.t_commit(self, config) end function Session.t_del(self, config, section, option) - self:t_save(config) - local r = self:del(config, section, option) - self:t_load(config) - return r + return self:del(config, section, option) end function Session.t_get(self, config, section, option) @@ -122,72 +115,14 @@ function Session.t_revert(self, config) end function Session.t_sections(self, config) - local raw = uci.get_all(config) - if not raw then - return nil - end - - local s = {} - local o = {} - - for i, sec in ipairs(raw) do - table.insert(o, sec.name) - - s[sec.name] = sec.options - s[sec.name][".type"] = sec.type - end - - return s, o + return uci.get_all(config) end function Session.t_set(self, config, section, option, value) if option then - return uci.set(config.."."..section.."."..option.."="..value) + return uci.set(config, section, option, value) else - return uci.set(config.."."..section.."="..value) + return uci.set(config, section, value) end end --- Internal functions -- - - -function Session._uci(self, cmd) - local res = luci.sys.exec(self.ucicmd .. " 2>/dev/null " .. cmd) - - if res:len() == 0 then - return nil - else - return res:sub(1, res:len()-1) - end -end - -function Session._uci2(self, cmd) - local res = luci.sys.exec(self.ucicmd .. " 2>&1 " .. cmd) - - if res:len() > 0 then - return false, res - else - return true - end -end - --- Build path (config.section.option=value) and prevent command injection -function _path(...) - local result = "" - - -- Not using ipairs because it is not reliable in case of nil arguments - arg.n = nil - for k,v in pairs(arg) do - if v then - v = tostring(v) - if k == 1 then - result = "'" .. v:gsub("['.]", "") .. "'" - elseif k < 4 then - result = result .. ".'" .. v:gsub("['.]", "") .. "'" - elseif k == 4 then - result = result .. "='" .. v:gsub("'", "") .. "'" - end - end - end - return result -end \ No newline at end of file diff --git a/modules/admin-core/luasrc/controller/admin/uci.lua b/modules/admin-core/luasrc/controller/admin/uci.lua index 9c0e1beb5..e9209da6e 100644 --- a/modules/admin-core/luasrc/controller/admin/uci.lua +++ b/modules/admin-core/luasrc/controller/admin/uci.lua @@ -8,6 +8,29 @@ function index() node("admin", "uci", "apply").target = call("action_apply") end +function convert_changes(changes) + local ret = {} + for r, tbl in pairs(changes) do + for s, os in pairs(tbl) do + for o, v in pairs(os) do + local val, str + if (v == "") then + str = "-" + val = "" + else + str = "" + val = "="..v + end + str = str.."."..r + if o ~= ".type" then + str = str.."."..o + end + table.insert(ret, str..val) + end + end + end +end + -- This function has a higher priority than the admin_uci/apply template function action_apply() local changes = luci.model.uci.changes() @@ -18,8 +41,7 @@ function action_apply() local run = {} -- Collect files to be applied and commit changes - for i, line in ipairs(luci.util.split(changes)) do - local r = line:match("^-?([^.]+)") + for r, tbl in pairs(changes) do if r then com[r] = true @@ -40,7 +62,8 @@ function action_apply() end end - luci.template.render("admin_uci/apply", {changes=changes, output=output}) + + luci.template.render("admin_uci/apply", {changes=convert_changes(changes), output=output}) end @@ -50,8 +73,7 @@ function action_revert() local revert = {} -- Collect files to be reverted - for i, line in ipairs(luci.util.split(changes)) do - local r = line:match("^-?([^.]+)") + for r, tbl in ipairs(changes) do if r then revert[r] = true end @@ -63,5 +85,5 @@ function action_revert() end end - luci.template.render("admin_uci/revert", {changes=changes}) -end \ No newline at end of file + luci.template.render("admin_uci/revert", {changes=convert_changes(changes)}) +end diff --git a/themes/fledermaus/luasrc/view/themes/fledermaus/header.htm b/themes/fledermaus/luasrc/view/themes/fledermaus/header.htm index cb378555f..2aea59cfd 100644 --- a/themes/fledermaus/luasrc/view/themes/fledermaus/header.htm +++ b/themes/fledermaus/luasrc/view/themes/fledermaus/header.htm @@ -120,9 +120,11 @@ end <% if "admin" == request[1] then require("luci.model.uci") - local ucic = luci.model.uci.changes() - if ucic then - ucic = #luci.util.split(ucic) + local ucic = 0 + for n, s in pairs(luci.model.uci.changes()) do + for no, o in pairs(s) do + ucic = ucic + 1; + end end %>
<%:config Konfiguration%> @@ -138,4 +140,4 @@ end
<% end %> -
\ No newline at end of file +
diff --git a/themes/openwrt.org/luasrc/view/themes/openwrt.org/header.htm b/themes/openwrt.org/luasrc/view/themes/openwrt.org/header.htm index 4efde4a62..71328e414 100644 --- a/themes/openwrt.org/luasrc/view/themes/openwrt.org/header.htm +++ b/themes/openwrt.org/luasrc/view/themes/openwrt.org/header.htm @@ -120,9 +120,11 @@ end <% if "admin" == request[1] then require("luci.model.uci") - local ucic = luci.model.uci.changes() - if ucic then - ucic = #luci.util.split(ucic) + local ucic = 0 + for n, s in pairs(luci.model.uci.changes()) do + for no, o in pairs(s) do + ucic = ucic + 1; + end end %>
<%:config Konfiguration%> @@ -138,4 +140,4 @@ end
<% end %>
-
\ No newline at end of file +
-- 2.11.0