diff options
Diffstat (limited to 'libs')
-rw-r--r-- | libs/cbi/luasrc/cbi.lua | 53 | ||||
-rwxr-xr-x | libs/httpd/host/runluci | 6 | ||||
-rw-r--r-- | libs/sgi-webuci/root/usr/lib/boa/luci.lua | 6 | ||||
-rw-r--r-- | libs/uci/luasrc/model/uci.lua | 130 | ||||
-rw-r--r-- | libs/web/luasrc/config.lua | 2 |
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 |