]> git.e2factory.org Git - e2factory.git/commitdiff
source: provide deregister_source_class() for unloading plugins
authorTobias Ulmer <tu@emlix.com>
Wed, 26 Jun 2019 14:56:25 +0000 (16:56 +0200)
committerTobias Ulmer <tu@emlix.com>
Wed, 26 Jun 2019 14:56:25 +0000 (16:56 +0200)
Signed-off-by: Tobias Ulmer <tu@emlix.com>
local/source.lua

index ad51c1020eb8ef1e2ab4a8986a43ee25f7db100d..7e76764657b035ae7198f45d21684c5007ee60f0 100644 (file)
@@ -338,7 +338,7 @@ function source.register_source_class(typ, source_class)
     assert(type(source_class) == "table")
 
     if source_types[typ] then
-        return false, err.new("source %q already registered", typ)
+        return false, err.new("source class %q already registered", typ)
     end
 
     source_types[typ] = source_class
@@ -346,6 +346,24 @@ function source.register_source_class(typ, source_class)
     return true
 end
 
+--- Deregister a source class.
+-- @param typ Source type name.
+-- @param source_class Class derived from basic_source.
+-- @return True on success, false on error.
+-- @return Error object on failure.
+function source.deregister_source_class(typ, source_class)
+    assert(type(typ) == "string" and typ ~= "")
+    assert(type(source_class) == "table")
+
+    if source_types[typ] == nil then
+        return false, err.new("source class %q not registered", typ)
+    end
+
+    source_types[typ] = nil
+
+    return true
+end
+
 --- Iterate over registered source classes.
 -- @return Iterator function that returns a sorted typ, source class pair.
 function source.iterate_source_classes()