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 1659137742940ea0621e2b57e98232f393dc7efa..e9bac6ec03d10bdd5e4b39d4df6d0fd9459932af 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 80464f7cec574fb2ba018a11042ff33d784be997..f3aa609d59da1cac62f4c0857eb7ad5811c37e11 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
 ]]