summaryrefslogtreecommitdiffhomepage
path: root/modules
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2018-08-04 22:09:49 +0200
committerJo-Philipp Wich <jo@mein.io>2018-08-13 09:23:22 +0200
commit849d153851db2fc193c1c82648dbe719463d3a38 (patch)
treed88b4e4332938f8451be33aaa502e5dbce798b73 /modules
parentc2d36ba280c50d81a5d6e6cfa30b995008c1a98e (diff)
treewide: rework uci change display
- Use native rpcd uci changes format instead of incompletely converting back and forth between the old and the new format - Rework uci changelog template to print the equivalent uci commands for the various changes - Rework theme headers to properly count the uncomitted changes - Rework theme CSS to properly style new changelog Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'modules')
-rw-r--r--modules/luci-base/luasrc/model/uci.lua38
-rw-r--r--modules/luci-mod-admin-full/luasrc/view/admin_uci/changelog.htm89
2 files changed, 43 insertions, 84 deletions
diff --git a/modules/luci-base/luasrc/model/uci.lua b/modules/luci-base/luasrc/model/uci.lua
index b2c1e463b..2119a210b 100644
--- a/modules/luci-base/luasrc/model/uci.lua
+++ b/modules/luci-base/luasrc/model/uci.lua
@@ -95,41 +95,15 @@ end
function changes(self, config)
- local rv = call("changes", { config = config })
- local res = {}
+ local rv, err = call("changes", { config = config })
if type(rv) == "table" and type(rv.changes) == "table" then
- local package, changes
- for package, changes in pairs(rv.changes) do
- res[package] = {}
-
- local _, change
- for _, change in ipairs(changes) do
- local operation, section, option, value = unpack(change)
- if option and operation ~= "add" then
- res[package][section] = res[package][section] or { }
-
- if operation == "list-add" then
- local v = res[package][section][option]
- if type(v) == "table" then
- v[#v+1] = value or ""
- elseif v ~= nil then
- res[package][section][option] = { v, value }
- else
- res[package][section][option] = { value }
- end
- else
- res[package][section][option] = value or ""
- end
- else
- res[package][section] = res[package][section] or {}
- res[package][section][".type"] = option or ""
- end
- end
- end
+ return rv.changes
+ elseif err then
+ return nil, ERRSTR[err]
+ else
+ return { }
end
-
- return res
end
diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_uci/changelog.htm b/modules/luci-mod-admin-full/luasrc/view/admin_uci/changelog.htm
index e05ccdece..8a162c88b 100644
--- a/modules/luci-mod-admin-full/luasrc/view/admin_uci/changelog.htm
+++ b/modules/luci-mod-admin-full/luasrc/view/admin_uci/changelog.htm
@@ -1,5 +1,5 @@
<%#
- Copyright 2010 Jo-Philipp Wich <jow@openwrt.org>
+ Copyright 2010 Jo-Philipp Wich <jo@mein.io>
Licensed to the public under the Apache License 2.0.
-%>
@@ -17,65 +17,50 @@
<div class="uci-change-list"><%
local util = luci.util
- local ret = { }
+ local tpl = {
+ ["add-3"] = "<ins>uci add %0 <strong>%3</strong> # =%2</ins>",
+ ["set-3"] = "<ins>uci set %0.<strong>%2</strong></ins>=%3",
+ ["set-4"] = "<var><ins>uci set %0.%2.%3=<strong>%4</strong></ins></var>",
+ ["remove-2"] = "<del>uci del %0.<strong>%2</strong></del>",
+ ["remove-3"] = "<var><del>uci del %0.%2.<strong>%3</strong></del></var>",
+ ["order-3"] = "<var>uci reorder %0.%2=<strong>%3</strong></var>",
+ ["list-add-4"] = "<var><ins>uci add_list %0.%2.%3=<strong>%4</strong></ins></var>",
+ ["list-del-4"] = "<var><del>uci del_list %0.%2.%3=<strong>%4</strong></del></var>",
+ ["rename-3"] = "<var>uci rename %0.%2=<strong>%3</strong></var>",
+ ["rename-4"] = "<var>uci rename %0.%2.%3=<strong>%4</strong></var>"
+ }
- for r, tbl in pairs(changes) do
- for s, os in pairs(tbl) do
- -- section add
- if os['.type'] and os['.type'] ~= "" then
- ret[#ret+1] = "<ins>%s.%s=<strong>%s</strong>" %{ r, s, os['.type'] }
- for o, v in util.kspairs(os) do
- if o:sub(1,1) ~= "." then
- if type(v) == "table" then
- local i
- for i = 1, #v do
- ret[#ret+1] = "<br />%s.%s.%s+=<strong>%s</strong>"
- %{ r, s, o, util.pcdata(v[i]) }
- end
- elseif v ~= "" then
- ret[#ret+1] = "<br />%s.%s.%s=<strong>%s</strong>"
- %{ r, s, o, util.pcdata(v) }
- else
- ret[#ret+1] = "<br /><del>%s.%s.<strong>%s</strong></del>" %{ r, s, o }
- end
- end
- end
- ret[#ret+1] = "</ins><br />"
-
- -- section delete
- elseif os['.type'] and os['.type'] == "" then
- ret[#ret+1] = "<del>%s.<strong>%s</strong></del><br />" %{ r, s }
+ local conf, deltas
+ for conf, deltas in util.kspairs(changes) do
+ write("<h3># /etc/config/%s</h3>" % conf)
- -- modifications
- else
- ret[#ret+1] = "<var>%s.%s<br />" %{ r, s }
- for o, v in util.kspairs(os) do
- if o:sub(1,1) ~= "." then
- if v and #v > 0 then
- ret[#ret+1] = "<ins>"
- if type(v) == "table" then
- local i
- for i = 1, #v do
- ret[#ret+1] = "%s.%s.%s+=<strong>%s</strong><br />"
- %{ r, s, o, util.pcdata(v[i]) }
- end
+ local _, delta, added
+ for _, delta in pairs(deltas) do
+ local t = tpl["%s-%d" %{ delta[1], #delta }]
- else
- ret[#ret+1] = "%s.%s.%s=<strong>%s</strong><br />"
- %{ r, s, o, util.pcdata(v) }
- end
- ret[#ret+1] = "</ins>"
- else
- ret[#ret+1] = "<del>%s.%s.<strong>%s</strong><br /></del>" %{ r, s, o }
- end
+ write(t:gsub("%%(%d)", function(n)
+ if n == "0" then
+ return conf
+ elseif n == "2" then
+ if added and delta[2] == added[1] then
+ return "@%s[-1]" % added[2]
+ else
+ return delta[2]
end
+ elseif n == "4" then
+ return util.shellquote(delta[4])
+ else
+ return delta[tonumber(n)]
end
- ret[#ret+1] = "</var><br />"
+ end))
+
+ if delta[1] == "add" then
+ added = { delta[2], delta[3] }
end
end
- end
- write(table.concat(ret))
+ write("<br />")
+ end
%></div>
</div>
<%- end) %>