diff options
author | Max Kanat-Alexander <mkanat@bugzilla.org> | 2010-02-20 21:00:33 +0100 |
---|---|---|
committer | Max Kanat-Alexander <mkanat@bugzilla.org> | 2010-02-20 21:00:33 +0100 |
commit | 1237c19f93f456dbf75613538d5ac368b99d2af2 (patch) | |
tree | 9e72113adcd20e587b58e65615aec2a36e768443 | |
parent | 70a3ca1899e3310a67d20cf8cb7245d7fab5c5f1 (diff) | |
download | bugzilla-1237c19f93f456dbf75613538d5ac368b99d2af2.tar.gz bugzilla-1237c19f93f456dbf75613538d5ac368b99d2af2.tar.xz |
Bug 531577: Fix the paths that single-file extensions (like extensions/Foo.pm)
look for their tempaltes and libraries in.
r=mkanat, a=mkanat (module owner)
-rw-r--r-- | Bugzilla/Extension.pm | 17 | ||||
-rw-r--r-- | Bugzilla/Install/Util.pm | 3 |
2 files changed, 19 insertions, 1 deletions
diff --git a/Bugzilla/Extension.pm b/Bugzilla/Extension.pm index 793ae6043..2bd26c3ed 100644 --- a/Bugzilla/Extension.pm +++ b/Bugzilla/Extension.pm @@ -147,7 +147,13 @@ sub load_all { sub modify_inc { my ($class, $file) = @_; - __do_call($class, 'package_dir', $file); + # Note that this package_dir call is necessary to set things up + # for my_inc, even if we didn't take its return value. + my $package_dir = __do_call($class, 'package_dir', $file); + # Don't modify @INC for extensions that are just files in the extensions/ + # directory. We don't want Bugzilla's base lib/CGI.pm being loaded as + # Bugzilla::Extension::Foo::CGI or any other confusing thing like that. + return if $package_dir eq bz_locations->{'extensionsdir'}; unshift(@INC, sub { __do_call($class, 'my_inc', @_) }); } @@ -194,6 +200,15 @@ use constant enabled => 1; sub lib_dir { my $invocant = shift; my $package_dir = __do_call($invocant, 'package_dir'); + # For extensions that are just files in the extensions/ directory, + # use the base lib/ dir as our "lib_dir". Note that Bugzilla never + # uses lib_dir in this case, though, because modify_inc is prevented + # from modifying @INC when we're just a file in the extensions/ directory. + # So this particular code block exists just to make lib_dir return + # something right in case an extension needs it for some odd reason. + if ($package_dir eq bz_locations()->{'extensionsdir'}) { + return bz_locations->{'ext_libpath'}; + } return File::Spec->catdir($package_dir, 'lib'); } diff --git a/Bugzilla/Install/Util.pm b/Bugzilla/Install/Util.pm index 1c6d5c4ee..99aacb3e7 100644 --- a/Bugzilla/Install/Util.pm +++ b/Bugzilla/Install/Util.pm @@ -196,6 +196,9 @@ sub extension_template_directory { my $extension = shift; my $class = ref($extension) || $extension; my $base_dir = extension_package_directory($class); + if ($base_dir eq bz_locations->{'extensionsdir'}) { + return bz_locations->{'templatedir'}; + } return "$base_dir/template"; } |