X-Git-Url: https://git.deb.at/?a=blobdiff_plain;ds=inline;f=lib%2FPackages%2FSearch.pm;h=931747c618ed84b4863f9d3a183fbff349983835;hb=a4e6ac9c039c1af7b853b8b3a616035b83f1bfd9;hp=c0555e2bb302b0dfdd241e742c9370ccae205cb4;hpb=976d1881dc169228ed327cd52eba12d29bb9bf42;p=deb%2Fpackages.git diff --git a/lib/Packages/Search.pm b/lib/Packages/Search.pm index c0555e2..931747c 100644 --- a/lib/Packages/Search.pm +++ b/lib/Packages/Search.pm @@ -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) = @_; @@ -449,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 () { - 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);