summaryrefslogtreecommitdiffhomepage
path: root/libs
diff options
context:
space:
mode:
Diffstat (limited to 'libs')
-rw-r--r--libs/cbi/luasrc/cbi.lua53
-rwxr-xr-xlibs/httpd/host/runluci6
-rw-r--r--libs/sgi-webuci/root/usr/lib/boa/luci.lua6
-rw-r--r--libs/uci/luasrc/model/uci.lua130
-rw-r--r--libs/web/luasrc/config.lua2
5 files changed, 76 insertions, 121 deletions
diff --git a/libs/cbi/luasrc/cbi.lua b/libs/cbi/luasrc/cbi.lua
index 2583ecd07..9393c46a4 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 d31b3f79c..5a7e8fd6f 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 d0f4323c3..c7ac16845 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 6c4ae6ed8..333abf407 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 72bd5aa92..955ede9ad 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