uci:set_list: Delete option if the list is empty
authorKarl Palsson <karlp@remake.is>
Wed, 2 Sep 2015 11:24:29 +0000 (11:24 +0000)
committerKarl Palsson <karlp@remake.is>
Wed, 2 Sep 2015 15:27:55 +0000 (15:27 +0000)
Allows lists fetched with get_list to be modified and simply passed back
to set_list. Explicitly calling set_list() with an empty list is clearly
requesting that there be zero list items, ie, deletion of the option
altogether.

Signed-off-by: Karl Palsson <karlp@remake.is>
modules/luci-base/luasrc/model/uci.lua
modules/luci-base/luasrc/model/uci.luadoc

index 1659137..e9bac6e 100644 (file)
@@ -139,6 +139,9 @@ end
 
 function Cursor.set_list(self, config, section, option, value)
        if config and section and option then
+               if not value or #value == 0 then
+                       return self:delete(config, section, option)
+               end
                return self:set(
                        config, section, option,
                        ( type(value) == "table" and value or { value } )
index 80464f7..f3aa609 100644 (file)
@@ -104,14 +104,15 @@ Get the given option from the first section with the given type.
 ]]
 
 ---[[
-Set given values as list.
+Set given values as list. Setting a list option to an empty list
+has the same effect as deleting the option.
 
 @class function
 @name Cursor.set_list
 @param config  UCI config
 @param section UCI section name
 @param option  UCI option
-@param value           UCI value
+@param value   value or table. Raw values will become a single item table.
 @return                        Boolean whether operation succeeded
 ]]