X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst%2FEngine%2FHTTP%2FRestarter%2FWatcher.pm;h=8890646ead541370ccc212e38e9bcbba8fa4dbf2;hp=6aada3e06d61fd03acd674a4adcc6d8d29b78fab;hb=b0ad47c12a21862b08d8e2942095065ac2f7edf2;hpb=ae29b412955743885e80350085167b54b69672da diff --git a/lib/Catalyst/Engine/HTTP/Restarter/Watcher.pm b/lib/Catalyst/Engine/HTTP/Restarter/Watcher.pm index 6aada3e..8890646 100644 --- a/lib/Catalyst/Engine/HTTP/Restarter/Watcher.pm +++ b/lib/Catalyst/Engine/HTTP/Restarter/Watcher.pm @@ -22,26 +22,21 @@ BEGIN { has delay => (is => 'rw'); has regex => (is => 'rw'); -has modified => (is => 'rw'); +has modified => (is => 'rw', builder => '_build_modified', lazy => 1); has directory => (is => 'rw'); -has watch_list => (is => 'rw'); +has watch_list => (is => 'rw', builder => '_build_watch_list', lazy => 1); has follow_symlinks => (is => 'rw'); -sub BUILD { - shift->_init; +sub _build_watch_list { + my ($self) = @_; + return $self->_index_directory; } -sub _init { - my $self = shift; - - my $watch_list = $self->_index_directory; - $self->watch_list($watch_list); - - $self->modified( - File::Modified->new( - method => 'mtime', - files => [ keys %{$watch_list} ], - ) +sub _build_modified { + my ($self) = @_; + return File::Modified->new( + method => 'mtime', + files => [ keys %{ $self->watch_list } ], ); } @@ -50,7 +45,7 @@ sub watch { my @changes; my @changed_files; - + my $delay = ( defined $self->delay ) ? $self->delay : 1; sleep $delay if $delay > 0; @@ -145,10 +140,15 @@ sub _test { my $is_immutable = $meta->can('is_immutable'); my $make_mutable = $meta->can('make_mutable'); $meta->$make_mutable() if $is_immutable && $make_mutable && $meta->$is_immutable(); + eval { # Do not explode the watcher process if this fails. + my $superclasses = $meta->can('superclasses'); + $meta->$superclasses('Moose::Object') if $superclasses; + }; } }); } + local $Catalyst::__AM_RESTARTING = 1; # Hack to avoid C3 fail delete $INC{$file}; # Remove from %INC so it will reload local $SIG{__WARN__} = sub { }; @@ -177,7 +177,7 @@ files regex => '\.yml$|\.yaml$|\.conf|\.pm$', delay => 1, ); - + while (1) { my @changed_files = $watcher->watch(); } @@ -224,7 +224,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