diff options
author | Jesse Luehrs <doy@tozt.net> | 2012-01-04 18:02:30 -0600 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2012-01-04 18:02:30 -0600 |
commit | ea2dd4c149d78e54c66a3400d2b0ecec5c959a40 (patch) | |
tree | c2d97880439669968a75757b005e8c9527c34613 | |
parent | 79b443187ee06d8ee7eedc29012e2b68235e3cd1 (diff) | |
download | circular-require-ea2dd4c149d78e54c66a3400d2b0ecec5c959a40.tar.gz circular-require-ea2dd4c149d78e54c66a3400d2b0ecec5c959a40.zip |
if an entire cycle is hidden, don't show something from outside of it
-rw-r--r-- | lib/circular/require.pm | 12 | ||||
-rw-r--r-- | t/hidden_cycle.t | 23 | ||||
-rw-r--r-- | t/hidden_cycle/Bar.pm | 3 | ||||
-rw-r--r-- | t/hidden_cycle/Baz.pm | 3 | ||||
-rw-r--r-- | t/hidden_cycle/Foo.pm | 3 | ||||
-rw-r--r-- | t/hide_middleman3.t | 2 |
6 files changed, 40 insertions, 6 deletions
diff --git a/lib/circular/require.pm b/lib/circular/require.pm index db1738f..9b69394 100644 --- a/lib/circular/require.pm +++ b/lib/circular/require.pm @@ -62,11 +62,13 @@ sub _require { if (exists $being_loaded{$string_file}) { my $caller = $current; - $caller = $being_loaded{$caller} - while defined($caller) && grep { m/^$caller$/ } @hide; - - $caller = '<unknown package>' - unless defined $caller; + while (grep { m/^$caller$/ } @hide) { + $caller = $being_loaded{$caller}; + if (!defined($caller) || $caller eq $string_file) { + $caller = '<unknown file>'; + last; + } + } warn "Circular require detected: $string_file (from $caller)\n"; } diff --git a/t/hidden_cycle.t b/t/hidden_cycle.t new file mode 100644 index 0000000..a2b33f1 --- /dev/null +++ b/t/hidden_cycle.t @@ -0,0 +1,23 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use lib 't/hidden_cycle'; +use Test::More; + +no circular::require -hide => [qw(Bar Baz)]; + +my @warnings; + +{ + $SIG{__WARN__} = sub { push @warnings => @_ }; + + use_ok( 'Foo' ); +} + +is_deeply( + \@warnings, + ["Circular require detected: Bar.pm (from <unknown file>)\n"], + "hiding all packages in the cycle shouldn't report a package outside of the cycle as being the source" +); + +done_testing; diff --git a/t/hidden_cycle/Bar.pm b/t/hidden_cycle/Bar.pm new file mode 100644 index 0000000..5d7209a --- /dev/null +++ b/t/hidden_cycle/Bar.pm @@ -0,0 +1,3 @@ +package Bar; +use Baz; +1; diff --git a/t/hidden_cycle/Baz.pm b/t/hidden_cycle/Baz.pm new file mode 100644 index 0000000..c718929 --- /dev/null +++ b/t/hidden_cycle/Baz.pm @@ -0,0 +1,3 @@ +package Baz; +use Bar; +1; diff --git a/t/hidden_cycle/Foo.pm b/t/hidden_cycle/Foo.pm new file mode 100644 index 0000000..1558402 --- /dev/null +++ b/t/hidden_cycle/Foo.pm @@ -0,0 +1,3 @@ +package Foo; +use Bar; +1; diff --git a/t/hide_middleman3.t b/t/hide_middleman3.t index bbd920f..361eb45 100644 --- a/t/hide_middleman3.t +++ b/t/hide_middleman3.t @@ -19,7 +19,7 @@ my @warnings; is_deeply( \@warnings, - ["Circular require detected: Foo.pm (from <unknown package>)\n"], + ["Circular require detected: Foo.pm (from <unknown file>)\n"], "don't loop infinitely if all packages are hidden" ); |