ucitrigger: add options to force enable/disable specific triggers
authorFelix Fietkau <nbd@openwrt.org>
Mon, 6 Jul 2009 19:04:07 +0000 (19:04 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Mon, 6 Jul 2009 19:04:07 +0000 (19:04 +0000)
SVN-Revision: 16718

package/uci/trigger/apply_config [changed mode: 0644->0755]
package/uci/trigger/lib/trigger.lua

old mode 100644 (file)
new mode 100755 (executable)
index 0d9c6cf..b2f48da
@@ -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
index 6710211d00fa4041b82ff110f41d5cb1fc78ebaf..104d27ae443a97949dcd7561a1087650fa0407fb 100644 (file)
@@ -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()