Author: phred Date: Tue Feb 9 21:37:20 2010 New Revision: 908240 URL: http://svn.apache.org/viewvc?rev=908240&view=rev Log: 'no Apache::Reload' option to ignore reloading modules with that directive.
When Moose is being used, reloading a class will probably result in it being unusable. Especially if the class uses roles or any of the method wrapping calls. This adds "no Apache::Reload" to make sure that such modules are not attempted to be reloaded. Submitted by: Graham Barr <gb...@pobox.com> Signed off by: Fred Moyer <ph...@apache.org>g Modified: perl/Apache-Reload/trunk/Changes perl/Apache-Reload/trunk/lib/Apache/Reload.pm Modified: perl/Apache-Reload/trunk/Changes URL: http://svn.apache.org/viewvc/perl/Apache-Reload/trunk/Changes?rev=908240&r1=908239&r2=908240&view=diff ============================================================================== --- perl/Apache-Reload/trunk/Changes (original) +++ perl/Apache-Reload/trunk/Changes Tue Feb 9 21:37:20 2010 @@ -8,6 +8,10 @@ =item 0.11-dev +Add a no Apache::Reload directive which skips reloading for modules +that have it included (useful for Moose compatibility). +[Graham Barr, <gb...@pobox.com>] + Add Empty NOTICE file http://rt.cpan.org/Ticket/Display.html?id=34786 [Niko Tyni (Debian Perl Group) <nt...@debian.org>] Modified: perl/Apache-Reload/trunk/lib/Apache/Reload.pm URL: http://svn.apache.org/viewvc/perl/Apache-Reload/trunk/lib/Apache/Reload.pm?rev=908240&r1=908239&r2=908240&view=diff ============================================================================== --- perl/Apache-Reload/trunk/lib/Apache/Reload.pm (original) +++ perl/Apache-Reload/trunk/lib/Apache/Reload.pm Tue Feb 9 21:37:20 2010 @@ -32,6 +32,13 @@ $class->register_module($package, $file); } +sub unimport { + my $class = shift; + my ($package,$file) = (caller)[0,1]; + + $class->unregister_module($package, $file); +} + sub package_to_module { my $package = shift; $package =~ s/::/\//g; @@ -58,6 +65,13 @@ } } +sub unregister_module { + my ($class, $package, $file) = @_; + my $module = package_to_module($package); + + $Ignore{$module} = 1; +} + sub handler { my $r = shift; @@ -135,9 +149,14 @@ } # remove the modules if ($mtime > $Stat{$file}) { - delete $INC{$key}; - push @changed, $key; - } + if ($Ignore{$key}) { + warn "Apache::Reload: Not reloading $key\n"; + } + else { + delete $INC{$key}; + push @changed, $key; + } + } $Stat{$file} = $mtime; } @@ -230,6 +249,15 @@ Note that these are split on whitespace, but the module list B<must> be in quotes, otherwise Apache tries to parse the parameter list. +=head2 Un-Register Modules Explicitly + +If ReloadAll is set to On, then you can explicity force a module not to be reloaded with + + no Apache::Reload; + +A warning will appear in the error log that the file has changed, but will +not be reloaded + =head2 Special "Touch" File You can also set a file that you can touch() that causes the reloads to be