Author: stas
Date: Mon Nov 29 08:15:53 2004
New Revision: 106926

URL: http://svn.apache.org/viewcvs?view=rev&rev=106926
Log:
fix $r->filename in Apache::compat to update the finfo struct (which
is how it worked in mp1)

Modified:
   perl/modperl/trunk/Changes
   perl/modperl/trunk/lib/Apache/compat.pm
   perl/modperl/trunk/t/response/TestCompat/request.pm

Modified: perl/modperl/trunk/Changes
Url: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/Changes?view=diff&rev=106926&p1=perl/modperl/trunk/Changes&r1=106925&p2=perl/modperl/trunk/Changes&r2=106926
==============================================================================
--- perl/modperl/trunk/Changes  (original)
+++ perl/modperl/trunk/Changes  Mon Nov 29 08:15:53 2004
@@ -12,6 +12,9 @@
 
 =item 1.99_18-dev
 
+fix $r->filename in Apache::compat to update the finfo struct (which
+is how it worked in mp1) [Stas]
+
 enclose all occurences of eval_* with ENTER;SAVETMPS;
 ... FREETMPS;LEAVE; previously things just happened to work, due to
 external scopes which was not very reliable and some change could

Modified: perl/modperl/trunk/lib/Apache/compat.pm
Url: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/lib/Apache/compat.pm?view=diff&rev=106926&p1=perl/modperl/trunk/lib/Apache/compat.pm&r1=106925&p2=perl/modperl/trunk/lib/Apache/compat.pm&r2=106926
==============================================================================
--- perl/modperl/trunk/lib/Apache/compat.pm     (original)
+++ perl/modperl/trunk/lib/Apache/compat.pm     Mon Nov 29 08:15:53 2004
@@ -60,6 +60,8 @@
 use Symbol ();
 use File::Spec ();
 
+use APR::Const -compile => qw(FINFO_NORM);
+
 BEGIN {
     $INC{'Apache.pm'} = __FILE__;
 
@@ -74,6 +76,28 @@
 # the overriding code, needs to "return" the original CODE reference
 # when eval'ed , so that it can be restored later
 my %overridable_mp2_api = (
+    'Apache::RequestRec::filename' => <<'EOI',
+{
+    require Apache::RequestRec;
+    require APR::Finfo;
+    my $orig_sub = *Apache::RequestRec::filename{CODE};
+    *Apache::RequestRec::filename = sub {
+        my($r, $newfile) = @_;
+        my $old_filename;
+        if (defined $newfile) {
+            $old_filename = $r->$orig_sub($newfile);
+            die "'$newfile' doesn't exist" unless -e $newfile;
+            $r->finfo(APR::Finfo::stat($newfile, APR::FINFO_NORM, $r->pool));
+        }
+        else {
+            $old_filename = $r->$orig_sub();
+        }
+        return $old_filename;
+    };
+    $orig_sub;
+}
+
+EOI
     'Apache::RequestRec::notes' => <<'EOI',
 {
     require Apache::RequestRec;

Modified: perl/modperl/trunk/t/response/TestCompat/request.pm
Url: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/t/response/TestCompat/request.pm?view=diff&rev=106926&p1=perl/modperl/trunk/t/response/TestCompat/request.pm&r1=106925&p2=perl/modperl/trunk/t/response/TestCompat/request.pm&r2=106926
==============================================================================
--- perl/modperl/trunk/t/response/TestCompat/request.pm (original)
+++ perl/modperl/trunk/t/response/TestCompat/request.pm Mon Nov 29 08:15:53 2004
@@ -10,13 +10,17 @@
 use Apache::TestUtil;
 use Apache::Test;
 
+use APR::Finfo ();
+
+use File::Spec::Functions qw(catfile);
+
 use Apache::compat ();
 use Apache::Constants qw(OK REMOTE_HOST);
 
 sub handler {
     my $r = shift;
 
-    plan $r, tests => 20;
+    plan $r, tests => 22;
 
     $r->send_http_header('text/plain');
 
@@ -72,6 +76,26 @@
         }
     }
 
+    # $r->filename
+    {
+        Apache::compat::override_mp2_api('Apache::RequestRec::filename');
+        my $orig = $r->filename;
+        my $new  = catfile Apache::Test::vars("serverroot"),
+            "conf", "httpd.conf";
+
+        # in mp1 setting filename, updates $r's finfo (not in mp2)
+        $r->filename($new);
+        ok t_cmp $r->finfo->size, -s $new , "new filesize";
+
+        # restore
+        $new = __FILE__;
+        $r->filename($new);
+        ok t_cmp $r->finfo->size, -s $new , "new filesize";
+
+        # restore the real 2.0 filename() method, now that we are done
+        # with the compat one
+        Apache::compat::restore_mp2_api('Apache::RequestRec::filename');
+    }
 
     # $r->notes
     {

Reply via email to