Skip to content

Commit 37a4c39

Browse files
authored
Merge pull request #2147 from hernan604/restart_morbo_when_file_is_deleted
Triggers modified_files on file deletion
2 parents 69ca0d9 + 632ae27 commit 37a4c39

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

lib/Mojo/Server/Morbo/Backend/Poll.pm

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,26 @@ use Mojo::File qw(path);
66
sub modified_files {
77
my $self = shift;
88

9-
my $cache = $self->{cache} //= {};
9+
my $cache = $self->{cache} //= {};
10+
my $known_files = {map { $_ => 1 } keys %$cache};
1011
my @files;
1112
for my $file (map { -f $_ && -r _ ? $_ : _list($_) } @{$self->watch}) {
13+
delete $known_files->{$file};
1214
my ($size, $mtime) = (stat $file)[7, 9];
1315
next unless defined $size and defined $mtime;
1416
my $stats = $cache->{$file} ||= [$^T, $size];
1517
next if $mtime <= $stats->[0] && $size == $stats->[1];
1618
@$stats = ($mtime, $size);
1719
push @files, $file;
1820
}
21+
22+
for my $file (keys %$known_files) {
23+
24+
# Any leftover file means they were deleted
25+
push @files, $file;
26+
delete $cache->{$file};
27+
}
28+
1929
sleep $self->watch_timeout unless @files;
2030

2131
return \@files;

t/mojo/morbo.t

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,19 @@ EOF
131131
is $tx->res->body, 'Hello!', 'right content';
132132
};
133133

134+
subtest 'Watch for deleted files' => sub {
135+
my $morbo = Mojo::Server::Morbo->new;
136+
$morbo->backend->watch([$dir]);
137+
$morbo->backend->modified_files;
138+
my $tmp_file = $dir->child('tmp_file.txt');
139+
$tmp_file->spew("some data");
140+
is_deeply $morbo->backend->modified_files, [$tmp_file], 'file was created';
141+
is_deeply $morbo->backend->modified_files, [], 'no files changed';
142+
unlink $tmp_file;
143+
is_deeply $morbo->backend->modified_files, [$tmp_file], 'file was deleted';
144+
is_deeply $morbo->backend->modified_files, [], 'no files changed';
145+
};
146+
134147
subtest 'New file(s)' => sub {
135148
is_deeply $morbo->backend->modified_files, [], 'directory has not changed';
136149
my @new = map { $subdir->child("$_.txt") } qw/test testing/;

0 commit comments

Comments
 (0)