Changeset 23400
- Timestamp:
- 11/12/08 19:57:13 (5 years ago)
- Files:
-
- 1 modified
-
lang/perl/NanoA/trunk/lib/NanoA.pm (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/perl/NanoA/trunk/lib/NanoA.pm
r23381 r23400 95 95 print "\n"; 96 96 } 97 97 98 my %LOADED; 99 100 sub load_once { 101 my ($path, $mark_path) = @_; 102 $mark_path ||= $path; 103 return if $LOADED{$mark_path}; 104 local $@; 105 do "$path" 106 or return; 107 die $@ 108 if $@; 109 $LOADED{$mark_path} = 1; 110 } 111 112 sub loaded { 113 my $path = shift; 114 $LOADED{$path} = shift 115 if @_; 116 $LOADED{$path}; 117 } 118 98 119 package NanoA::Dispatch; 99 120 … … 144 165 $path =~ s{/+$}{}; 145 166 local $@; 146 eval { 147 # should have a different invocation model for mod_perl and fastcgi 148 require "$path.pm"; 149 }; 150 unless ($@) { 151 my $module = $path; 152 $module =~ s{/}{::}g; 153 return $module; 154 } 155 return 156 if $@ =~ /^Can't locate /; 157 die $@; 167 NanoA::load_once("$path.pm") 168 or return; 169 my $module = $path; 170 $module =~ s{/}{::}g; 171 return $module; 158 172 } 159 173 … … 163 177 return 164 178 unless -e "$path.mt"; 165 NanoA::Mojo::Template ->__load($config, $path);179 NanoA::Mojo::Template::__load($config, $path); 166 180 } 167 181 … … 191 205 use base qw(NanoA); 192 206 193 my %LOADED;194 195 207 sub include { 196 208 my ($app, $path) = @_; 197 my $module = $app->__load($app->config, $app->config->{prefix} . "/$path");209 my $module = __load($app->config, $app->config->{prefix} . "/$path"); 198 210 $module->run_as($app); 199 211 } 200 212 201 213 sub __load { 202 my ($ self, $config, $path) = @_;214 my ($config, $path) = @_; 203 215 my $module = $path; 204 216 $module =~ s{/}{::}g; 205 217 return $module 206 if $LOADED{$path}; 207 if ($self->__use_cache($config, $path)) { 208 require "$config->{mt_cache_dir}/$path.mtc"; 209 $LOADED{$path} = 1; 218 if NanoA::loaded($path); 219 if (__use_cache($config, $path)) { 220 NanoA::load_once("$config->{mt_cache_dir}/$path.mtc", "$path.mt"); 210 221 return $module; 211 222 } 212 my $code = $self->__compile($path, $module);223 my $code = __compile($path, $module); 213 224 local $@; 214 225 eval $code; 215 226 die $@ if $@; 216 $self->__update_cache($config, $path, $code)227 __update_cache($config, $path, $code) 217 228 if $config->{mt_cache_dir}; 218 $LOADED{$path} = 1;229 NanoA::loaded($path, 1); 219 230 $module; 220 231 } 221 232 233 my $mt_loaded; 234 222 235 sub __compile { 223 my ($self, $path, $module) = @_; 224 __load_once("Mojo/Template.pm"); 236 my ($path, $module) = @_; 237 unless ($mt_loaded) { 238 require "Mojo/Template.pm"; 239 $mt_loaded = 1; 240 } 225 241 my $mt = Mojo::Template->new; 226 242 $mt->parse(__read_file("$path.mt")); … … 245 261 } 246 262 247 sub __load_once {248 my $path = shift;249 return if $LOADED{$path};250 require "$path";251 }252 253 263 sub __update_cache { 254 my ($ self, $config, $path, $code) = @_;264 my ($config, $path, $code) = @_; 255 265 my $cache_path = $config->{mt_cache_dir}; 256 266 foreach my $p (split '/', $path) { … … 266 276 267 277 sub __use_cache { 268 my ($ self, $config, $path) = @_;278 my ($config, $path) = @_; 269 279 return unless $config->{mt_cache_dir}; 270 280 my @orig = stat "$path.mt"
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)