diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2014-03-11 17:39:54 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2014-03-11 17:39:54 +0000 |
commit | bac13b388c04a7af9c049c75534bc83c931e2611 (patch) | |
tree | db05c42c006afd373ef5bcf2f1ebc7d13abd4b58 /lib/gitano/plugins.lua | |
parent | 2a078069dcfd01c7bf573d53340c8264c3dc4263 (diff) | |
parent | 115c62b1d3e0b98020ec4493ce1d9de512a4995a (diff) | |
download | gitano-bac13b388c04a7af9c049c75534bc83c931e2611.tar.gz |
Merge in rsync work from Codethink
This adds support for Codethink's Trove server's rsync command
and also adds a generic plugin interface and repository detection support.
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
Diffstat (limited to 'lib/gitano/plugins.lua')
-rw-r--r-- | lib/gitano/plugins.lua | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/lib/gitano/plugins.lua b/lib/gitano/plugins.lua new file mode 100644 index 0000000..bdc6d1e --- /dev/null +++ b/lib/gitano/plugins.lua @@ -0,0 +1,63 @@ +-- gitano.plugins +-- +-- Plugin loading support for Gitano +-- +-- Copyright 2014 Daniel Silverstone <daniel.silverstone@codethink.co.uk> + +local util = require "gitano.util" +local log = require "gitano.log" + +local luxio = require "luxio" +local sio = require "luxio.simple" + +local gfind = string.gfind + +local plugin_name_pattern = "^(.+)%.lua$" + +local function find_plugins(path) + local ret = {} + for _, entry in ipairs(path) do + local dirp, err = sio.opendir(entry) + if not dirp then + log.warning(("Unable to scan plugin directory '%s': %s") + :format(entry, err)) + else + for filename, fileinfo in dirp:iterate() do + local plugin_name = filename:match(plugin_name_pattern) + if plugin_name and fileinfo.d_type == luxio.DT_REG then + if not ret[plugin_name] then + ret[plugin_name] = entry + ret[#ret + 1] = plugin_name + end + end + end + end + end + table.sort(ret) + return ret +end + +local function load_plugins(path) + local to_load = find_plugins(path) + for _, plugin_name in ipairs(to_load) do + local filepath = util.path_join(to_load[plugin_name], + plugin_name .. ".lua") + local chunk, err = loadfile(filepath) + if not chunk then + log.warning(("Failure loading plugin '%s' from '%s': %s") + :format(plugin_name, to_load[plugin_name], + err)) + else + local ok, err = pcall(chunk) + if not ok then + log.warning(("Failure running plugin '%s' from '%s': %s") + :format(plugin_name, to_load[plugin_name], + err)) + end + end + end +end + +return { + load_plugins = load_plugins, +} |