aboutsummaryrefslogtreecommitdiff
path: root/cgi-bin
diff options
context:
space:
mode:
authorJeroen van Wolffelaar <jeroen@wolffelaar.nl>2006-02-20 15:26:24 +0000
committerJeroen van Wolffelaar <jeroen@wolffelaar.nl>2006-02-20 15:26:24 +0000
commit1fceab61ae04b085395167ede490a9d0eab02b11 (patch)
treedb94fd58983b52d5d5b8d8ff1d058c8f785c80ee /cgi-bin
parentae7fe4440b28ab29c329da886a063c3e74f034cf (diff)
Fix contents search my moving it to lib, like the rest. Still a bit rough.
Diffstat (limited to 'cgi-bin')
-rwxr-xr-xcgi-bin/dispatcher.pl6
-rwxr-xr-xcgi-bin/search_contents.pl78
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