X-Git-Url: https://git.deb.at/?a=blobdiff_plain;f=cgi-bin%2Fsearch_packages.pl;h=b62821dd5a33a41639ba83cc1a859a6d40d2ffa2;hb=5182ae034dddba23fe956fbfc373829e6574b88e;hp=0723387264e48fabdf3bb59506f924192542c423;hpb=75b12a4485e23464c08413b8183f790fcfaca412;p=deb%2Fpackages.git diff --git a/cgi-bin/search_packages.pl b/cgi-bin/search_packages.pl index 0723387..b62821d 100755 --- a/cgi-bin/search_packages.pl +++ b/cgi-bin/search_packages.pl @@ -1,5 +1,5 @@ #!/usr/bin/perl -wT -# +# $Id$ # search_packages.pl -- CGI interface to the Packages files on packages.debian.org # # Copyright (C) 1998 James Treacy @@ -55,12 +55,7 @@ my $pet0 = new Benchmark; my $debug_allowed = 1; my $debug = $debug_allowed && $input->param("debug"); $debug = 0 if not defined($debug); -$Packages::Search::debug = 1 if $debug > 1; - -# If you want, just print out a list of all of the variables and exit. -print $input->header if $debug; -# print $input->dump; -# exit; +#$Packages::Search::debug = 1 if $debug > 1; if (my $path = $input->param('path')) { my @components = map { lc $_ } split /\//, $path; @@ -116,17 +111,58 @@ my %params = Packages::Search::parse_params( $input, \%params_def, \%opts ); #XXX: Don't use alternative output formats yet $format = 'html'; - if ($format eq 'html') { print $input->header; -} elsif ($format eq 'xml') { -# print $input->header( -type=>'application/rdf+xml' ); - print $input->header( -type=>'text/plain' ); +} + +my (@errors, @debug, @msgs, @hints); +sub error { + push @errors, $_[0]; +} +sub hint { + push @hints, $_[0]; +} +sub debug { + my $lvl = $_[1] || 0; + push(@debug, $_[0]) if $debug > $lvl; +} +sub msg { + push @msgs, $_[0]; +} +sub print_errors { + return unless @errors; + print '
$_
"; + } + print ''; + foreach (@debug) { + print "$_\n"; + } + print '
$_
"; + } + print '$_
"; + } } if ($params{errors}{keywords}) { - print "Error: keyword not valid or missing" if $format eq 'html'; - exit 0; + error( "Error: keyword not valid or missing" ); } my $case_bool = ( $case !~ /insensitive/ ); @@ -148,36 +184,16 @@ my $sections_enc = encode_entities join ', ', @{$params{values}{section}{no_repl my $archs_enc = encode_entities join ', ', @{$params{values}{arch}{no_replace}}; my $pet1 = new Benchmark; my $petd = timediff($pet1, $pet0); -print "DEBUG: Parameter evaluation took ".timestr($petd)."You have searched for ${source_wording}packages $exact_wording $keyword_enc in $suite_wording, $section_wording, and $arch_wording.
"; + msg( "You have searched for ${source_wording}packages $exact_wording $keyword_enc in $suite_wording, $section_wording, and $arch_wording." ); } else { my $exact_wording = $exact ? "" : " (including subword matching)"; - print "You have searched for $keyword_enc in packages names and descriptions in $suite_wording, $section_wording, and $arch_wording$exact_wording.
"; + msg( "You have searched for $keyword_enc in packages names and descriptions in $suite_wording, $section_wording, and $arch_wording$exact_wording." ); } } if ($too_many_hits) { - print "Your search was too wide so we will only display exact matches. At least $too_many_hits results have been omitted and will not be displayed. Please consider using a longer keyword or more keywords.
"; + error( "Your search was too wide so we will only display exact matches. At least $too_many_hits results have been omitted and will not be displayed. Please consider using a longer keyword or more keywords." ); } if (!@results) { @@ -378,130 +413,138 @@ if (!@results) { if (($suites_enc eq 'all') && ($archs_enc eq 'any') && ($sections_enc eq 'all')) { - print "Can't find that package.
\n"; + error( "Can't find that package." ); } else { - print "Can't find that package, at least not in that suite ". - ( $search_on_sources ? "" : " and on that architecture" ). - ".
\n"; + error( "Can't find that package, at least not in that suite ". + ( $search_on_sources ? "" : " and on that architecture" ) ) } if ($exact) { - $printed = 1; - print "You have searched only for exact matches of the package name. You can try to search for package names that contain your search string.
"; + hint( "You have searched only for exact matches of the package name. You can try to search for package names that contain your search string." ); } } else { if (($suites_enc eq 'all') && ($archs_enc eq 'any') && ($sections_enc eq 'all')) { - print "Can't find that string.
\n"; + error( "Can't find that string." ); } else { - print "Can't find that string, at least not in that suite ($suites_enc, section $sections_enc) and on that architecture ($archs_enc).
\n"; + error( "Can't find that string, at least not in that suite ($suites_enc, section $sections_enc) and on that architecture ($archs_enc)." ); } unless ($subword) { - $printed = 1; - print "You have searched only for words exactly matching your keywords. You can try to search allowing subword matching.
"; + hint( "You have searched only for words exactly matching your keywords. You can try to search allowing subword matching." ); } } - print "".( $printed ? "Or you" : "You" )." can try a different search on the Packages search page.
"; - - &printfooter; + hint( ( @hints ? "Or you" : "You" )." can try a different search on the Packages search page." ); + } - exit; } -my (%pkgs, %sect, %part, %desc, %binaries); +print_header; +print_msgs; +print_errors; +print_hints; +print_debug; +&print_results; +&printfooter; -unless ($search_on_sources) { - foreach (@results) { - my ($pkg_t, $suite, $arch, $section, $subsection, - $priority, $version, $desc) = @$_; - - my ($package) = $pkg_t =~ m/^(.+)/; # untaint - $pkgs{$package}{$suite}{$version}{$arch} = 1; - $sect{$package}{$suite}{$version} = $subsection; - $part{$package}{$suite}{$version} = $section unless $section eq 'main'; +sub print_results { + return unless @results; + + my (%pkgs, %sect, %part, %desc, %binaries); + + unless ($search_on_sources) { + foreach (@results) { + my ($pkg_t, $suite, $arch, $section, $subsection, + $priority, $version, $desc) = @$_; - $desc{$package}{$suite}{$version} = $desc; - } + my ($pkg) = $pkg_t =~ m/^(.+)/; # untaint + $pkgs{$pkg}{$suite}{$version}{$arch} = 1; + $sect{$pkg}{$suite}{$version} = $subsection; + $part{$pkg}{$suite}{$version} = $section + unless $section eq 'main'; + + $desc{$pkg}{$suite}{$version} = $desc; + } - if ($format eq 'html') { - my ($start, $end) = multipageheader( scalar keys %pkgs ); - my $count = 0; + if ($format eq 'html') { + my ($start, $end) = multipageheader( scalar keys %pkgs ); + my $count = 0; - foreach my $pkg (sort keys %pkgs) { - $count++; - next if $count < $start or $count > $end; - printf "