From f2d5af261b95310c2fb7d0565222c211998bff4f Mon Sep 17 00:00:00 2001 From: Max Kanat-Alexander Date: Wed, 13 Oct 2010 16:36:18 -0700 Subject: Bug 602418: Add "template_cache" to bz_locations(), a way of specifying that cached templates should be stored somewhere else than the data directory. r=LpSolit, a=mkanat --- Bugzilla/Constants.pm | 8 +++++--- Bugzilla/Install/Filesystem.pm | 3 ++- Bugzilla/Template.pm | 24 ++++++++++++++---------- template/en/default/setup/strings.txt.pl | 4 ++-- 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/Bugzilla/Constants.pm b/Bugzilla/Constants.pm index 06bdaade0..14c3f2b26 100644 --- a/Bugzilla/Constants.pm +++ b/Bugzilla/Constants.pm @@ -596,6 +596,7 @@ sub bz_locations { $datadir = "data"; } + $datadir = "$libpath/$datadir"; # We have to return absolute paths for mod_perl. # That means that if you modify these paths, they must be absolute paths. return { @@ -605,10 +606,11 @@ sub bz_locations { # make sure this still points to the CGIs. 'cgi_path' => $libpath, 'templatedir' => "$libpath/template", + 'template_cache' => "$datadir/template", 'project' => $project, 'localconfig' => "$libpath/$localconfig", - 'datadir' => "$libpath/$datadir", - 'attachdir' => "$libpath/$datadir/attachments", + 'datadir' => $datadir, + 'attachdir' => "$datadir/attachments", 'skinsdir' => "$libpath/skins", # $webdotdir must be in the web server's tree somewhere. Even if you use a # local dot, we output images to there. Also, if $webdotdir is @@ -616,7 +618,7 @@ sub bz_locations { # change showdependencygraph.cgi to set image_url to the correct # location. # The script should really generate these graphs directly... - 'webdotdir' => "$libpath/$datadir/webdot", + 'webdotdir' => "$datadir/webdot", 'extensionsdir' => "$libpath/extensions", }; } diff --git a/Bugzilla/Install/Filesystem.pm b/Bugzilla/Install/Filesystem.pm index 20bd021ef..6a265bffe 100644 --- a/Bugzilla/Install/Filesystem.pm +++ b/Bugzilla/Install/Filesystem.pm @@ -121,6 +121,7 @@ sub FILESYSTEM { my $extlib = bz_locations()->{'ext_libpath'}; my $skinsdir = bz_locations()->{'skinsdir'}; my $localconfig = bz_locations()->{'localconfig'}; + my $template_cache = bz_locations()->{'template_cache'}; # We want to set the permissions the same for all localconfig files # across all PROJECTs, so we do something special with $localconfig, @@ -189,7 +190,7 @@ sub FILESYSTEM { # the webserver. my %recurse_dirs = ( # Writeable directories - "$datadir/template" => { files => CGI_READ, + $template_cache => { files => CGI_READ, dirs => DIR_CGI_OVERWRITE }, $attachdir => { files => CGI_WRITE, dirs => DIR_CGI_WRITE }, diff --git a/Bugzilla/Template.pm b/Bugzilla/Template.pm index ee4d6cba2..46a4b6b72 100644 --- a/Bugzilla/Template.pm +++ b/Bugzilla/Template.pm @@ -633,7 +633,7 @@ sub create { ABSOLUTE => 1, RELATIVE => $ENV{MOD_PERL} ? 0 : 1, - COMPILE_DIR => bz_locations()->{'datadir'} . "/template", + COMPILE_DIR => bz_locations()->{'template_cache'}, # Initialize templates (f.e. by loading plugins like Hook). PRE_PROCESS => ["global/initialize.none.tmpl"], @@ -990,23 +990,27 @@ sub precompile_templates { my ($output) = @_; # Remove the compiled templates. + my $cache_dir = bz_locations()->{'template_cache'}; my $datadir = bz_locations()->{'datadir'}; - if (-e "$datadir/template") { + if (-e $cache_dir) { print install_string('template_removing_dir') . "\n" if $output; # This frequently fails if the webserver made the files, because # then the webserver owns the directories. - rmtree("$datadir/template"); + rmtree($cache_dir); # Check that the directory was really removed, and if not, move it # into data/deleteme/. - if (-e "$datadir/template") { + if (-e $cache_dir) { + my $deleteme = "$datadir/deleteme"; + print STDERR "\n\n", install_string('template_removal_failed', - { datadir => $datadir }), "\n\n"; - mkpath("$datadir/deleteme"); + { deleteme => $deleteme, + template_cache => $cache_dir }), "\n\n"; + mkpath($deleteme); my $random = generate_random_password(); - rename("$datadir/template", "$datadir/deleteme/$random") + rename($cache_dir, "$deleteme/$random") or die "move failed: $!"; } } @@ -1071,10 +1075,10 @@ sub _do_template_symlink { my $abs_root = dirname($abs_path); my $dir_name = basename($abs_path); - my $datadir = bz_locations()->{'datadir'}; - my $container = "$datadir/template$abs_root"; + my $cache_dir = bz_locations()->{'template_cache'}; + my $container = "$cache_dir$abs_root"; mkpath($container); - my $target = "$datadir/template/$dir_name"; + my $target = "$cache_dir/$dir_name"; # Check if the directory exists, because if there are no extensions, # there won't be an "data/template/extensions" directory to link to. if (-d $target) { diff --git a/template/en/default/setup/strings.txt.pl b/template/en/default/setup/strings.txt.pl index ca1bf6145..889bb12b2 100644 --- a/template/en/default/setup/strings.txt.pl +++ b/template/en/default/setup/strings.txt.pl @@ -389,8 +389,8 @@ EOT EOT template_precompile => "Precompiling templates...", template_removal_failed => < "Removing existing compiled templates...", -- cgit v1.2.3-24-g4f1b