]> git.deb.at Git - deb/packages.git/blobdiff - lib/Packages/Search.pm
Add basic l10n support.
[deb/packages.git] / lib / Packages / Search.pm
index 9418f63e0c3037b14cd9ce079c34403f28427ed4..931747c618ed84b4863f9d3a183fbff349983835 100644 (file)
@@ -43,7 +43,7 @@ package Packages::Search;
 use strict;
 use warnings;
 
-use CGI qw( -oldstyle_urls );
+#use CGI ();
 use POSIX;
 use HTML::Entities;
 use DB_File;
@@ -134,9 +134,10 @@ sub parse_params {
        my @p_value_no_replace = @p_value;
 
        if ($params{$param}{replace} && @p_value) {
-           @p_value = ();
            foreach my $pattern (keys %{$params{$param}{replace}}) {
-               foreach (@p_value_no_replace) {
+               my @p_value_tmp = @p_value;
+               @p_value = ();
+               foreach (@p_value_tmp) {
                    if ($_ eq $pattern) {
                        my $replacement = $params{$param}{replace}{$_};
                        if (ref $replacement) {
@@ -364,21 +365,31 @@ sub read_entry_simple {
     my $result = $hash->{$key} || '';
     debug( "read_entry_simple: key=$key, archives=".
           join(" ",(keys %$archives)).", suite=$suite", 1);
-    my @data_fuzzy;
+    my (@data_fuzzy, @data_virtual, @data_fuzzy_virtual);
     foreach (split /\000/o, $result) {
        my @data = split ( /\s/o, $_, 8 );
        debug( "Considering entry ".join( ':', @data), 2);
        if ($data[1] eq $suite) {
-           if ($archives->{$data[0]}) {
+           if ($archives->{$data[0]}
+               && ($data[2] ne 'virtual')) {
                debug( "Using entry ".join( ':', @data), 2);
                return \@data;
-           } elsif ($data[0] eq 'us') {
+           } elsif ($archives->{$data[0]}) {
+               debug( "Virtual entry ".join( ':', @data), 2);
+               @data_virtual = @data;
+           } elsif (($data[0] eq 'us')
+                    && ($data[2] ne 'virtual')) {
                debug( "Fuzzy entry ".join( ':', @data), 2);
                @data_fuzzy = @data;
+           } elsif ($data[0] eq 'us') {
+               debug( "Virtual fuzzy entry ".join( ':', @data), 2);
+               @data_fuzzy_virtual = @data;
            }
        } 
     }
-    return \@data_fuzzy;
+    return \@data_virtual if @data_virtual;
+    return \@data_fuzzy if @data_fuzzy;
+    return \@data_fuzzy_virtual;
 }
 sub read_src_entry_all {
     my ($hash, $key, $results, $non_results, $opts) = @_;
@@ -413,6 +424,7 @@ sub do_names_search {
     $postfixes->seq( $key, $prefixes, R_CURSOR );
     while (index($key, $keyword) >= 0) {
        if ($prefixes =~ /^\001(\d+)/o) {
+           debug( "$key has too many hits", 2 );
            $too_many_hits += $1;
        } else {
            foreach (split /\000/o, $prefixes) {
@@ -448,12 +460,14 @@ sub do_fulltext_search {
 
     my $numres = 0;
     my %tmp_results;
-    open DESC, '<', "$file"
+    # fgrep is seriously faster than using perl
+    open DESC, '-|', 'fgrep', '-n', '--', $keyword, $file
        or die "couldn't open $file: $!";
     while (<DESC>) {
-       next if (index $_, $keyword) < 0;
-       debug( "Matched line $.: $_", 2);
-       my $result = $did2pkg->{$.};
+       /^(\d+)/;
+       my $nr = $1;
+       debug( "Matched line $_", 2);
+       my $result = $did2pkg->{$nr};
        foreach (split /\000/o, $result) {
            my @data = split /\s/, $_, 3;
 #          debug ("Considering $data[0], arch = $data[2]", 3);