[1155] in BarnOwl Developers
[D-O-H] r1104 - trunk/owl/perl/lib/BarnOwl
daemon@ATHENA.MIT.EDU (nelhage@MIT.EDU)
Thu Oct 29 18:13:35 2009
Resent-From: nelhage@mit.edu
Resent-To: barnowl-dev-mtg@charon.mit.edu
X-Original-To: nelhage@nelhage.com
To: dirty-owl-hackers@mit.edu
From: nelhage@MIT.EDU
Reply-to: dirty-owl-hackers@MIT.EDU
Date: Wed, 20 Aug 2008 02:16:36 -0400 (EDT)
Author: nelhage
Date: 2008-08-20 02:16:36 -0400 (Wed, 20 Aug 2008)
New Revision: 1104
Modified:
trunk/owl/perl/lib/BarnOwl/ModuleLoader.pm
Log:
ModuleLoader.pm: Add a :reload command which reloads a single module
Modified: trunk/owl/perl/lib/BarnOwl/ModuleLoader.pm
===================================================================
--- trunk/owl/perl/lib/BarnOwl/ModuleLoader.pm 2008-08-20 06:16:30 UTC (rev 1103)
+++ trunk/owl/perl/lib/BarnOwl/ModuleLoader.pm 2008-08-20 06:16:36 UTC (rev 1104)
@@ -7,13 +7,29 @@
use PAR (BarnOwl::get_data_dir() . "/modules/*.par");
use PAR (BarnOwl::get_config_dir() . "/modules/*.par");
+our %modules;
+
sub load_all {
+ my $class = shift;
+ $class->rescan_modules;
+
+ for my $mod (keys %modules) {
+ if(!defined eval "use BarnOwl::Module::$mod") {
+ BarnOwl::error("Unable to load module $mod: \n$@\n") if $@;
+ }
+ }
+
+ $BarnOwl::Hooks::startup->add(\®ister_keybindings);
+}
+
+sub rescan_modules {
PAR::reload_libs();
PAR->import(BarnOwl::get_data_dir() . "/modules/*.par");
PAR->import(BarnOwl::get_config_dir() . "/modules/*.par");
- my %modules;
my @modules;
+ %modules = ();
+
my @moddirs = ();
push @moddirs, BarnOwl::get_data_dir() . "/modules";
push @moddirs, BarnOwl::get_config_dir() . "/modules";
@@ -36,22 +52,45 @@
$modules{$class} = 1;
}
}
- for my $class (keys %modules) {
- if(!defined eval "use BarnOwl::Module::$class") {
- # BarnOwl::error("Unable to load module $class: $!") if $!;
- BarnOwl::error("Unable to load module $class: \n$@\n") if $@;
- }
+}
+
+sub reload_module {
+ my $class = shift;
+ my $module = shift;
+
+ $class->rescan_modules();
+
+ for my $m (keys %INC) {
+ delete $INC{$m} if $m =~ m{^BarnOwl/Module/$module};
}
- $BarnOwl::Hooks::startup->add(\®ister_keybindings);
+ local $SIG{__WARN__} = \&squelch_redefine;
+ if(!defined eval "use BarnOwl::Module::$module") {
+ BarnOwl::error("Unable to load module $module: \n$@\n") if $@;
+ }
}
+sub reload_cmd {
+ my $class = shift;
+ shift; # Command
+ my $module = shift;
+ unless(defined($module)) {
+ die("Usage: reload [MODULE]");
+ };
+ $class->reload_module($module);
+}
+
sub register_keybindings {
BarnOwl::new_command('reload-modules', sub {BarnOwl::ModuleLoader->reload}, {
summary => 'Reload all modules',
usage => 'reload-modules',
description => q{Reloads all modules located in ~/.owl/modules and the system modules directory}
});
+ BarnOwl::new_command('reload', sub {BarnOwl::ModuleLoader->reload_cmd(@_)}, {
+ summary => 'Reload one module',
+ usage => 'reload [MODULE]',
+ description => q{Reloads a single module located in ~/.owl/modules or the system modules directory}
+ });
}
sub reload {