]> git.e2factory.org Git - e2factory.git/commitdiff
result: provide deregister_result_class() to unload plugins
authorTobias Ulmer <tu@emlix.com>
Wed, 26 Jun 2019 14:58:39 +0000 (16:58 +0200)
committerTobias Ulmer <tu@emlix.com>
Wed, 26 Jun 2019 14:58:39 +0000 (16:58 +0200)
also deregister_type_detection()

Signed-off-by: Tobias Ulmer <tu@emlix.com>
local/result.lua

index 60fe0d7668b8913bb9fd1a573206b93fbab304b4..9c3d43145735f1df38526f2afc9f831dc2aae2cc 100644 (file)
@@ -778,13 +778,26 @@ end
 function result.register_type_detection(func)
     assertIsFunction(func)
     for _,fn in ipairs(type_detection_fns) do
-        assert(fn ~= func, err.new("result type detection already registered"))
+        assert(fn ~= func, "result type detection already registered")
     end
     table.insert(type_detection_fns, 1, func)
 
     return true
 end
 
+--- Deregister a type detection function.
+-- @param func Function in the form function(rawres)...end
+function result.deregister_type_detection(func)
+    assertIsFunction(func)
+    for idx=1,#type_detection_fns do
+        if type_detection_fns[idx] == func then
+            table.remove(type_detection_fns, idx)
+            return true
+        end
+    end
+    assert(false, "deregister_type_detection: func wasn't registered")
+end
+
 --- Register a result class. A type can only be registered once.
 -- @param typ Source type name.
 -- @param result_class Class derived from basic_result.
@@ -794,13 +807,30 @@ function result.register_result_class(typ, result_class)
     assertIsStringN(typ)
     assertIsTable(result_class)
     assert(result_types[typ] == nil,
-        err.new("result %q already registered", typ))
+        string.format("result class %q already registered", typ))
 
     result_types[typ] = result_class
 
     return true
 end
 
+--- Deregister a result class.
+-- @param typ Source type name.
+-- @param result_class Class derived from basic_result.
+-- @return True on success, false on error.
+-- @return Error object on failure.
+function result.deregister_result_class(typ, result_class)
+    assertIsStringN(typ)
+    assertIsTable(result_class)
+    assert(result_types[typ] ~= nil,
+        string.format("result class %q not registered", typ))
+
+    result_types[typ] = nil
+
+    return true
+end
+
+
 --- Iterate over registered result classes.
 -- @return Iterator function that returns a sorted type, result class pair.
 function result.iterate_result_classes()