]> git.e2factory.org Git - e2factory.git/commitdiff
plugin support: allow plugins to extend the scm interface, allow plugins to extend...
authorGordon Hecker <gh@emlix.com>
Thu, 18 Jun 2009 18:39:27 +0000 (20:39 +0200)
committerGordon Hecker <gh@emlix.com>
Fri, 12 Feb 2010 09:51:56 +0000 (10:51 +0100)
Signed-off-by: Gordon Hecker <gh@emlix.com>
local/e2scm.lua

index bacd6c0cff316641f72423f9ffb1250bf3f9fc59..d10d71f9aabf0f4797002060eebd28c9f8a2a2a5 100644 (file)
@@ -65,7 +65,6 @@ function e2scm.register(scm, t)
   t = t or {}
   t.name = scm
   scms[ scm ] = t
-  setmetatable(t, scmmt)
   return t
 end
 
@@ -383,3 +382,39 @@ function scm.has_working_copy(info, sourcename)
        end
        return true, nil
 end
+
+--- register a new scm interface
+-- @param name string: interface name
+-- @param func function: interface function
+-- @return bool
+-- @return an error object on failure
+function scm.register_interface(name, func)
+  local e = new_error("registering scm interface failed")
+  if scm[name] then
+    return false, e:append(
+               "interface with that name exists: %s", name)
+  end
+  scm[name] = func
+  return true, nil
+end
+
+--- register a new scm function (accessible through a scm interface)
+-- @param type string: scm type
+-- @param name string: interface name
+-- @param func function: interface function
+-- @return bool
+-- @return an error object on failure
+function scm.register_function(type, name, func)
+  local e = new_error("registering scm function failed")
+  if not e2scm[type] then
+    return false, e:append("no scm type by that name: %s", type)
+  end
+  if not scm[name] then
+    return false, e:append("no scm interface by that name: %s", name)
+  end
+  if e2scm[type][name] then
+    return false, e:append("scm function exists: %s.%s", type, name)
+  end
+  scms[type][name] = func
+  return true, nil
+end