[Templates-cvs] cvs commit: Template2/lib/Template Provider.pm

cvs@template-toolkit.org cvs@template-toolkit.org
Wed, 22 Dec 2004 09:35:59 +0000


cvs         04/12/22 09:35:59

  Modified:    lib/Template Provider.pm
  Log:
  * added eval wrapper around mkpath() to return a sensible error or
    decline if TOLERANT
  
  Revision  Changes    Path
  2.82      +21 -26    Template2/lib/Template/Provider.pm
  
  Index: Provider.pm
  ===================================================================
  RCS file: /template-toolkit/Template2/lib/Template/Provider.pm,v
  retrieving revision 2.81
  retrieving revision 2.82
  diff -u -r2.81 -r2.82
  --- Provider.pm	2004/07/23 12:49:53	2.81
  +++ Provider.pm	2004/12/22 09:35:59	2.82
  @@ -27,7 +27,7 @@
   #
   #----------------------------------------------------------------------------
   #
  -# $Id: Provider.pm,v 2.81 2004/07/23 12:49:53 abw Exp $
  +# $Id: Provider.pm,v 2.82 2004/12/22 09:35:59 abw Exp $
   #
   #============================================================================
   
  @@ -44,7 +44,7 @@
   use File::Basename;
   use File::Spec;
   
  -$VERSION  = sprintf("%d.%02d", q$Revision: 2.81 $ =~ /(\d+)\.(\d+)/);
  +$VERSION  = sprintf("%d.%02d", q$Revision: 2.82 $ =~ /(\d+)\.(\d+)/);
   
   # name of document class
   $DOCUMENT = 'Template::Document' unless defined $DOCUMENT;
  @@ -376,26 +376,15 @@
       # create COMPILE_DIR and sub-directories representing each INCLUDE_PATH
       # element in which to store compiled files
       if ($cdir) {
  -        
  -# Stas' hack
  -#        # this is a hack to solve the problem with INCLUDE_PATH using
  -#	 # relative dirs
  -#	 my $segments = 0;
  -#	 for (@$path) {
  -#	     my $c = 0;
  -#	     $c++ while m|\.\.|g;
  -#	     $segments = $c if $c > $segments;
  -#	 }
  -#	 $cdir .= "/".join "/",('hack') x $segments if $segments;
  -#
  -
           require File::Path;
           foreach my $dir (@$path) {
               next if ref $dir;
               my $wdir = $dir;
               $wdir =~ s[:][]g if $^O eq 'MSWin32';
               $wdir =~ /(.*)/;  # untaint
  -            &File::Path::mkpath(File::Spec->catfile($cdir, $1));
  +            $wdir = $1;
  +            $wdir = File::Spec->catfile($cdir, $1);
  +            File::Path::mkpath($wdir) unless -d $wdir;
           }
       }
   
  @@ -874,13 +863,20 @@
               my $basedir = &File::Basename::dirname($compfile);
               $basedir =~ /(.*)/;
               $basedir = $1;
  -            &File::Path::mkpath($basedir) unless -d $basedir;
  -            
  -            my $docclass = $self->{ DOCUMENT };
  -            $error = 'cache failed to write '
  -                . &File::Basename::basename($compfile)
  -                . ': ' . $docclass->error()
  -                unless $docclass->write_perl_file($compfile, $parsedoc);
  +
  +            unless (-d $basedir) {
  +                eval { File::Path::mkpath($basedir) };
  +                $error = "failed to create compiled templates directory: $basedir ($@)"
  +                    if ($@);
  +            }
  +
  +            unless ($error) {
  +                my $docclass = $self->{ DOCUMENT };
  +                $error = 'cache failed to write '
  +                    . &File::Basename::basename($compfile)
  +                    . ': ' . $docclass->error()
  +                    unless $docclass->write_perl_file($compfile, $parsedoc);
  +            }
               
               # set atime and mtime of newly compiled file, don't bother
               # if time is undef
  @@ -1032,7 +1028,6 @@
   
   1;
   
  -
   __END__
   
   
  @@ -1487,8 +1482,8 @@
   
   =head1 VERSION
   
  -2.79, distributed as part of the
  -Template Toolkit version 2.13, released on 30 January 2004.
  +2.81, distributed as part of the
  +Template Toolkit version 2.14, released on 04 October 2004.
   
   =head1 COPYRIGHT