package PPMServer; # point this to your repository my $repository = '/home/http/repository'; # # You shouldn't need to change anything below this point. # use XML::Parser; use PPM::XML::RepositorySummary; use strict; # $summaryfile is the output of utils/summary.pl my $summaryfile = "$repository/summary.ppm"; # $searchsummaryfile is the output of utils/searchsummary.pl my $searchsummaryfile = "$repository/searchsummary.ppm"; my ($summary, $searchsummary, $summaryastext, $searchsummaryastext, @ppd_data); sub ppm_protocol {"PPM 200"} sub search_ppds { my ($self, $archname, $searchRE, $searchtag) = @_; $searchtag = 'TITLE' unless $searchtag; unless ($searchsummaryastext) { local $/; open(SUMMARY, "<$searchsummaryfile") or die "Can't open $searchsummaryfile: $!"; $searchsummaryastext = ; close(SUMMARY); # trim everything up to the first $searchsummaryastext =~ s/.*?@o, $searchsummaryastext unless @ppd_data; foreach my $pkg (@ppd_data) { if ($pkg =~ m@<${searchtag}>(.*)@s) { next unless $1 =~ /${searchRE}/; if ($pkg =~ m@@s) { $output .= $pkg . ""; } } } $output .= ""; return $output; } sub fetch_summary { unless ($summaryastext) { local $/; open(SUMMARY, "<$summaryfile") or die "Can't open $summaryfile: $!"; $summaryastext = ; close(SUMMARY); } return $summaryastext; } sub packages { my @results; $summary = _load_summary($summaryfile) unless $summary; foreach my $pkg (@{$summary->{'Kids'}}) { push @results, $pkg->{'NAME'} if (exists $pkg->{'NAME'}); } return (undef, @results); } sub fetch_ppd { my ($self, $package) = @_; if (-f "$repository/$package.ppd") { local $/; open(PPD, "<$repository/$package.ppd") or die "Can't open $repository/$package.ppd: $!"; my $ppd = ; close(PPD); return $ppd; } $summary = _load_summary($summaryfile) unless $summary; foreach my $pkg (@{$summary->{'Kids'}}) { if (exists $pkg->{'NAME'}) { return $pkg->as_text() if ($pkg->{'NAME'} =~ /^$package$/i); } } return undef; } sub _load_summary { my $file = shift; my $parser = new XML::Parser( 'Style' => 'Objects', 'Pkg' => 'XML::RepositorySummary' ); my $rc = $parser->parsefile( $file ); return $rc->[0]; } 1;