diff options
author | Tom Gilbert <tom@linuxbrit.co.uk> | 2005-08-10 23:04:16 +0000 |
---|---|---|
committer | Tom Gilbert <tom@linuxbrit.co.uk> | 2005-08-10 23:04:16 +0000 |
commit | 3f638c7caec51c834b1703d8fe0415c5ea786224 (patch) | |
tree | 11333aa3e243e5db36787b8ecc75608bbc59cb92 /lib/rbot/plugins.rb | |
parent | 0ee075cd1ea745e0a96e4f12476e554714619a31 (diff) |
patch from Alexey Froloff:
Do not try to load same plugin from different locations. Added
ability to disable system-wide plugins - create
PLUGIN.rb.disabled in user's plugins directory.
For example, to disable freshmeat plugin installed in
/usr/share/rbot/plugins/freshmeat.rb one can create empty file
~/.rbot/plugins/freshmeat.rb.disabled
Diffstat (limited to 'lib/rbot/plugins.rb')
-rw-r--r-- | lib/rbot/plugins.rb | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/rbot/plugins.rb b/lib/rbot/plugins.rb index bffba227..893bb414 100644 --- a/lib/rbot/plugins.rb +++ b/lib/rbot/plugins.rb @@ -173,14 +173,20 @@ module Plugins # load plugins from pre-assigned list of directories def scan + processed = Array.new dirs = Array.new dirs << Config::datadir + "/plugins" dirs += @dirs - dirs.each {|dir| + dirs.reverse.each {|dir| if(FileTest.directory?(dir)) d = Dir.new(dir) d.sort.each {|file| next if(file =~ /^\./) + next if(processed.include?(file)) + if(file =~ /^(.+\.rb)\.disabled$/) + processed << $1 + next + end next unless(file =~ /\.rb$/) tmpfilename = "#{dir}/#{file}" @@ -193,6 +199,7 @@ module Plugins plugin_string = IO.readlines(tmpfilename).join("") debug "loading plugin #{tmpfilename}" plugin_module.module_eval(plugin_string) + processed << file rescue TimeoutError, StandardError, NameError, LoadError, SyntaxError => err puts "warning: plugin #{tmpfilename} load failed: " + err puts err.backtrace.join("\n") |