|
Lines 53-66
Link Here
|
| 53 |
my $callbacks = $cache{$CacheKey} || $m->notes($CacheKey); |
53 |
my $callbacks = $cache{$CacheKey} || $m->notes($CacheKey); |
| 54 |
|
54 |
|
| 55 |
if (!$callbacks) { |
55 |
if (!$callbacks) { |
| 56 |
my $path = "/Callbacks/*$Page/$_CallbackName"; |
56 |
my $path = "/Callbacks/*$Page/$_CallbackName"; |
| 57 |
|
57 |
|
| 58 |
$callbacks = [ |
58 |
# Due to API changes after Mason 1.28, we have to check for which |
| 59 |
# Skip backup files, and files without a leading package name |
59 |
# version we're running when getting the component roots |
| 60 |
grep { !/^\.|~$/ and $_ ne "/Callbacks/$Page/$_CallbackName" } |
60 |
my @roots = map { $_->[1] } |
| 61 |
$m->interp->resolver->glob_path($path) |
61 |
$HTML::Mason::VERSION <= 1.28 |
| 62 |
]; |
62 |
? $m->interp->resolver->comp_root_array |
| 63 |
|
63 |
: $m->interp->comp_root_array; |
|
|
64 |
|
| 65 |
my %seen; |
| 66 |
|
| 67 |
for my $root (@roots) { |
| 68 |
push @$callbacks, |
| 69 |
# Skip backup files, files without a leading package name, |
| 70 |
# and files we've already seen |
| 71 |
grep { !/^\.|~$/ |
| 72 |
and $_ ne "/Callbacks/$Page/$_CallbackName" |
| 73 |
and not $seen{$_}++ } |
| 74 |
$m->interp->resolver->glob_path($path, $root); |
| 75 |
} |
| 76 |
|
| 64 |
$m->notes($CacheKey => $callbacks); |
77 |
$m->notes($CacheKey => $callbacks); |
| 65 |
$cache{$Page,$_CallbackName} = $callbacks if !$RT::DevelMode; |
78 |
$cache{$Page,$_CallbackName} = $callbacks if !$RT::DevelMode; |
| 66 |
} |
79 |
} |