X-Git-Url: https://git.deb.at/?p=deb%2Fpackages.git;a=blobdiff_plain;f=lib%2FPackages%2FDoSearchContents.pm;h=272b23522d6b1322d910ee913cb18abed99a5889;hp=3df473da5f5c5e30c8413506edbbc8f6c2a28719;hb=cc6c820a1e503808b7ac1e2bff132de23f87606b;hpb=9d34783dbabe5acf76912324f8709c77e2a59b41 diff --git a/lib/Packages/DoSearchContents.pm b/lib/Packages/DoSearchContents.pm index 3df473d..272b235 100644 --- a/lib/Packages/DoSearchContents.pm +++ b/lib/Packages/DoSearchContents.pm @@ -5,8 +5,6 @@ use warnings; use Benchmark ':hireswallclock'; use DB_File; -use URI::Escape; -use HTML::Entities; use Exporter; our @ISA = qw( Exporter ); our @EXPORT = qw( do_search_contents ); @@ -14,21 +12,22 @@ our @EXPORT = qw( do_search_contents ); use Deb::Versions; use Packages::I18N::Locale; use Packages::Search qw( :all ); -use Packages::CGI; +use Packages::CGI qw( :DEFAULT error ); use Packages::DB; use Packages::Config qw( $DBDIR @SUITES @ARCHIVES @ARCHITECTURES $ROOT ); sub do_search_contents { my ($params, $opts, $page_content) = @_; + my $cat = $opts->{cat}; if ($params->{errors}{keywords}) { - fatal_error( _g( "keyword not valid or missing" ) ); + fatal_error( $cat->g( "keyword not valid or missing" ) ); $opts->{keywords} = []; } elsif (grep { length($_) < 2 } @{$opts->{keywords}}) { - fatal_error( _g( "keyword too short (keywords need to have at least two characters)" ) ); + fatal_error( $cat->g( "keyword too short (keywords need to have at least two characters)" ) ); } if ($params->{errors}{suite}) { - fatal_error( _g( "suite not valid or not specified" ) ); + fatal_error( $cat->g( "suite not valid or not specified" ) ); } #FIXME: that's extremely hacky atm @@ -38,7 +37,8 @@ sub do_search_contents { } if (@{$opts->{suite}} > 1) { - fatal_error( sprintf( _g( "more than one suite specified for contents search (%s)" ), "@{$opts->{suite}}" ) ); + fatal_error( $cat->g( "more than one suite specified for contents search (%s)", + "@{$opts->{suite}}" ) ); } my @keywords = @{$opts->{keywords}}; @@ -75,10 +75,11 @@ sub do_search_contents { &searchfile(\@results, reverse($_)."/", \$nres, $reverses); last if $Packages::Search::too_many_hits; } + while () {}; close FILENAMES or warn "fgrep error: $!\n"; } else { - error(_g("The search mode you selected doesn't support more than one keyword.")) + error($cat->g("The search mode you selected doesn't support more than one keyword.")) if @keywords; my $kw = reverse $first_kw; @@ -103,7 +104,7 @@ sub do_search_contents { my $file = shift @$result; my %pkgs; foreach (@$result) { - my ($pkg, $arch) = split /:/, $_; + my ($pkg, $arch) = split m/:/, $_; next unless $opts->{h_archs}{$arch}; $pkgs{$pkg}{$arch}++; $archs{$arch}++ unless $arch eq 'all'; @@ -172,8 +173,15 @@ sub searchfile last unless index($key, $kw) == 0; debug( "found $key", 2 ) if DEBUG; - my @hits = split /\0/o, $value; - push @$results, [ scalar reverse($key), @hits ]; + my @files = split /\001/o, $value; + foreach my $f (@files) { + my @hits = split /\0/o, $f; + my $file = shift @hits; + if ($file eq '-') { + $file = reverse($key); + } + push @$results, [ $file, @hits ]; + } last if ($$nres)++ > 100; }