X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FEngine%2FHTTP%2FRestarter.pm;h=45b925ac52bd5c1ee0304a70465484f0d9a20ed1;hb=65b708a697de08be81bf212704d495e8cad41ed2;hp=a41095078e1126ae8898f1e16981f311de74323e;hpb=ac5c933bdd463558e8d621507a53a7b247a9093e;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Engine/HTTP/Restarter.pm b/lib/Catalyst/Engine/HTTP/Restarter.pm index a410950..45b925a 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,6 +20,8 @@ around run => sub { close STDIN; close STDOUT; + $self->_make_components_mutable($class); + my $watcher = Catalyst::Engine::HTTP::Restarter::Watcher->new( directory => ( $options->{restart_directory} || @@ -69,6 +74,18 @@ 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 = map { find_meta($_) } ($class, map { blessed($_) } values %{ $class->components }); + + foreach my $meta (@metas) { + $meta->make_mutable if $meta->is_immutable; + } +} + 1; __END__ @@ -96,11 +113,7 @@ L. =head1 AUTHORS -Sebastian Riedel, - -Dan Kubb, - -Andy Grundman, +Catalyst Contributors, see Catalyst.pm =head1 THANKS