From 91ba7c42f5b45614c9f4c803d09399f08a8e27b1 Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Tue, 26 Aug 2008 23:00:44 +0000 Subject: [PATCH] UCI API changes --- .../luasrc/model/cbi/luci_fw/firewall.lua | 2 +- .../luasrc/model/cbi/luci_fw/portfw.lua | 2 +- .../luasrc/model/cbi/luci_fw/routing.lua | 2 +- .../luasrc/controller/splash/splash.lua | 2 +- .../luasrc/model/cbi/splash/splash.lua | 8 +- .../luci-splash/luasrc/view/splash/splash.htm | 2 +- .../luci-splash/root/usr/bin/luci-splashd | 5 +- .../luci-splash/root/usr/sbin/luci-splash | 29 ++-- .../luci_statistics/luci_statistics.lua | 6 +- .../luasrc/statistics/datatree.lua | 4 +- .../luasrc/statistics/rrdtool.lua | 4 +- .../root/usr/bin/stat-genconfig | 4 +- contrib/package/luci/Makefile | 6 +- contrib/uci/patches/100-unknown-get.patch | 22 --- contrib/uci/patches/200-revised-lua-api.patch | 50 ++++--- libs/cbi/luasrc/cbi.lua | 53 +++---- libs/httpd/host/runluci | 6 +- libs/sgi-webuci/root/usr/lib/boa/luci.lua | 6 +- libs/uci/luasrc/model/uci.lua | 130 +++++++----------- libs/web/luasrc/config.lua | 2 +- modules/admin-core/luasrc/tools/webadmin.lua | 29 ++-- .../luasrc/controller/admin/network.lua | 6 +- .../luasrc/controller/admin/system.lua | 2 +- .../luasrc/controller/admin/uci.lua | 18 +-- .../luasrc/model/cbi/admin_network/dhcp.lua | 5 +- .../model/cbi/admin_network/dhcpleases.lua | 2 +- .../luasrc/model/cbi/admin_network/ifaces.lua | 12 +- .../model/cbi/admin_network/network.lua | 9 +- .../luasrc/model/cbi/admin_network/routes.lua | 5 - .../luasrc/model/cbi/admin_network/wifi.lua | 6 +- .../model/cbi/admin_network/wireless.lua | 12 +- .../luasrc/controller/mini/system.lua | 2 +- .../admin-mini/luasrc/controller/mini/uci.lua | 20 +-- .../admin-mini/luasrc/model/cbi/mini/dhcp.lua | 2 +- .../luasrc/model/cbi/mini/network.lua | 4 +- .../admin-mini/luasrc/model/cbi/mini/wifi.lua | 23 ++-- .../luasrc/controller/freifunk/luciinfo.lua | 57 -------- .../freifunk/luasrc/view/freifunk/contact.htm | 2 +- .../freifunk/luasrc/view/freifunk/index.htm | 2 +- modules/rpc/luasrc/controller/rpc/uci.lua | 53 +++---- .../luasrc/view/themes/fledermaus/header.htm | 5 +- .../view/themes/openwrt-light/header.htm | 4 +- .../luasrc/view/themes/openwrt.org/header.htm | 4 +- 43 files changed, 255 insertions(+), 374 deletions(-) delete mode 100644 contrib/uci/patches/100-unknown-get.patch delete mode 100644 modules/freifunk/luasrc/controller/freifunk/luciinfo.lua diff --git a/applications/luci-fw/luasrc/model/cbi/luci_fw/firewall.lua b/applications/luci-fw/luasrc/model/cbi/luci_fw/firewall.lua index 2919896118..51ec4452af 100644 --- a/applications/luci-fw/luasrc/model/cbi/luci_fw/firewall.lua +++ b/applications/luci-fw/luasrc/model/cbi/luci_fw/firewall.lua @@ -24,7 +24,7 @@ iface.rmempty = true oface = s:option(ListValue, "dest") oface.optional = true -luci.model.uci.foreach("firewall", "zone", +luci.model.uci.cursor():foreach("firewall", "zone", function (section) iface:value(section.name) oface:value(section.name) diff --git a/applications/luci-fw/luasrc/model/cbi/luci_fw/portfw.lua b/applications/luci-fw/luasrc/model/cbi/luci_fw/portfw.lua index 77e8047343..72ff54642f 100644 --- a/applications/luci-fw/luasrc/model/cbi/luci_fw/portfw.lua +++ b/applications/luci-fw/luasrc/model/cbi/luci_fw/portfw.lua @@ -25,7 +25,7 @@ name.size = 10 iface = s:option(ListValue, "src", translate("fw_zone")) iface.default = "wan" -luci.model.uci.foreach("firewall", "zone", +luci.model.uci.cursor():foreach("firewall", "zone", function (section) iface:value(section.name) end) diff --git a/applications/luci-fw/luasrc/model/cbi/luci_fw/routing.lua b/applications/luci-fw/luasrc/model/cbi/luci_fw/routing.lua index d542bcb7f8..f8689a05c5 100644 --- a/applications/luci-fw/luasrc/model/cbi/luci_fw/routing.lua +++ b/applications/luci-fw/luasrc/model/cbi/luci_fw/routing.lua @@ -21,7 +21,7 @@ s.anonymous = true iface = s:option(ListValue, "src") oface = s:option(ListValue, "dest") -luci.model.uci.foreach("firewall", "zone", +luci.model.uci.cursor():foreach("firewall", "zone", function (section) iface:value(section.name) oface:value(section.name) diff --git a/applications/luci-splash/luasrc/controller/splash/splash.lua b/applications/luci-splash/luasrc/controller/splash/splash.lua index dbd266f461..b046ff409a 100644 --- a/applications/luci-splash/luasrc/controller/splash/splash.lua +++ b/applications/luci-splash/luasrc/controller/splash/splash.lua @@ -22,7 +22,7 @@ function action_activate() local mac = luci.sys.net.ip4mac(luci.http.getenv("REMOTE_ADDR")) if mac and luci.http.formvalue("accept") then os.execute("luci-splash add "..mac.." >/dev/null 2>&1") - luci.http.redirect(luci.model.uci.get("freifunk", "community", "homepage")) + luci.http.redirect(luci.model.uci.cursor():get("freifunk", "community", "homepage")) else luci.http.redirect(luci.dispatcher.build_url()) end diff --git a/applications/luci-splash/luasrc/model/cbi/splash/splash.lua b/applications/luci-splash/luasrc/model/cbi/splash/splash.lua index 49257f1ba4..29bc6d9ab7 100644 --- a/applications/luci-splash/luasrc/model/cbi/splash/splash.lua +++ b/applications/luci-splash/luasrc/model/cbi/splash/splash.lua @@ -11,21 +11,23 @@ s.template = "cbi/tblsection" s.addremove = true s.anonymous = true +local uci = luci.model.uci.cursor() + zone = s:option(ListValue, "zone", "Firewallzone") -luci.model.uci.foreach("firewall", "zone", +uci:foreach("firewall", "zone", function (section) zone:value(section.name) end) iface = s:option(ListValue, "network", "Netzwerk") -luci.model.uci.foreach("network", "interface", +uci:foreach("network", "interface", function (section) if section[".name"] ~= "loopback" then iface:value(section[".name"]) end end) -luci.model.uci.foreach("network", "alias", +uci:foreach("network", "alias", function (section) iface:value(section[".name"]) end) diff --git a/applications/luci-splash/luasrc/view/splash/splash.htm b/applications/luci-splash/luasrc/view/splash/splash.htm index 1988224d75..28a038409b 100644 --- a/applications/luci-splash/luasrc/view/splash/splash.htm +++ b/applications/luci-splash/luasrc/view/splash/splash.htm @@ -12,7 +12,7 @@ You may obtain a copy of the License at $Id$ -%> -<% local c = luci.model.uci.get_all("freifunk", "community") %> +<% local c = luci.model.uci.cursor():get_all("freifunk", "community") %>

Willkommen!

diff --git a/applications/luci-splash/root/usr/bin/luci-splashd b/applications/luci-splash/root/usr/bin/luci-splashd index 3e0c938ebd..267fbdf0ae 100755 --- a/applications/luci-splash/root/usr/bin/luci-splashd +++ b/applications/luci-splash/root/usr/bin/luci-splashd @@ -4,7 +4,8 @@ require("socket") require("luci.ip") require("luci.model.uci") -luci.model.uci.load_state("network") +local uci = luci.model.uci.cursor_state() +uci:load("network") local server = socket.bind("0.0.0.0", arg[1] or 8082) server:settimeout(0, "t") @@ -16,7 +17,7 @@ while true do client:settimeout(1) local srv local ip = luci.ip.IPv4(client:getpeername()) - luci.model.uci.foreach("network", "interface", + uci:foreach("network", "interface", function (section) if section.ipaddr then local net = luci.ip.IPv4(section.ipaddr, section.netmask) diff --git a/applications/luci-splash/root/usr/sbin/luci-splash b/applications/luci-splash/root/usr/sbin/luci-splash index 520f877024..82662c8718 100755 --- a/applications/luci-splash/root/usr/sbin/luci-splash +++ b/applications/luci-splash/root/usr/sbin/luci-splash @@ -5,8 +5,7 @@ require("luci.util") require("luci.model.uci") -- Init state session -luci.model.uci.load_state("luci_splash") -local uci = luci.model.uci +local uci = luci.model.uci.cursor_state() function main(argv) @@ -60,13 +59,13 @@ end -- Add a lease to state and invoke add_rule function add_lease(mac) - uci.section("luci_splash", "lease", nil, { + uci:section("luci_splash", "lease", nil, { mac = mac, start = os.time() }) add_rule(mac) - uci.save_state("luci_splash") + uci:save("luci_splash") end @@ -75,7 +74,7 @@ function remove_lease(mac) mac = mac:lower() local del = {} - uci.foreach("luci_splash", "lease", + uci:foreach("luci_splash", "lease", function (section) if section.mac:lower() == mac then table.insert(del, section[".name"]) @@ -84,10 +83,10 @@ function remove_lease(mac) for i,j in ipairs(del) do remove_rule(j) - uci.delete("luci_splash", j) + uci:delete("luci_splash", j) end - uci.save_state("luci_splash") + uci:save("luci_splash") end @@ -108,7 +107,7 @@ function haslease(mac) mac = mac:lower() local stat = false - uci.foreach("luci_splash", "lease", + uci:foreach("luci_splash", "lease", function (section) if section.mac:lower() == mac then stat = true @@ -124,7 +123,7 @@ end function iswhitelisted(mac) mac = mac:lower() - uci.foreach("luci_splash", "whitelist", + uci:foreach("luci_splash", "whitelist", function (section) if section.mac:lower() == mac then stat = true @@ -150,14 +149,14 @@ function sync() local time = os.time() -- Current leases in state files - local leases = uci.get_all("luci_splash") + local leases = uci:get_all("luci_splash") -- Convert leasetime to seconds - local leasetime = tonumber(uci.get("luci_splash", "general", "leasetime")) * 3600 + local leasetime = tonumber(uci:get("luci_splash", "general", "leasetime")) * 3600 -- Clean state file - uci.load_state("luci_splash") - uci.revert("luci_splash") + uci:load("luci_splash") + uci:revert("luci_splash") -- For all leases @@ -168,7 +167,7 @@ function sync() remove_rule(v.mac) else -- Rewrite state - uci.section("luci_splash", "lease", nil, { + uci:section("luci_splash", "lease", nil, { mac = v.mac, start = v.start }) @@ -185,7 +184,7 @@ function sync() end end - uci.save_state("luci_splash") + uci:save("luci_splash") end main(arg) \ No newline at end of file diff --git a/applications/luci-statistics/luasrc/controller/luci_statistics/luci_statistics.lua b/applications/luci-statistics/luasrc/controller/luci_statistics/luci_statistics.lua index f16a655dcf..5167fe0a91 100644 --- a/applications/luci-statistics/luasrc/controller/luci_statistics/luci_statistics.lua +++ b/applications/luci-statistics/luasrc/controller/luci_statistics/luci_statistics.lua @@ -151,9 +151,9 @@ function statistics_render() local vars = luci.http.formvalue() local req = luci.dispatcher.context.request local path = luci.dispatcher.context.dispatched.path - local uci = luci.model.uci - local spans = luci.util.split( uci.get( "luci_statistics", "collectd_rrdtool", "RRATimespans" ), "%s+", nil, true ) - local span = vars.timespan or uci.get( "luci_statistics", "rrdtool", "default_timespan" ) or spans[1] + local uci = luci.model.uci.cursor() + local spans = luci.util.split( uci:get( "luci_statistics", "collectd_rrdtool", "RRATimespans" ), "%s+", nil, true ) + local span = vars.timespan or uci:get( "luci_statistics", "rrdtool", "default_timespan" ) or spans[1] local graph = luci.statistics.rrdtool.Graph( luci.util.parse_units( span ) ) local plugin, instances diff --git a/applications/luci-statistics/luasrc/statistics/datatree.lua b/applications/luci-statistics/luasrc/statistics/datatree.lua index 5d3d63f99b..637fcf466f 100644 --- a/applications/luci-statistics/luasrc/statistics/datatree.lua +++ b/applications/luci-statistics/luasrc/statistics/datatree.lua @@ -18,8 +18,8 @@ module("luci.statistics.datatree", package.seeall) local util = require("luci.util") local sys = require("luci.sys") local fs = require("luci.fs") -local uci = require("luci.model.uci") -local sections = uci.get_all( "luci_statistics" ) +local uci = require("luci.model.uci").cursor() +local sections = uci:get_all( "luci_statistics" ) Instance = util.class() diff --git a/applications/luci-statistics/luasrc/statistics/rrdtool.lua b/applications/luci-statistics/luasrc/statistics/rrdtool.lua index 4335245837..23e0170368 100644 --- a/applications/luci-statistics/luasrc/statistics/rrdtool.lua +++ b/applications/luci-statistics/luasrc/statistics/rrdtool.lua @@ -31,8 +31,8 @@ function Graph.__init__( self, timespan, opts ) opts = opts or { } - local uci = luci.model.uci - local sections = uci.get_all( "luci_statistics" ) + local uci = luci.model.uci.cursor() + local sections = uci:get_all( "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 3159f6f7fa..071cff2ca5 100755 --- a/applications/luci-statistics/root/usr/bin/stat-genconfig +++ b/applications/luci-statistics/root/usr/bin/stat-genconfig @@ -21,8 +21,8 @@ require("luci.sys.iptparser") require("luci.util") local ipt = luci.sys.iptparser.IptParser() -local uci = luci.model.uci -local sections = uci.get_all( "luci_statistics" ) +local uci = luci.model.uci.cursor() +local sections = uci:get_all( "luci_statistics" ) function section( plugin ) diff --git a/contrib/package/luci/Makefile b/contrib/package/luci/Makefile index e8a1d3698d..c26a845c95 100644 --- a/contrib/package/luci/Makefile +++ b/contrib/package/luci/Makefile @@ -148,12 +148,14 @@ endef define Package/luci-uci $(call Package/luci/libtemplate) - DEPENDS+=+libuci-lua + DEPENDS+=+libuci TITLE:=High-Level UCI API endef define Package/luci-uci/install $(call Package/luci/install/template,$(1),libs/uci) + $(INSTALL_DIR) $(1)/usr/lib/lua + $(CP) $(PKG_BUILD_DIR)/contrib/uci/dist/usr/lib/lua/uci.so $(1)/usr/lib/lua endef @@ -632,7 +634,7 @@ ifneq ($(CONFIG_PACKAGE_luci-json),) PKG_SELECTED_MODULES+=libs/json endif ifneq ($(CONFIG_PACKAGE_luci-uci),) - PKG_SELECTED_MODULES+=libs/uci + PKG_SELECTED_MODULES+=libs/uci contrib/uci endif ifneq ($(CONFIG_PACKAGE_luci-sys),) PKG_SELECTED_MODULES+=libs/sys diff --git a/contrib/uci/patches/100-unknown-get.patch b/contrib/uci/patches/100-unknown-get.patch deleted file mode 100644 index 2ad385a159..0000000000 --- a/contrib/uci/patches/100-unknown-get.patch +++ /dev/null @@ -1,22 +0,0 @@ -Index: uci.git/list.c -=================================================================== ---- uci.git.orig/list.c 2008-08-26 12:31:34.000000000 +0200 -+++ uci.git/list.c 2008-08-26 21:09:10.000000000 +0200 -@@ -398,7 +398,7 @@ - e = uci_lookup_list(&ptr->p->sections, ptr->section); - - if (!e) -- goto abort; -+ goto notfound; - - ptr->last = e; - ptr->s = uci_to_section(e); -@@ -406,7 +406,7 @@ - if (ptr->option) { - e = uci_lookup_list(&ptr->s->options, ptr->option); - if (!e) -- goto abort; -+ goto notfound; - - ptr->o = uci_to_option(e); - ptr->last = e; diff --git a/contrib/uci/patches/200-revised-lua-api.patch b/contrib/uci/patches/200-revised-lua-api.patch index 10894ac45d..c31c1454c2 100644 --- a/contrib/uci/patches/200-revised-lua-api.patch +++ b/contrib/uci/patches/200-revised-lua-api.patch @@ -1,7 +1,7 @@ Index: uci.git/lua/uci.c =================================================================== --- uci.git.orig/lua/uci.c 2008-08-26 12:31:34.000000000 +0200 -+++ uci.git/lua/uci.c 2008-08-26 21:09:10.000000000 +0200 ++++ uci.git/lua/uci.c 2008-08-27 00:30:46.000000000 +0200 @@ -25,6 +25,7 @@ #include @@ -244,7 +244,19 @@ Index: uci.git/lua/uci.c goto error; uci_lookup_ptr(ctx, &ptr, NULL, false); -@@ -323,7 +372,7 @@ +@@ -297,6 +346,11 @@ + goto error; + } + ++ if (!(ptr.flags & UCI_LOOKUP_COMPLETE)) { ++ err = UCI_ERR_NOTFOUND; ++ goto error; ++ } ++ + err = UCI_OK; + e = ptr.last; + switch(e->type) { +@@ -323,7 +377,7 @@ switch(err) { default: ctx->err = err; @@ -253,7 +265,7 @@ Index: uci.git/lua/uci.c /* fall through */ case UCI_ERR_NOTFOUND: lua_pushnil(L); -@@ -348,6 +397,7 @@ +@@ -348,6 +402,7 @@ static int uci_lua_add(lua_State *L) { @@ -261,7 +273,7 @@ Index: uci.git/lua/uci.c struct uci_section *s = NULL; struct uci_package *p; const char *package; -@@ -355,9 +405,9 @@ +@@ -355,9 +410,9 @@ const char *name = NULL; do { @@ -274,7 +286,7 @@ Index: uci.git/lua/uci.c if (!p) break; -@@ -374,11 +424,12 @@ +@@ -374,11 +429,12 @@ static int uci_lua_delete(lua_State *L) { @@ -288,7 +300,7 @@ Index: uci.git/lua/uci.c goto error; err = uci_delete(ctx, &ptr); -@@ -387,7 +438,7 @@ +@@ -387,7 +443,7 @@ if (s) free(s); if (err) @@ -297,7 +309,7 @@ Index: uci.git/lua/uci.c lua_pushboolean(L, (err == 0)); return 1; } -@@ -395,6 +446,7 @@ +@@ -395,6 +451,7 @@ static int uci_lua_set(lua_State *L) { @@ -305,7 +317,7 @@ Index: uci.git/lua/uci.c bool istable = false; struct uci_ptr ptr; int err = UCI_ERR_MEM; -@@ -402,14 +454,14 @@ +@@ -402,14 +459,14 @@ int i, nargs; nargs = lua_gettop(L); @@ -323,7 +335,7 @@ Index: uci.git/lua/uci.c /* Format: uci.set("p", "s", "o", "v") */ if (lua_istable(L, nargs)) { if (lua_objlen(L, nargs) < 1) -@@ -422,7 +474,7 @@ +@@ -422,7 +479,7 @@ ptr.value = luaL_checkstring(L, nargs); } break; @@ -332,7 +344,7 @@ Index: uci.git/lua/uci.c /* Format: uci.set("p", "s", "v") */ ptr.value = ptr.option; ptr.option = NULL; -@@ -433,17 +485,23 @@ +@@ -433,17 +490,23 @@ } err = uci_lookup_ptr(ctx, &ptr, NULL, false); @@ -359,7 +371,7 @@ Index: uci.git/lua/uci.c if (istable) { for (i = 2; i <= lua_objlen(L, nargs); i++) { -@@ -458,7 +516,7 @@ +@@ -458,7 +521,7 @@ error: if (err) @@ -368,7 +380,7 @@ Index: uci.git/lua/uci.c lua_pushboolean(L, (err == 0)); return 1; } -@@ -472,6 +530,7 @@ +@@ -472,6 +535,7 @@ static int uci_lua_package_cmd(lua_State *L, enum pkg_cmd cmd) { @@ -376,7 +388,7 @@ Index: uci.git/lua/uci.c struct uci_element *e, *tmp; struct uci_ptr ptr; char *s = NULL; -@@ -479,10 +538,10 @@ +@@ -479,10 +543,10 @@ int nargs; nargs = lua_gettop(L); @@ -389,7 +401,7 @@ Index: uci.git/lua/uci.c goto err; uci_lookup_ptr(ctx, &ptr, NULL, false); -@@ -562,16 +621,16 @@ +@@ -562,16 +626,16 @@ } static void @@ -409,7 +421,7 @@ Index: uci.git/lua/uci.c if (!p) return; } -@@ -596,6 +655,7 @@ +@@ -596,6 +660,7 @@ static int uci_lua_changes(lua_State *L) { @@ -417,7 +429,7 @@ Index: uci.git/lua/uci.c const char *package = NULL; char **config = NULL; int nargs; -@@ -603,9 +663,9 @@ +@@ -603,9 +668,9 @@ nargs = lua_gettop(L); switch(nargs) { @@ -429,7 +441,7 @@ Index: uci.git/lua/uci.c break; default: luaL_error(L, "invalid argument count"); -@@ -613,13 +673,13 @@ +@@ -613,13 +678,13 @@ lua_newtable(L); if (package) { @@ -445,7 +457,7 @@ Index: uci.git/lua/uci.c } } -@@ -628,29 +688,53 @@ +@@ -628,29 +693,53 @@ } static int @@ -502,7 +514,7 @@ Index: uci.git/lua/uci.c { "load", uci_lua_load }, { "unload", uci_lua_unload }, { "get", uci_lua_get }, -@@ -663,25 +747,33 @@ +@@ -663,25 +752,33 @@ { "revert", uci_lua_revert }, { "changes", uci_lua_changes }, { "foreach", uci_lua_foreach }, diff --git a/libs/cbi/luasrc/cbi.lua b/libs/cbi/luasrc/cbi.lua index 2583ecd070..9393c46a47 100644 --- a/libs/cbi/luasrc/cbi.lua +++ b/libs/cbi/luasrc/cbi.lua @@ -175,7 +175,8 @@ function Map.__init__(self, config, ...) self.config = config self.parsechain = {self.config} self.template = "cbi/map" - if not uci.load_config(self.config) then + self.uci = uci.cursor() + if not self.uci:load(self.config) then error("Unable to read UCI data: " .. self.config) end @@ -192,15 +193,6 @@ function Map.get_scheme(self, sectiontype, option) end end -function Map.render(self, ...) - if self.stateful then - uci.load_state(self.config) - else - uci.load_config(self.config) - end - Node.render(self, ...) -end - -- Chain foreign config function Map.chain(self, config) @@ -209,26 +201,18 @@ end -- Use optimized UCI writing function Map.parse(self, ...) - if self.stateful then - uci.load_state(self.config) - else - uci.load_config(self.config) - end - Node.parse(self, ...) for i, config in ipairs(self.parsechain) do - uci.save_config(config) + self.uci:save(config) end if luci.http.formvalue("cbi.apply") then for i, config in ipairs(self.parsechain) do - uci.commit(config) - if luci.config.uci_oncommit and luci.config.uci_oncommit[config] then - luci.util.exec(luci.config.uci_oncommit[config]) - end + self.uci:commit(config) + self.uci:apply(config) -- Refresh data because commit changes section names - uci.load_config(config) + self.uci:load(config) end -- Reparse sections @@ -236,7 +220,7 @@ function Map.parse(self, ...) end for i, config in ipairs(self.parsechain) do - uci.unload(config) + self.uci:unload(config) end end @@ -253,35 +237,35 @@ end -- UCI add function Map.add(self, sectiontype) - return uci.add(self.config, sectiontype) + return self.uci:add(self.config, sectiontype) end -- UCI set function Map.set(self, section, option, value) if option then - return uci.set(self.config, section, option, value) + return self.uci:set(self.config, section, option, value) else - return uci.set(self.config, section, value) + return self.uci:set(self.config, section, value) end end -- UCI del function Map.del(self, section, option) if option then - return uci.delete(self.config, section, option) + return self.uci:delete(self.config, section, option) else - return uci.delete(self.config, section) + return self.uci:delete(self.config, section) end end -- UCI get function Map.get(self, section, option) if not section then - return uci.get_all(self.config) + return self.uci:get_all(self.config) elseif option then - return uci.get(self.config, section, option) + return self.uci:get(self.config, section, option) else - return uci.get_all(self.config, section) + return self.uci:get_all(self.config, section) end end @@ -669,7 +653,7 @@ end -- Return all matching UCI sections for this TypedSection function TypedSection.cfgsections(self) local sections = {} - uci.foreach(self.map.config, self.sectiontype, + self.map.uci:foreach(self.map.config, self.sectiontype, function (section) if self:checkscope(section[".name"]) then table.insert(sections, section[".name"]) @@ -706,7 +690,7 @@ function TypedSection.parse(self) self.err_invalid = true end - if name and name:len() > 0 then + if name and #name > 0 then self:create(name) end end @@ -716,9 +700,6 @@ function TypedSection.parse(self) crval = REMOVE_PREFIX .. self.config name = luci.http.formvaluetable(crval) for k,v in pairs(name) do - luci.util.perror(k) - luci.util.perror(self:cfgvalue(k)) - luci.util.perror(self:checkscope(k)) if self:cfgvalue(k) and self:checkscope(k) then self:remove(k) end diff --git a/libs/httpd/host/runluci b/libs/httpd/host/runluci index d31b3f79c5..5a7e8fd6fc 100755 --- a/libs/httpd/host/runluci +++ b/libs/httpd/host/runluci @@ -18,9 +18,9 @@ vhost = luci.httpd.server.VHost() server:set_default_vhost(vhost) if pcall(require, "uci") and pcall(require, "luci.model.uci") then - luci.model.uci.confdir_default = SYSROOT .. luci.model.uci.confdir_default - luci.model.uci.savedir_state = SYSROOT .. luci.model.uci.savedir_state - luci.model.uci.set_confdir(luci.model.uci.confdir_default) + luci.model.uci.cursor = function(config, ...) + return uci.cursor(config or SYSROOT .. "/etc/config", ...) + end end require("luci.sys") diff --git a/libs/sgi-webuci/root/usr/lib/boa/luci.lua b/libs/sgi-webuci/root/usr/lib/boa/luci.lua index d0f4323c34..c7ac168452 100644 --- a/libs/sgi-webuci/root/usr/lib/boa/luci.lua +++ b/libs/sgi-webuci/root/usr/lib/boa/luci.lua @@ -24,9 +24,9 @@ function init(path) if (root ~= '/') then -- Entering dummy mode - luci.model.uci.confdir_default = root .. '/etc/config' - luci.model.uci.savedir_state = root .. '/var/state' - uci.set_confdir(luci.model.uci.confdir_default) + luci.model.uci.cursor = function(config, ...) + return uci.cursor(config or root .. "/etc/config", ...) + end luci.sys.hostname = function() return "" end luci.sys.loadavg = function() return 0,0,0,0,0 end diff --git a/libs/uci/luasrc/model/uci.lua b/libs/uci/luasrc/model/uci.lua index 6c4ae6ed8b..333abf4072 100644 --- a/libs/uci/luasrc/model/uci.lua +++ b/libs/uci/luasrc/model/uci.lua @@ -29,20 +29,26 @@ local table = require "table" local setmetatable, rawget, rawset = setmetatable, rawget, rawset local error, pairs, ipairs, tostring = error, pairs, ipairs, tostring -local require = require +local require, getmetatable = require, getmetatable --- LuCI UCI model library. -module("luci.model.uci", function(m) setmetatable(m, {__index = uci}) end) +module("luci.model.uci") -savedir_default = "/tmp/.uci" -confdir_default = "/etc/config" +cursor = uci.cursor +APIVERSION = uci.APIVERSION -savedir_state = "/var/state" +--- Creates a new statevalue cursor +-- @return UCI cursor +function cursor_state() + return cursor(nil, "/var/state") +end +--- UCI-Cursor +local Cursor = getmetatable(cursor()) --- Applies the new config -- @param config UCI config -function apply(config) +function Cursor.apply(self, config) local conf = require "luci.config" return conf.uci_oncommit[config] and os.execute(conf.uci_oncommit[config]) end @@ -52,18 +58,18 @@ end -- @param type UCI section type -- @param comparator Function that will be called for each section and -- returns a boolean whether to delete the current section (optional) -function delete_all(config, type, comparator) +function Cursor.delete_all(self, config, type, comparator) local del = {} local function helper (section) - if not comparator or comparator(section) then - table.insert(del, section[".name"]) - end + if not comparator or comparator(section) then + table.insert(del, section[".name"]) + end end - foreach(config, type, helper) + self:foreach(config, type, helper) for i, j in ipairs(del) do - delete(config, j) + self:delete(config, j) end end @@ -73,73 +79,31 @@ end -- @param name UCI section name (optional) -- @param values Table of key - value pairs to initialize the section with -- @return Name of created section -function section(config, type, name, values) +function Cursor.section(self, config, type, name, values) local stat = true if name then - stat = set(config, name, type) + stat = self:set(config, name, type) else - name = add(config, type) + name = self:add(config, type) stat = name and true end if stat and values then - stat = tset(config, name, values) + stat = self:tset(config, name, values) end return stat and name end ---- Savely load the configuration. --- @param config Configuration to load --- @return Sucess status --- @see load_state --- @see load -function load_config(...) - set_confdir(confdir_default) - set_savedir(savedir_default) - return load(...) -end - ---- Savely load state values. --- @param config Configuration to load --- @return Sucess status --- @see load_config --- @see load -function load_state(config) - set_confdir(confdir_default) - set_savedir(savedir_state) - return load(config) -end - ---- Save changes to config values. --- @param config Configuration to save --- @return Sucess status --- @see save_state --- @see save -function save_config(config) - set_savedir(savedir_default) - return save(config) -end - ---- Save changes to state values. --- @param config Configuration to save --- @return Sucess status --- @see save_config --- @see save -function save_state(config) - set_savedir(savedir_state) - return save(config) -end - --- Updated the data of a section using data from a table. -- @param config UCI config -- @param section UCI section name (optional) -- @param values Table of key - value pairs to update the section with -function tset(config, section, values) +function Cursor.tset(self, config, section, values) local stat = true for k, v in pairs(values) do if k:sub(1, 1) ~= "." then - stat = stat and set(config, section, k, v) + stat = stat and self:set(config, section, k, v) end end return stat @@ -150,9 +114,9 @@ end -- @param section UCI section name -- @param option UCI option -- @return UCI value -function get_list(config, section, option) +function Cursor.get_list(self, config, section, option) if config and section and option then - local val = get(config, section, option) + local val = self:get(config, section, option) return ( type(val) == "table" and val or { val } ) end return nil @@ -164,9 +128,9 @@ end -- @param option UCI option -- @param value UCI value -- @return Boolean whether operation succeeded -function set_list(config, section, option, value) +function Cursor.set_list(self, config, section, option, value) if config and section and option then - return set( + return self:set( config, section, option, ( type(value) == "table" and value or { value } ) ) @@ -177,27 +141,27 @@ end --- Add an anonymous section. -- @class function --- @name add +-- @name Cursor.add -- @param config UCI config -- @param type UCI section type -- @return Name of created section --- Get a table of unsaved changes. -- @class function --- @name changes +-- @name Cursor.changes -- @param config UCI config -- @return Table of changes --- Commit unsaved changes. -- @class function --- @name commit +-- @name Cursor.commit -- @param config UCI config -- @return Boolean whether operation succeeded -- @see revert --- Deletes a section or an option. -- @class function --- @name delete +-- @name Cursor.delete -- @param config UCI config -- @param section UCI section name -- @param option UCI option (optional) @@ -205,7 +169,7 @@ end --- Call a function for every section of a certain type. -- @class function --- @name foreach +-- @name Cursor.foreach -- @param config UCI config -- @param type UCI section type -- @param callback Function to be called @@ -213,7 +177,7 @@ end --- Get a section type or an option -- @class function --- @name get +-- @name Cursor.get -- @param config UCI config -- @param section UCI section name -- @param option UCI option (optional) @@ -221,7 +185,7 @@ end --- Get all sections of a config or all values of a section. -- @class function --- @name get_all +-- @name Cursor.get_all -- @param config UCI config -- @param section UCI section name (optional) -- @return Table of UCI sections or table of UCI values @@ -229,7 +193,7 @@ end --- Manually load a config. -- Warning: This function is unsave! You should use load_config or load_state if possible. -- @class function --- @name load +-- @name Cursor.load -- @param config UCI config -- @return Boolean whether operation succeeded -- @see load_config @@ -239,14 +203,14 @@ end --- Revert unsaved changes. -- @class function --- @name revert +-- @name Cursor.revert -- @param config UCI config -- @return Boolean whether operation succeeded -- @see commit --- Saves changes made to a config to make them committable. -- @class function --- @name save +-- @name Cursor.save -- @param config UCI config -- @return Boolean whether operation succeeded -- @see load @@ -254,28 +218,38 @@ end --- Set a value or create a named section. -- @class function --- @name set +-- @name Cursor.set -- @param config UCI config -- @param section UCI section name -- @param option UCI option or UCI section type -- @param value UCI value or nil if you want to create a section -- @return Boolean whether operation succeeded +--- Get the configuration directory. +-- @class function +-- @name Cursor.get_confdir +-- @return Configuration directory + +--- Get the directory for uncomitted changes. +-- @class function +-- @name Cursor.get_savedir +-- @return Save directory + --- Set the configuration directory. -- @class function --- @name set_confdir +-- @name Cursor.set_confdir -- @param directory UCI configuration directory -- @return Boolean whether operation succeeded --- Set the directory for uncommited changes. -- @class function --- @name set_savedir +-- @name Cursor.set_savedir -- @param directory UCI changes directory -- @return Boolean whether operation succeeded --- Discard changes made to a config. -- @class function --- @name unload +-- @name Cursor.unload -- @param config UCI config -- @return Boolean whether operation succeeded -- @see load diff --git a/libs/web/luasrc/config.lua b/libs/web/luasrc/config.lua index 72bd5aa924..955ede9adb 100644 --- a/libs/web/luasrc/config.lua +++ b/libs/web/luasrc/config.lua @@ -28,6 +28,6 @@ limitations under the License. module("luci.config", function(m) if pcall(require, "luci.model.uci") then - setmetatable(m, {__index = luci.model.uci.get_all("luci")}) + setmetatable(m, {__index = luci.model.uci.cursor():get_all("luci")}) end end) \ No newline at end of file diff --git a/modules/admin-core/luasrc/tools/webadmin.lua b/modules/admin-core/luasrc/tools/webadmin.lua index 1e3d9e002a..f7eddd8002 100644 --- a/modules/admin-core/luasrc/tools/webadmin.lua +++ b/modules/admin-core/luasrc/tools/webadmin.lua @@ -14,7 +14,7 @@ $Id$ ]]-- module("luci.tools.webadmin", package.seeall) -require("luci.model.uci") +local uci = require("luci.model.uci") require("luci.sys") require("luci.ip") @@ -59,11 +59,12 @@ function date_format(secs) end function network_get_addresses(net) - luci.model.uci.load_state("network") + local state = uci.cursor_state() + state:load("network") local addr = {} - local ipv4 = luci.model.uci.get("network", net, "ipaddr") - local mav4 = luci.model.uci.get("network", net, "netmask") - local ipv6 = luci.model.uci.get("network", net, "ip6addr") + local ipv4 = state:get("network", net, "ipaddr") + local mav4 = state:get("network", net, "netmask") + local ipv6 = state:get("network", net, "ip6addr") if ipv4 and mav4 then ipv4 = luci.ip.IPv4(ipv4, mav4) @@ -77,7 +78,7 @@ function network_get_addresses(net) table.insert(addr, ipv6) end - luci.model.uci.foreach("network", "alias", + state:foreach("network", "alias", function (section) if section.interface == net then if section.ipaddr and section.netmask then @@ -99,7 +100,7 @@ function network_get_addresses(net) end function cbi_add_networks(field) - luci.model.uci.foreach("network", "interface", + uci.cursor():foreach("network", "interface", function (section) if section[".name"] ~= "loopback" then field:value(section[".name"]) @@ -116,13 +117,14 @@ function cbi_add_knownips(field) end function network_get_zones(net) - if not luci.model.uci.load_state("firewall") then + local state = uci.cursor_state() + if not state:load("firewall") then return nil end local zones = {} - luci.model.uci.foreach("firewall", "zone", + state:foreach("firewall", "zone", function (section) local znet = section.network or section.name if luci.util.contains(luci.util.split(znet, " "), net) then @@ -137,7 +139,7 @@ end function firewall_find_zone(name) local find - luci.model.uci.foreach("firewall", "zone", + luci.model.uci.cursor():foreach("firewall", "zone", function (section) if section.name == name then find = section[".name"] @@ -149,12 +151,13 @@ function firewall_find_zone(name) end function iface_get_network(iface) - luci.model.uci.load_state("network") + local state = uci.cursor_state() + state:load("network") local net - luci.model.uci.foreach("network", "interface", + state:foreach("network", "interface", function (section) - local ifname = luci.model.uci.get( + local ifname = state:get( "network", section[".name"], "ifname" ) diff --git a/modules/admin-full/luasrc/controller/admin/network.lua b/modules/admin-full/luasrc/controller/admin/network.lua index 23a575852b..f95b8324dd 100644 --- a/modules/admin-full/luasrc/controller/admin/network.lua +++ b/modules/admin-full/luasrc/controller/admin/network.lua @@ -15,7 +15,7 @@ module("luci.controller.admin.network", package.seeall) function index() require("luci.i18n") - require("luci.model.uci") + local uci = require("luci.model.uci").cursor() local i18n = luci.i18n.translate local page = node("admin", "network") @@ -32,7 +32,7 @@ function index() page.target = form("admin_network/wireless") page.title = i18n("wifi") page.order = 15 - luci.model.uci.foreach("wireless", "wifi-device", + uci:foreach("wireless", "wifi-device", function (section) local ifc = section[".name"] entry({"admin", "network", "wireless", ifc}, @@ -49,7 +49,7 @@ function index() page.target = cbi("admin_network/network") page.title = i18n("interfaces", "Schnittstellen") page.order = 10 - luci.model.uci.foreach("network", "interface", + uci:foreach("network", "interface", function (section) local ifc = section[".name"] if ifc ~= "loopback" then diff --git a/modules/admin-full/luasrc/controller/admin/system.lua b/modules/admin-full/luasrc/controller/admin/system.lua index fdddf6b8d6..6cf951a154 100644 --- a/modules/admin-full/luasrc/controller/admin/system.lua +++ b/modules/admin-full/luasrc/controller/admin/system.lua @@ -216,7 +216,7 @@ end function _keep_pattern() local kpattern = "" - local files = luci.model.uci.get_all("luci", "flash_keep") + local files = luci.model.uci.cursor():get_all("luci", "flash_keep") if files then kpattern = "" for k,v in pairs(files) do diff --git a/modules/admin-full/luasrc/controller/admin/uci.lua b/modules/admin-full/luasrc/controller/admin/uci.lua index 5dd0aaf6e2..f5a45707c5 100644 --- a/modules/admin-full/luasrc/controller/admin/uci.lua +++ b/modules/admin-full/luasrc/controller/admin/uci.lua @@ -48,7 +48,7 @@ function convert_changes(changes) end function action_changes() - local changes = convert_changes(luci.model.uci.changes()) + local changes = convert_changes(luci.model.uci.cursor():changes()) luci.template.render("admin_uci/changes", {changes=changes}) end @@ -56,6 +56,7 @@ function action_apply() local path = luci.dispatcher.context.path local changes = luci.model.uci.changes() local output = "" + local uci = luci.model.uci.cursor() if changes then local com = {} @@ -65,9 +66,9 @@ function action_apply() for r, tbl in pairs(changes) do if r then if path[#path] ~= "apply" then - luci.model.uci.load_config(r) - luci.model.uci.commit(r) - luci.model.uci.unload(r) + uci:load(r) + uci:commit(r) + uci:unload(r) end if luci.config.uci_oncommit and luci.config.uci_oncommit[r] then run[luci.config.uci_oncommit[r]] = true @@ -87,15 +88,16 @@ end function action_revert() - local changes = luci.model.uci.changes() + local uci = luci.model.uci.cursor() + local changes = uci:changes() if changes then local revert = {} -- Collect files to be reverted for r, tbl in pairs(changes) do - luci.model.uci.load_config(r) - luci.model.uci.revert(r) - luci.model.uci.unload(r) + uci:load(r) + uci:revert(r) + uci:unload(r) end end diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/dhcp.lua b/modules/admin-full/luasrc/model/cbi/admin_network/dhcp.lua index af018eaa85..42b93b5994 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/dhcp.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/dhcp.lua @@ -24,7 +24,8 @@ s.anonymous = true iface = s:option(ListValue, "interface", translate("interface")) luci.tools.webadmin.cbi_add_networks(iface) -luci.model.uci.foreach("network", "interface", +local uci = luci.model.uci.cursor() +uci:foreach("network", "interface", function (section) if section[".name"] ~= "loopback" then iface.default = iface.default or section[".name"] @@ -32,7 +33,7 @@ luci.model.uci.foreach("network", "interface", end end) -luci.model.uci.foreach("network", "alias", +uci:foreach("network", "alias", function (section) iface:value(section[".name"]) s:depends("interface", section[".name"]) diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/dhcpleases.lua b/modules/admin-full/luasrc/model/cbi/admin_network/dhcpleases.lua index 3c89de31da..0b2f55a31d 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/dhcpleases.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/dhcpleases.lua @@ -16,7 +16,7 @@ require("luci.tools.webadmin") m2 = Map("luci_ethers", translate("dhcp_leases")) local leasefn, leasefp, leases -luci.model.uci.foreach("dhcp", "dnsmasq", +luci.model.uci.cursor():foreach("dhcp", "dnsmasq", function(section) leasefn = section.leasefile end diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua b/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua index 716631232b..5470b8a241 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua @@ -49,8 +49,8 @@ if zones then fwzone.rmempty = true fwzone:value("", "- " .. translate("none") .. " -") fwzone:value(arg[1]) - luci.model.uci.load_config("firewall") - luci.model.uci.foreach("firewall", "zone", + m.uci:load("firewall") + m.uci:foreach("firewall", "zone", function (section) fwzone:value(section.name) end @@ -61,14 +61,14 @@ if zones then local stat if not zone then - stat = luci.model.uci.section("firewall", "zone", nil, { + stat = m.uci:section("firewall", "zone", nil, { name = value, network = section }) else - local net = luci.model.uci.get("firewall", zone, "network") + local net = m.uci:get("firewall", zone, "network") net = (net or value) .. " " .. section - stat = luci.model.uci.set("firewall", zone, "network", net) + stat = m.uci:set("firewall", zone, "network", net) end if stat then @@ -80,7 +80,7 @@ if zones then fwzone.value = table.concat(zones, ", ") end fwzone.titleref = luci.dispatcher.build_url("admin", "network", "firewall", "zones") - luci.model.uci.unload("firewall") + m.uci:unload("firewall") end ipaddr = s:option(Value, "ipaddr", translate("ipaddress")) diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/network.lua b/modules/admin-full/luasrc/model/cbi/admin_network/network.lua index 3924e7c6cb..c32aea891f 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/network.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/network.lua @@ -15,11 +15,7 @@ $Id$ require("luci.sys") require("luci.tools.webadmin") -luci.model.uci.load_state("network") -local netstate = luci.model.uci.get_all("network") -luci.model.uci.unload("network") - - +local netstate = luci.model.uci.cursor_state():get_all("network") m = Map("network", translate("interfaces")) local created @@ -70,7 +66,8 @@ end ifname.titleref = luci.dispatcher.build_url("admin", "network", "vlan") -if luci.model.uci.load("firewall") then + +if luci.model.uci.cursor():load("firewall") then zone = s:option(DummyValue, "_zone", translate("zone")) zone.titleref = luci.dispatcher.build_url("admin", "network", "firewall", "zones") diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/routes.lua b/modules/admin-full/luasrc/model/cbi/admin_network/routes.lua index d7b8519686..aa32324e69 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/routes.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/routes.lua @@ -48,11 +48,6 @@ s = m:section(TypedSection, "route", translate("a_n_routes_static")) s.addremove = true s.anonymous = true -function s.render(...) - luci.model.uci.load_config("network") - TypedSection.render(...) -end - s.template = "cbi/tblsection" iface = s:option(ListValue, "interface", translate("interface")) diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua b/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua index e53fb14fd3..46f05a3afd 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua @@ -86,12 +86,12 @@ network.combobox_manual = translate("a_w_netmanual") luci.tools.webadmin.cbi_add_networks(network) function network.write(self, section, value) - if not luci.model.uci.get("network", value) then + if not m:uci.get("network", value) then m:chain("network") - luci.model.uci.set("network", value, "interface") + m.uci:set("network", value, "interface") Value.write(self, section, value) else - if luci.model.uci.get("network", value) == "interface" then + if m.uci:get("network", value) == "interface" then Value.write(self, section, value) end end diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/wireless.lua b/modules/admin-full/luasrc/model/cbi/admin_network/wireless.lua index 4c7794db91..4f19f4e2c2 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/wireless.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/wireless.lua @@ -15,10 +15,7 @@ $Id$ require("luci.sys") require("luci.tools.webadmin") -luci.model.uci.load_state("wireless") -local wireless = luci.model.uci.get_all("wireless") -luci.model.uci.unload("wireless") - +local wireless = luci.model.uci.cursor_state():get_all("wireless") local wifidata = luci.sys.wifi.getiwconfig() local ifaces = {} @@ -123,9 +120,10 @@ for k, v in pairs(wireless) do end function create.write(self, section, value) - luci.model.uci.load_config("wireless") - luci.model.uci.section("wireless", "wifi-iface", nil, {device=value}) - luci.model.uci.save_config("wireless") + local uci = luci.model.uci.cursor() + uci:load("wireless") + uci:section("wireless", "wifi-iface", nil, {device=value}) + uci:save("wireless") luci.http.redirect(luci.http.getenv("REQUEST_URI") .. "/" .. value) end diff --git a/modules/admin-mini/luasrc/controller/mini/system.lua b/modules/admin-mini/luasrc/controller/mini/system.lua index be6cdb6b5e..c3910a3020 100644 --- a/modules/admin-mini/luasrc/controller/mini/system.lua +++ b/modules/admin-mini/luasrc/controller/mini/system.lua @@ -113,7 +113,7 @@ end function _keep_pattern() local kpattern = "" - local files = luci.model.uci.get_all("luci", "flash_keep") + local files = luci.model.uci.cursor():get_all("luci", "flash_keep") if files then kpattern = "" for k,v in pairs(files) do diff --git a/modules/admin-mini/luasrc/controller/mini/uci.lua b/modules/admin-mini/luasrc/controller/mini/uci.lua index 9b57fe31ab..31e04051b4 100644 --- a/modules/admin-mini/luasrc/controller/mini/uci.lua +++ b/modules/admin-mini/luasrc/controller/mini/uci.lua @@ -48,12 +48,13 @@ function convert_changes(changes) end function action_changes() - local changes = convert_changes(luci.model.uci.changes()) + local changes = convert_changes(luci.model.uci.cursor():changes()) luci.template.render("mini/uci_changes", {changes=changes}) end function action_apply() - local changes = luci.model.uci.changes() + local uci = luci.model.uci.cursor() + local changes = uci:changes() local output = "" if changes then @@ -63,9 +64,9 @@ function action_apply() -- Collect files to be applied and commit changes for r, tbl in pairs(changes) do if r then - luci.model.uci.load_config(r) - luci.model.uci.commit(r) - luci.model.uci.unload(r) + uci:load(r) + uci:commit(r) + uci:unload(r) if luci.config.uci_oncommit and luci.config.uci_oncommit[r] then run[luci.config.uci_oncommit[r]] = true end @@ -84,15 +85,16 @@ end function action_revert() - local changes = luci.model.uci.changes() + local uci = luci.model.uci.cursor() + local changes = uci:changes() if changes then local revert = {} -- Collect files to be reverted for r, tbl in pairs(changes) do - luci.model.uci.load_config(r) - luci.model.uci.revert(r) - luci.model.uci.unload(r) + uci:load(r) + uci:revert(r) + uci:unload(r) end end diff --git a/modules/admin-mini/luasrc/model/cbi/mini/dhcp.lua b/modules/admin-mini/luasrc/model/cbi/mini/dhcp.lua index 85b2c86aad..e01890f0a3 100644 --- a/modules/admin-mini/luasrc/model/cbi/mini/dhcp.lua +++ b/modules/admin-mini/luasrc/model/cbi/mini/dhcp.lua @@ -58,7 +58,7 @@ time.rmempty = true m2 = Map("luci_ethers", translate("dhcp_leases")) local leasefn, leasefp, leases -luci.model.uci.foreach("dhcp", "dnsmasq", +luci.model.uci.cursor():foreach("dhcp", "dnsmasq", function(section) leasefn = section.leasefile end diff --git a/modules/admin-mini/luasrc/model/cbi/mini/network.lua b/modules/admin-mini/luasrc/model/cbi/mini/network.lua index 692f7c456a..4289f35a92 100644 --- a/modules/admin-mini/luasrc/model/cbi/mini/network.lua +++ b/modules/admin-mini/luasrc/model/cbi/mini/network.lua @@ -15,9 +15,7 @@ $Id$ require("luci.tools.webadmin") require("luci.sys") -luci.model.uci.load_state("network") -local network = luci.model.uci.get_all("network") -luci.model.uci.unload("network") +local network = luci.model.uci.cursor_state():get_all("network") local netstat = luci.sys.net.deviceinfo() local ifaces = {} diff --git a/modules/admin-mini/luasrc/model/cbi/mini/wifi.lua b/modules/admin-mini/luasrc/model/cbi/mini/wifi.lua index 95407be85f..64e7400ca0 100644 --- a/modules/admin-mini/luasrc/model/cbi/mini/wifi.lua +++ b/modules/admin-mini/luasrc/model/cbi/mini/wifi.lua @@ -15,10 +15,7 @@ $Id$ -- Data init -- -luci.model.uci.load_state("wireless") -local wireless = luci.model.uci.get_all("wireless") -luci.model.uci.unload("wireless") - +local wireless = luci.model.uci.cursor_state():get_all("wireless") local wifidata = luci.sys.wifi.getiwconfig() local ifaces = {} @@ -148,7 +145,7 @@ s.anonymous = true s:option(Value, "ssid", translate("a_w_netid")).maxlength = 32 local devs = {} -luci.model.uci.foreach("wireless", "wifi-device", +luci.model.uci.cursor():foreach("wireless", "wifi-device", function (section) table.insert(devs, section[".name"]) end) @@ -167,21 +164,21 @@ mode:value("sta", translate("m_w_client")) function mode.write(self, section, value) if value == "sta" then -- ToDo: Move this away - if not luci.model.uci.get("network", "wan") then - luci.model.uci.set("network", "wan", "proto", "none") - luci.model.uci.set("network", "wan", "ifname", " ") + if not m.uci:get("network", "wan") then + m.uci:set("network", "wan", "proto", "none") + m.uci:set("network", "wan", "ifname", " ") end - local oldif = luci.model.uci.get("network", "wan", "ifname") + local oldif = m.uci:get("network", "wan", "ifname") if oldif and oldif ~= " " then - luci.model.uci.set("network", "wan", "_ifname", oldif) + m.uci:set("network", "wan", "_ifname", oldif) end - luci.model.uci.set("network", "wan", "ifname", " ") + m.uci:set("network", "wan", "ifname", " ") self.map:set(section, "network", "wan") else - if luci.model.uci.get("network", "wan", "_ifname") then - luci.model.uci.set("network", "wan", "ifname", luci.model.uci.get("network", "wan", "_ifname")) + if m.uci:get("network", "wan", "_ifname") then + m.uci:set("network", "wan", "ifname", m.uci:get("network", "wan", "_ifname")) end self.map:set(section, "network", "lan") end diff --git a/modules/freifunk/luasrc/controller/freifunk/luciinfo.lua b/modules/freifunk/luasrc/controller/freifunk/luciinfo.lua deleted file mode 100644 index 5ddb791fe2..0000000000 --- a/modules/freifunk/luasrc/controller/freifunk/luciinfo.lua +++ /dev/null @@ -1,57 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface - -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 - -$Id$ -]]-- -module("luci.controller.freifunk.luciinfo", package.seeall) - -function index() - node("freifunk", "luciinfo").target = call("action_index") -end - -function action_index() - local uci = luci.model.uci - luci.http.prepare_content("text/plain") - - -- General - luci.http.write("luciinfo.api=1\n") - luci.http.write("luciinfo.version=" .. tostring(require("luci").__version__) .. "\n") - - -- Sysinfo - local s, m, r = luci.sys.sysinfo() - local dr = luci.sys.net.defaultroute() - dr = dr and luci.ip.Hex(dr.Gateway, 32, luci.ip.FAMILY_INET4):string() - local l1, l5, l15 = luci.sys.loadavg() - - luci.http.write("sysinfo.system=" .. sanitize(s) .. "\n") - luci.http.write("sysinfo.cpu=" .. sanitize(m) .. "\n") - luci.http.write("sysinfo.ram=" .. sanitize(r) .. "\n") - luci.http.write("sysinfo.hostname=" .. sanitize(luci.sys.hostname()) .. "\n") - luci.http.write("sysinfo.load1=" .. tostring(l1) .. "\n") - luci.http.write("sysinfo.load5=" .. tostring(l5) .. "\n") - luci.http.write("sysinfo.load15=" .. tostring(l15) .. "\n") - luci.http.write("sysinfo.defaultgw=" .. dr or "" .. "\n") - - - -- Freifunk - local ff = uci.get_all("freifunk") or {} - for k, v in pairs(ff) do - for i, j in pairs(v) do - if i:sub(1, 1) ~= "." then - luci.http.write("freifunk." .. k .. "." .. i .. "=" .. j .. "\n") - end - end - end -end - -function sanitize(val) - return val:gsub("\n", "\t") -end \ No newline at end of file diff --git a/modules/freifunk/luasrc/view/freifunk/contact.htm b/modules/freifunk/luasrc/view/freifunk/contact.htm index 8de7b8d1cd..12b072c021 100644 --- a/modules/freifunk/luasrc/view/freifunk/contact.htm +++ b/modules/freifunk/luasrc/view/freifunk/contact.htm @@ -13,7 +13,7 @@ $Id$ -%> <%+header%> -<% local contact = luci.model.uci.get_all("freifunk", "contact") %> +<% local contact = luci.model.uci.cursor():get_all("freifunk", "contact") %>

<%:contact%>

diff --git a/modules/freifunk/luasrc/view/freifunk/index.htm b/modules/freifunk/luasrc/view/freifunk/index.htm index 2d9b5a63ef..d9cc6a30dc 100644 --- a/modules/freifunk/luasrc/view/freifunk/index.htm +++ b/modules/freifunk/luasrc/view/freifunk/index.htm @@ -13,7 +13,7 @@ $Id$ -%> <%+header%> -<% local ff = luci.model.uci.get_all("freifunk") %> +<% local ff = luci.model.uci.cursor():get_all("freifunk") %>

<%:hellonet%> <%=ff.community.name%>!

<%:public1%>
<%:public2%><%=luci.sys.hostname()%>. <%:public3%> diff --git a/modules/rpc/luasrc/controller/rpc/uci.lua b/modules/rpc/luasrc/controller/rpc/uci.lua index 2dab4e01a5..de7da2de7d 100644 --- a/modules/rpc/luasrc/controller/rpc/uci.lua +++ b/modules/rpc/luasrc/controller/rpc/uci.lua @@ -13,7 +13,8 @@ http://www.apache.org/licenses/LICENSE-2.0 $Id$ ]]-- -local uci = require "luci.model.uci" +local uci = require "luci.model.uci".cursor() +local ucis = require "luci.model.uci".cursor_state() local table = require "table" @@ -21,73 +22,73 @@ module "luci.controller.rpc.uci" _M, _PACKAGE, _NAME = nil, nil, nil function add(config, ...) - uci.load_config(config) - local stat = uci.add(config, ...) - return uci.save_config(config) and stat + uci:load(config) + local stat = uci:add(config, ...) + return uci:save(config) and stat end function apply(config) - return uci.apply(config) + return uci:apply(config) end function changes(...) - return uci.changes(...) + return uci:changes(...) end function commit(config) - return uci.load(config) and uci.commit(config) + return uci:load(config) and uci:commit(config) end function delete(config, ...) - uci.load(config) - return uci.delete(config, ...) and uci.save(config) + uci:load(config) + return uci:delete(config, ...) and uci:save(config) end function delete_all(config, ...) - uci.load(config) - return uci.delete_all(config, ...) and uci.save(config) + uci:load(config) + return uci:delete_all(config, ...) and uci:save(config) end function foreach(config, stype) - uci.load_config(config) + uci:load(config) local sections = {} - return uci.foreach(config, stype, function(section) + return uci:foreach(config, stype, function(section) table.insert(sections, section) end) and sections end function get(config, ...) - uci.load_config(config) - return uci.get(config, ...) + uci:load(config) + return uci:get(config, ...) end function get_all(config, ...) - uci.load_config(config) - return uci.get_all(config, ...) + uci:load(config) + return uci:get_all(config, ...) end function get_state(config, ...) - uci.load_state(config) - return uci.get(config, ...) + ucis:load(config) + return ucis:get(config, ...) end function revert(config) - return uci.load(config) and uci.revert(config) + return uci:load(config) and uci:revert(config) end function section(config, ...) - uci.load_config(config) - return uci.section(config, ...) and uci.save_config(config) + uci:load(config) + return uci:section(config, ...) and uci:save(config) end function set(config, ...) - uci.load_config(config) - return uci.set(config, ...) and uci.save_config(config) + uci:load(config) + return uci:set(config, ...) and uci:save(config) end function tset(config, ...) - uci.load_config(config) - return uci.tset(config, ...) and uci.save_config(config) + uci:load(config) + return uci:tset(config, ...) and uci:save(config) end diff --git a/themes/fledermaus/luasrc/view/themes/fledermaus/header.htm b/themes/fledermaus/luasrc/view/themes/fledermaus/header.htm index 5cc240ef66..a109582f76 100644 --- a/themes/fledermaus/luasrc/view/themes/fledermaus/header.htm +++ b/themes/fledermaus/luasrc/view/themes/fledermaus/header.htm @@ -154,9 +154,8 @@ end <% if tree.nodes[category] and tree.nodes[category].ucidata then local ucic = 0 - require("luci.model.uci") - luci.model.uci.set_savedir(luci.model.uci.savedir_default) - for i, j in pairs(luci.model.uci.changes()) do + + for i, j in pairs(require("luci.model.uci").cursor():changes()) do for k, l in pairs(j) do for m, n in pairs(l) do ucic = ucic + 1; diff --git a/themes/openwrt-light/luasrc/view/themes/openwrt-light/header.htm b/themes/openwrt-light/luasrc/view/themes/openwrt-light/header.htm index 0d9d1bd2e5..48f2a5f243 100644 --- a/themes/openwrt-light/luasrc/view/themes/openwrt-light/header.htm +++ b/themes/openwrt-light/luasrc/view/themes/openwrt-light/header.htm @@ -161,9 +161,7 @@ end <% if tree.nodes[category] and tree.nodes[category].ucidata then local ucic = 0 - require("luci.model.uci") - luci.model.uci.set_savedir(luci.model.uci.savedir_default) - for i, j in pairs(luci.model.uci.changes()) do + for i, j in pairs(require("luci.model.uci").cursor():changes()) do for k, l in pairs(j) do for m, n in pairs(l) do ucic = ucic + 1; 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 d412ec9ccb..6078d44ff3 100644 --- a/themes/openwrt.org/luasrc/view/themes/openwrt.org/header.htm +++ b/themes/openwrt.org/luasrc/view/themes/openwrt.org/header.htm @@ -162,9 +162,7 @@ end <% if tree.nodes[category] and tree.nodes[category].ucidata then local ucic = 0 - require("luci.model.uci") - luci.model.uci.set_savedir(luci.model.uci.savedir_default) - for i, j in pairs(luci.model.uci.changes()) do + for i, j in pairs(require("luci.model.uci").cursor():changes()) do for k, l in pairs(j) do for m, n in pairs(l) do ucic = ucic + 1; -- 2.30.2

<%:nickname%>:<%=contact.nickname%>