Просмотр исходного кода

ucitrigger: add options to force enable/disable specific triggers

SVN-Revision: 16718
Felix Fietkau 16 лет назад
Родитель
Сommit
069dbf6fd4
2 измененных файлов с 62 добавлено и 4 удалено
  1. 10 0
      package/uci/trigger/apply_config
  2. 52 4
      package/uci/trigger/lib/trigger.lua

+ 10 - 0
package/uci/trigger/apply_config

@@ -9,6 +9,8 @@ function usage()
 	print("    -t: show matching UCI triggers")
 	print("    -s: show information about tasks to be executed")
 	print("    -r: reset all triggers")
+	print("    -C <trigger> [<section>]: force clear a trigger")
+	print("    -S <trigger> [<section>]: force set a trigger")
 	print("")
 end
 
@@ -39,6 +41,14 @@ elseif arg[1] == "-a" then
 	uci.trigger.run()
 elseif arg[1] == "-r" then
 	uci.trigger.reset_state()
+elseif arg[1] == "-S" then
+	local trigger = arg[2]
+	local section = arg[3]
+	uci.trigger.set_active(trigger, section)
+elseif arg[1] == "-C" then
+	local trigger = arg[2]
+	local section = arg[3]
+	uci.trigger.clear_active(trigger, section)
 else
 	usage()
 end

+ 52 - 4
package/uci/trigger/lib/trigger.lua

@@ -253,6 +253,17 @@ function add(ts)
 	end
 end
 
+function save_trigger(name)
+	if triggers.active[name] then
+		local slist = get_names(triggers.active[name])
+		if #slist > 0 then
+			tctx:set("uci_trigger", name, "sections", slist)
+		end
+	else
+		tctx:delete("uci_trigger", name)
+	end
+end
+
 function set(data, cursor)
 	assert(data ~= nil)
 	if cursor == nil then
@@ -296,10 +307,7 @@ function set(data, cursor)
 		if section[".name"] then
 			active[section[".name"]] = true
 		end
-		local slist = get_names(triggers.active[t.id])
-		if #slist > 0 then
-			tctx:set("uci_trigger", t.id, "sections", slist)
-		end
+		save_trigger(t.id)
 	end
 	tctx:save("uci_trigger")
 end
@@ -335,6 +343,46 @@ function get_active()
 	return slist
 end
 
+function set_active(trigger, sections)
+	if triggers == nil then
+		load_state()
+	end
+	if not triggers.list[trigger] then
+		return
+	end
+	if triggers.active[trigger] == nil then
+		tctx:set("uci_trigger", trigger, "trigger")
+		triggers.active[trigger] = {}
+	end
+	local active = triggers.active[trigger]
+	if triggers.list[trigger].section_only or sections ~= nil then
+		for i, t in ipairs(sections) do
+			triggers.active[trigger][t] = true
+		end
+	end
+	save_trigger(trigger)
+	tctx:save("uci_trigger")
+end
+
+function clear_active(trigger, sections)
+	if triggers == nil then
+		load_state()
+	end
+	if triggers.list[trigger] == nil or triggers.active[trigger] == nil then
+		return
+	end
+	local active = triggers.active[trigger]
+	if not triggers.list[trigger].section_only or sections == nil then
+		triggers.active[trigger] = nil
+	else
+		for i, t in ipairs(sections) do
+			triggers.active[trigger][t] = false
+		end
+	end
+	save_trigger(trigger)
+	tctx:save("uci_trigger")
+end
+
 function run(ts)
 	if ts == nil then
 		ts = get_active()