diff options
author | Jesse Luehrs <doy@tozt.net> | 2013-06-21 02:15:12 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2013-06-21 02:17:47 -0400 |
commit | 90cb3049e67c573dd479ba9ee5e4f5fe189916c2 (patch) | |
tree | ed99880cbd7cbe36bdbdc2e246e9cae3fa6745ca | |
parent | bd786985415d1883aa8da00f7f7d9860112e3875 (diff) | |
download | class-refresh-90cb3049e67c573dd479ba9ee5e4f5fe189916c2.tar.gz class-refresh-90cb3049e67c573dd479ba9ee5e4f5fe189916c2.zip |
fix refreshing a module first loaded after the first refresh call
-rw-r--r-- | Changes | 2 | ||||
-rw-r--r-- | lib/Class/Refresh.pm | 6 | ||||
-rw-r--r-- | t/data/new-modules/after/Foo.pm | 7 | ||||
-rw-r--r-- | t/data/new-modules/before/Foo.pm | 7 | ||||
-rw-r--r-- | t/data/new-modules/middle/Foo.pm | 7 | ||||
-rw-r--r-- | t/new-modules.t | 34 |
6 files changed, 63 insertions, 0 deletions
@@ -1,6 +1,8 @@ Revision history for Class-Refresh {{$NEXT}} + - fix refreshing a module for the first time when it was first loaded + after the first call to refresh 0.03 2013-06-21 - fix the case where reloading after a compilation error wouldn't work diff --git a/lib/Class/Refresh.pm b/lib/Class/Refresh.pm index 24569ab..2cbf0ca 100644 --- a/lib/Class/Refresh.pm +++ b/lib/Class/Refresh.pm @@ -74,6 +74,11 @@ Returns a list of modules which have changed since the last call to C<refresh>. sub modified_modules { my $class = shift; + if (!%CACHE) { + $class->_update_cache_for($_) for keys %INC; + return; + } + my @ret; for my $file (keys %CACHE) { # refresh files that are in our @@ -89,6 +94,7 @@ sub modified_modules { } else { $class->_update_cache_for($file); + push @ret, $class->_file_to_mod($file); } } diff --git a/t/data/new-modules/after/Foo.pm b/t/data/new-modules/after/Foo.pm new file mode 100644 index 0000000..54b998e --- /dev/null +++ b/t/data/new-modules/after/Foo.pm @@ -0,0 +1,7 @@ +package Foo; +use strict; +use warnings; + +sub bar { 3 } + +1; diff --git a/t/data/new-modules/before/Foo.pm b/t/data/new-modules/before/Foo.pm new file mode 100644 index 0000000..71386af --- /dev/null +++ b/t/data/new-modules/before/Foo.pm @@ -0,0 +1,7 @@ +package Foo; +use strict; +use warnings; + +sub bar { 1 } + +1; diff --git a/t/data/new-modules/middle/Foo.pm b/t/data/new-modules/middle/Foo.pm new file mode 100644 index 0000000..2971777 --- /dev/null +++ b/t/data/new-modules/middle/Foo.pm @@ -0,0 +1,7 @@ +package Foo; +use strict; +use warnings; + +sub bar { 2 } + +1; diff --git a/t/new-modules.t b/t/new-modules.t new file mode 100644 index 0000000..aae0aff --- /dev/null +++ b/t/new-modules.t @@ -0,0 +1,34 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Test::More; +use lib 't/lib'; +use Test::Class::Refresh; + +use Class::Refresh; + +my $dir = prepare_temp_dir_for('new-modules'); +push @INC, $dir->dirname; + +Class::Refresh->refresh; + +# load Foo after the first call to refresh +require Foo; + +is(Foo->bar, 1); + +sleep 2; +update_temp_dir_for('new-modules', $dir, 'middle'); + +Class::Refresh->refresh; + +is(Foo->bar, 2); + +sleep 2; +update_temp_dir_for('new-modules', $dir, 'after'); + +Class::Refresh->refresh; + +is(Foo->bar, 3); + +done_testing; |