stas        01/10/19 00:35:26

  Modified:    ModPerl-Registry/lib/ModPerl RegistryCooker.pm
  Log:
  - add uncache_myself func used in the tests, to cause the registry module
    forget that it has a script cached
  - use the implement by mod_perl BEGIN/END blocks execution as it was in
    1.x
  
  Revision  Changes    Path
  1.3       +36 -6     modperl-2.0/ModPerl-Registry/lib/ModPerl/RegistryCooker.pm
  
  Index: RegistryCooker.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/ModPerl-Registry/lib/ModPerl/RegistryCooker.pm,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- RegistryCooker.pm 2001/10/17 05:35:34     1.2
  +++ RegistryCooker.pm 2001/10/19 07:35:26     1.3
  @@ -16,16 +16,16 @@
   our $VERSION = '1.99';
   
   use Apache::compat ();
  -# Should not use Apache::compat, the following methods need to be implemented
  +# META: Should not use Apache::compat, the following methods need to
  +# be implemented:
   # $r->slurp_filename
  -# $r->clear_rgy_endav
  -# $r->stash_rgy_endav
   
   use Apache::Response;
   use Apache::Log;
   use Apache::Const -compile => qw(:common &OPT_EXECCGI);
   use File::Spec::Functions ();
   use ModPerl::Util ();
  +use ModPerl::Global ();
   
   #########################################################################
   # issues
  @@ -214,6 +214,7 @@
           no warnings;
           eval { $rc = &{$cv}($r, @_) } if $r->seqno;
           $o->[STATUS] = $rc;
  +        ModPerl::Global::special_list_call(END => $package);
       }
   
       $o->flush_namespace;
  @@ -420,10 +421,39 @@
   sub cache_it {
       my $o = shift;
       no strict 'refs';
  -    ${$o->[CLASS]}->{ $o->[PACKAGE] }{mtime} = $o->[MTIME];
  +    ${ $o->[CLASS] }->{ $o->[PACKAGE] }{mtime} = $o->[MTIME];
   }
   
   #########################################################################
  +# func: uncache_myself
  +# dflt: uncache_myself
  +# desc: unmark the package as cached by forgetting its modification time
  +# args: none
  +# rtrn: nothing
  +# note: this is a function and not a method, it should be called from
  +#       the registry script, and using the caller() method we figure
  +#       out the package the script was compiled into
  +
  +#########################################################################
  +
  +sub uncache_myself {
  +    my $package = scalar caller;
  +    # guess the registry class from the first two package segments
  +    # XXX: this will break if someone creates a registry class which
  +    # is not X::Y, but this function was written for the tests.
  +    my($class) = $package =~ /([^:]+::[^:]+)/;
  +    warn "cannot figure out class name from $package", 
  +        return unless defined $class;
  +    no strict 'refs';
  +    if (exists ${$class}->{$package} && exists ${$class}->{$package}{mtime}) {
  +        delete ${$class}->{$package}{mtime};
  +    }
  +    else {
  +        warn "cannot find ${class}->{$package}{mtime}";
  +    }
  +}
  +
  +#########################################################################
   # func: is_cached
   # dflt: is_cached
   # desc: checks whether the package is already cached
  @@ -651,8 +681,9 @@
       my $r = $o->[REQ];
   
       $o->debug("compiling $o->[FILENAME]") if DEBUG && D_COMPILE;
  +
  +    ModPerl::Global::special_list_clear(END => $o->[PACKAGE]);
   
  -    $r->clear_rgy_endav;
       ModPerl::Util::untaint($$eval);
       {
           # let the code define its own warn and strict level 
  @@ -661,7 +692,6 @@
           eval $$eval;
       }
   
  -    $r->stash_rgy_endav;
       return $o->error_check;
   }
   
  
  
  


Reply via email to