diff options
author | Jeroen van Wolffelaar <jeroen@wolffelaar.nl> | 2006-02-20 15:26:24 +0000 |
---|---|---|
committer | Jeroen van Wolffelaar <jeroen@wolffelaar.nl> | 2006-02-20 15:26:24 +0000 |
commit | 1fceab61ae04b085395167ede490a9d0eab02b11 (patch) | |
tree | db94fd58983b52d5d5b8d8ff1d058c8f785c80ee /cgi-bin | |
parent | ae7fe4440b28ab29c329da886a063c3e74f034cf (diff) |
Fix contents search my moving it to lib, like the rest. Still a bit rough.
Diffstat (limited to 'cgi-bin')
-rwxr-xr-x | cgi-bin/dispatcher.pl | 6 | ||||
-rwxr-xr-x | cgi-bin/search_contents.pl | 78 |
2 files changed, 5 insertions, 79 deletions
diff --git a/cgi-bin/dispatcher.pl b/cgi-bin/dispatcher.pl index 0de4f1c..ea7c3e2 100755 --- a/cgi-bin/dispatcher.pl +++ b/cgi-bin/dispatcher.pl @@ -28,6 +28,7 @@ use Packages::HTML (); use Packages::Sections; use Packages::DoSearch; +use Packages::DoSearchContents; use Packages::DoShow; use Packages::DoDownload; use Packages::DoFilelist; @@ -57,7 +58,7 @@ $Packages::CGI::debug = $debug; my $what_to_do = 'show'; my $source = 0; -if (my $path = $input->path_info()) { +if (my $path = $input->path_info() || $input->param('PATH_INFO')) { my @components = grep { $_ } map { lc $_ } split /\/+/, $path; debug( "components[0]=$components[0]", 2 ); @@ -182,6 +183,9 @@ if ((($opts{searchon} eq 'names') && $opts{source}) || } else { $opts{searchon_form} = $opts{searchon}; } +if ($opts{searchon} eq 'contents' or $opts{searchon} eq 'filenames') { + $what_to_do = 'search_contents'; +} my $pet1 = new Benchmark; my $petd = timediff($pet1, $pet0); diff --git a/cgi-bin/search_contents.pl b/cgi-bin/search_contents.pl deleted file mode 100755 index 66e216d..0000000 --- a/cgi-bin/search_contents.pl +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/perl -wT -# $Id$ -# search_contents.pl -- CGI interface to the Contents files on packages.debian.org -# -# Copyright (C) 2006 Jeroen van Wolffelaar -# -# use is allowed under the terms of the GNU Public License (GPL) -# see http://www.fsf.org/copyleft/gpl.html for a copy of the license - -sub contents() { - my $nres = 0; - - my ($cgi) = @_; - - print "Extremely blunt ends-with search results:<br><pre>"; -# only thing implemented yet: ends-with search - my $kw = lc $cgi->param("keywords"); - # full filename search is tricky - my $ffn = $cgi->param("fullfilename"); - $ffn = $ffn ? 1 : 0; - - -my $suite = 'stable'; #fixme - - my $reverses = tie my %reverses, 'DB_File', "$DBDIR/contents/reverse_$suite.db", - O_RDONLY, 0666, $DB_BTREE - or die "Failed opening reverse DB: $!"; - - if ($ffn) { - open FILENAMES, "$DBDIR/contents/filenames_$suite.txt" - or die "Failed opening filename table"; - while (<FILENAMES>) { - next if index($_, $kw)<0; - chomp; - last unless &dosearch(reverse($_)."/", \$nres, $reverses); - } - close FILENAMES; - } else { - - $kw = reverse $kw; - - # exact filename searching follows trivially: - my $exact = $cgi->param("exact"); - $kw = "$kw/" if $exact; - - print "ERROR: Exact and fullfilenamesearch don't go along" if $ffn and $exact; - - &dosearch($kw, \$nres, $reverses); - } - print "</pre>$nres results displayed"; - $reverses = undef; - untie %reverses; - -} - -sub dosearch -{ - my ($kw, $nres, $reverses) = @_; - - my ($key, $rest) = ($kw, ""); - for (my $status = $reverses->seq($key, $value, R_CURSOR); - $status == 0; - $status = $reverses->seq( $key, $value, R_NEXT)) { - - # FIXME: what's the most efficient "is prefix of" thingy? We only want to know - # whether $kw is or is not a prefix of $key - last unless index($key, $kw) == 0; - - @hits = split /\0/o, $value; - print reverse($key)." is found in @hits\n"; - last if ($$nres)++ > 100; - } - - return $$nres<100; -} - -1; -# vim: ts=8 sw=4 |