]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 383522: mod_perl creates a separate template directory
authormkanat%bugzilla.org <>
Tue, 16 Oct 2007 15:16:34 +0000 (15:16 +0000)
committermkanat%bugzilla.org <>
Tue, 16 Oct 2007 15:16:34 +0000 (15:16 +0000)
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=mkanat

Bugzilla/Template.pm

index c05500ede4002c370231b4c81d222ccef5227fcf..cf483bc7c65be3f6fdf2b2bc58ea580e518a4fb5 100644 (file)
@@ -42,10 +42,12 @@ use Bugzilla::Error;
 use MIME::Base64;
 use Bugzilla::Bug;
 
+use Cwd qw(abs_path);
 # for time2str - replace by TT Date plugin??
 use Date::Format ();
+use File::Basename qw(dirname);
 use File::Find;
-use File::Path;
+use File::Path qw(rmtree mkpath);
 use File::Spec;
 use IO::Dir;
 
@@ -898,6 +900,23 @@ sub precompile_templates {
         }
     }
 
+    # Under mod_perl, we look for templates using the absolute path of the
+    # template directory, which causes Template Toolkit to look for their 
+    # *compiled* versions using the full absolute path under the data/template
+    # directory. (Like data/template/var/www/html/mod_perl/.) To avoid
+    # re-compiling templates under mod_perl, we symlink to the
+    # already-compiled templates.
+    my $abs_root = dirname(abs_path($templatedir));
+    mkpath("$datadir/template$abs_root");
+    my $todir   = "$datadir/template$abs_root";
+    # We use abs2rel so that the symlink will look like "../../../../template"
+    # which works, while just "data/template/template/" doesn't work.
+    my $fromdir = File::Spec->abs2rel("$datadir/template/template", $todir);
+    # We eval for systems (like Windows) that can't symlink, where "symlink"
+    # throws a fatal error.
+    eval { symlink($fromdir, "$todir/template") 
+               or warn "Failed to symlink from $fromdir to $todir: $!" };
+
     # If anything created a Template object before now, clear it out.
     delete Bugzilla->request_cache->{template};
 }