X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FEngine%2FHTTP%2FRestarter.pm;h=dd25edfdbe74404696be970ce36459f0fabf4f52;hb=536bee890cf24e0e4bcda7562e7b70cc03ca0620;hp=8e5c8c093c81db700417b53c5e2ec6d5699beb4f;hpb=7fa2c9c1b85c98786655ad5169708d8dc84e8353;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Engine/HTTP/Restarter.pm b/lib/Catalyst/Engine/HTTP/Restarter.pm index 8e5c8c0..dd25edf 100644 --- a/lib/Catalyst/Engine/HTTP/Restarter.pm +++ b/lib/Catalyst/Engine/HTTP/Restarter.pm @@ -1,7 +1,10 @@ package Catalyst::Engine::HTTP::Restarter; - use Moose; +use Moose::Util qw/find_meta/; +use namespace::clean -except => 'meta'; + extends 'Catalyst::Engine::HTTP'; + use Catalyst::Engine::HTTP::Restarter::Watcher; around run => sub { @@ -17,9 +20,15 @@ around run => sub { close STDIN; close STDOUT; + # Avoid "Setting config after setup" error restarting MyApp.pm + $class->setup_finished(0); + # Best effort if we can't trap compiles.. + $self->_make_components_mutable($class) + if !Catalyst::Engine::HTTP::Restarter::Watcher::DETECT_PACKAGE_COMPILATION; + my $watcher = Catalyst::Engine::HTTP::Restarter::Watcher->new( - directory => ( - $options->{restart_directory} || + directory => ( + $options->{restart_directory} || File::Spec->catdir( $FindBin::Bin, '..' ) ), follow_symlinks => $options->{follow_symlinks}, @@ -69,6 +78,22 @@ around run => sub { return $self->$orig( $class, $port, $host, $options ); }; +# Naive way of trying to avoid Moose blowing up when you re-require components +# which have been made immutable. +sub _make_components_mutable { + my ($self, $class) = @_; + + my @metas = grep { defined($_) } + map { find_meta($_) } + ($class, map { blessed($_) } + values %{ $class->components }); + + foreach my $meta (@metas) { + # Paranoia unneeded, all component metaclasses should have immutable + $meta->make_mutable if $meta->is_immutable; + } +} + 1; __END__ @@ -96,11 +121,7 @@ L. =head1 AUTHORS -Sebastian Riedel, - -Dan Kubb, - -Andy Grundman, +Catalyst Contributors, see Catalyst.pm =head1 THANKS @@ -108,7 +129,7 @@ Many parts are ripped out of C by Jesse Vincent. =head1 COPYRIGHT -This program is free software, you can redistribute it and/or modify it under +This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself. =cut