Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
F
ffbs-gluon
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
darkbit
ffbs-gluon
Commits
7c6703d8
Commit
7c6703d8
authored
9 years ago
by
Nils Schneider
Browse files
Options
Downloads
Patches
Plain Diff
luci.model.uci: add add_to_set / remove_from_set
parent
faba9efb
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
patches/packages/luci/0005-model.uci-add-add_to_set-remove_from_set.patch
+103
-0
103 additions, 0 deletions
.../luci/0005-model.uci-add-add_to_set-remove_from_set.patch
with
103 additions
and
0 deletions
patches/packages/luci/0005-model.uci-add-add_to_set-remove_from_set.patch
0 → 100644
+
103
−
0
View file @
7c6703d8
From: Nils Schneider <nils@nilsschneider.net>
Date: Mon, 17 Aug 2015 20:39:58 +0200
Subject: model.uci: add add_to_set / remove_from_set
Adds two functions to simplify working with UCI lists:
- add_to_set, which ensures a given value will be present in a list, and
- remove_from_set, which removes a value from list.
I've called these methods "set" because they treat the list as a set,
i.e. duplicated values will be removed. Also, order is not preserved.
Signed-off-by: Nils Schneider <nils@nilsschneider.net>
diff --git a/modules/luci-base/luasrc/model/uci.lua b/modules/luci-base/luasrc/model/uci.lua
index 1659137..d35b9d7 100644
--- a/modules/luci-base/luasrc/model/uci.lua
+++ b/modules/luci-base/luasrc/model/uci.lua
@@ -9,7 +9,7 @@
local table = require "table"
local setmetatable, rawget, rawset = setmetatable, rawget, rawset
local require, getmetatable = require, getmetatable
-local error, pairs, ipairs = error, pairs, ipairs
+local error, pairs, ipairs, next = error, pairs, ipairs, next
local type, tostring, tonumber, unpack = type, tostring, tonumber, unpack
-- The typical workflow for UCI is: Get a cursor instance from the
@@ -147,6 +147,40 @@
function Cursor.set_list(self, config, section, option, value)
return false
end
+function Cursor.add_to_set(self, config, section, option, value, remove)
+ local list = self:get_list(config, section, option)
+
+ if not list then
+ return false
+ end
+
+ local set = {}
+ for _, l in ipairs(list) do
+ set[l] = true
+ end
+
+ if remove then
+ set[value] = nil
+ else
+ set[value] = true
+ end
+
+ list = {}
+ for k, _ in pairs(set) do
+ table.insert(list, k)
+ end
+
+ if next(list) == nil then
+ return self:delete(config, section, option)
+ else
+ return self:set(config, section, option, list)
+ end
+end
+
+function Cursor.remove_from_set(self, config, section, option, value)
+ self:add_to_set(config, section, option, value, true)
+end
+
-- Return a list of initscripts affected by configuration changes.
function Cursor._affected(self, configlist)
configlist = type(configlist) == "table" and configlist or {configlist}
diff --git a/modules/luci-base/luasrc/model/uci.luadoc b/modules/luci-base/luasrc/model/uci.luadoc
index 1c20866..281bdb2 100644
--- a/modules/luci-base/luasrc/model/uci.luadoc
+++ b/modules/luci-base/luasrc/model/uci.luadoc
@@ -116,6 +116,30 @@
Set given values as list.
]]
---[[
+Add a given value to a list of unique values.
+
+@class function
+@name Cursor.add_to_set
+@param config UCI config
+@param section UCI section name
+@param option UCI option
+@param value UCI value
+@return Boolean whether operation succeeded
+]]
+
+---[[
+Remove a given value from a list of unique values.
+
+@class function
+@name Cursor.add_to_set
+@param config UCI config
+@param section UCI section name
+@param option UCI option
+@param value UCI value
+@return Boolean whether operation succeeded
+]]
+
+---[[
Create a sub-state of this cursor. The sub-state is tied to the parent
curser, means it the parent unloads or loads configs, the sub state will
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment