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 {