1 package Catalyst::Restarter;
8 use namespace::clean -except => 'meta';
18 isa => 'Catalyst::Watcher',
30 delete $p->{restart_sub};
32 # We could make this lazily, but this lets us check that we
33 # received valid arguments for the watcher up front.
34 $self->_watcher( Catalyst::Watcher->new( %{$p} ) );
40 $self->_fork_and_start;
42 return unless $self->_child;
44 $self->_restart_on_changes;
50 if ( my $pid = fork ) {
54 $self->restart_sub->();
58 sub _restart_on_changes {
61 my $watcher = $self->_watcher;
64 my @files = $watcher->find_changed_files
67 print STDERR "Saw changes to the following files:\n";
68 print STDERR " - $_->{file} ($_->{status})\n" for @files;
70 print STDERR "Attempting to restart the server\n\n";
72 if ( $self->_child ) {
74 or die "Cannot send INT to child (" . $self->_child . "): $!";
77 $self->_fork_and_start;
79 return unless $self->_child;
86 if ( $self->_child ) {
87 kill 2, $self->_child;
91 __PACKAGE__->meta->make_immutable;