gozer 2003/10/20 10:44:48
Modified: . STATUS src/modules/perl modperl_cmd.c Added: lib/Apache PerlSections.pm Removed: lib/Apache PerlSection.pm Log: Standardize the Apache::PerlSections package name to it's plural form for clarity and so that the pod gets glued in it's proper place Revision Changes Path 1.68 +1 -9 modperl-2.0/STATUS Index: STATUS =================================================================== RCS file: /home/cvs/modperl-2.0/STATUS,v retrieving revision 1.67 retrieving revision 1.68 diff -u -r1.67 -r1.68 --- STATUS 9 Oct 2003 05:34:02 -0000 1.67 +++ STATUS 20 Oct 2003 17:44:48 -0000 1.68 @@ -90,14 +90,6 @@ Needs Patch or Further Investigation: ------------------------------------- -* <Perl> section package name: - Looks like the package name is Apache::PerlSection, but inside of it - we have Apache::PerlSections. And the docs manpage is - Apache/PerlSections.pod (notices the trailing 's'), so it doesn't get - its pod glued to Apache/PerlSection.pm on install. Inside the - package there are variables whose name is PerlSections. Need to - decide on one and stick to it. - * <Perl> sections: A few issues with <Perl> sections: http://marc.theaimsgroup.com/?l=apache-modperl-dev&m=106074969831522&w=2 1.1 modperl-2.0/lib/Apache/PerlSections.pm Index: PerlSections.pm =================================================================== package Apache::PerlSections; use strict; use warnings FATAL => 'all'; our $VERSION = '0.01'; use Apache::CmdParms (); use Apache::Directive (); use APR::Table (); use Apache::Server (); use Apache::ServerUtil (); use Apache::Const -compile => qw(OK); use constant SPECIAL_NAME => 'PerlConfig'; sub new { my($package, @args) = @_; return bless { @args }, ref($package) || $package; } sub server { return shift->{'parms'}->server() } sub directives { return shift->{'directives'} ||= [] } sub package { return shift->{'args'}->{'package'} } sub handler : method { my($self, $parms, $args) = @_; unless (ref $self) { $self = $self->new('parms' => $parms, 'args' => $args); } my $special = $self->SPECIAL_NAME; for my $entry ($self->symdump()) { if ($entry->[0] !~ /$special/) { $self->dump(@$entry); } } { no strict 'refs'; my $package = $self->package; $self->dump_special(${"${package}::$special"}, @{"${package}::$special"} ); } $self->post_config(); Apache::OK; } sub symdump { my($self) = @_; my $pack = $self->package; unless ($self->{symbols}) { $self->{symbols} = []; no strict; #XXX: Shamelessly borrowed from Devel::Symdump; while (my ($key, $val) = each(%{ *{"$pack\::"} })) { local (*ENTRY) = $val; if (defined $val && defined *ENTRY{SCALAR}) { push @{$self->{symbols}}, [$key, $ENTRY]; } if (defined $val && defined *ENTRY{ARRAY}) { push @{$self->{symbols}}, [$key, [EMAIL PROTECTED]; } if (defined $val && defined *ENTRY{HASH} && $key !~ /::/) { push @{$self->{symbols}}, [$key, \%ENTRY]; } } } return @{$self->{symbols}}; } sub dump_special { my($self, @data) = @_; $self->add_config(@data); } sub dump { my($self, $name, $entry) = @_; my $type = ref $entry; if ($type eq 'ARRAY') { $self->dump_array($name, $entry); } elsif ($type eq 'HASH') { $self->dump_hash($name, $entry); } else { $self->dump_entry($name, $entry); } } sub dump_hash { my($self, $name, $hash) = @_; for my $entry (sort keys %{ $hash || {} }) { my $item = $hash->{$entry}; my $type = ref($item); if ($type eq 'HASH') { $self->dump_section($name, $entry, $item); } elsif ($type eq 'ARRAY') { for my $e (@$item) { $self->dump_section($name, $entry, $e); } } } } sub dump_section { my($self, $name, $loc, $hash) = @_; $self->add_config("<$name $loc>\n"); for my $entry (sort keys %{ $hash || {} }) { $self->dump_entry($entry, $hash->{$entry}); } $self->add_config("</$name>\n"); } sub dump_array { my($self, $name, $entries) = @_; for my $entry (@$entries) { $self->dump_entry($name, $entry); } } sub dump_entry { my($self, $name, $entry) = @_; my $type = ref $entry; if ($type eq 'SCALAR') { $self->add_config("$name $$entry\n"); } elsif ($type eq 'ARRAY') { $self->add_config("$name @$entry\n"); } elsif ($type eq 'HASH') { $self->dump_hash($name, $entry); } elsif ($type) { #XXX: Could do $type->can('httpd_config') here on objects ??? die "Unknown type '$type' for directive $name"; } elsif (defined $entry) { $self->add_config("$name $entry\n"); } } sub add_config { my($self, $config) = @_; return unless defined $config; chomp($config); push @{ $self->directives }, $config; } sub post_config { my($self) = @_; my $errmsg = $self->server->add_config($self->directives); die $errmsg if $errmsg; } 1; __END__ 1.49 +1 -1 modperl-2.0/src/modules/perl/modperl_cmd.c Index: modperl_cmd.c =================================================================== RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_cmd.c,v retrieving revision 1.48 retrieving revision 1.49 diff -u -r1.48 -r1.49 --- modperl_cmd.c 16 Sep 2003 01:57:27 -0000 1.48 +++ modperl_cmd.c 20 Oct 2003 17:44:48 -0000 1.49 @@ -345,7 +345,7 @@ return NULL; } -#define MP_DEFAULT_PERLSECTION_HANDLER "Apache::PerlSection" +#define MP_DEFAULT_PERLSECTION_HANDLER "Apache::PerlSections" #define MP_DEFAULT_PERLSECTION_PACKAGE "Apache::ReadConfig" #define MP_STRICT_PERLSECTIONS_SV \ get_sv("Apache::Server::StrictPerlSections", FALSE)