X-Git-Url: https://git.deb.at/?a=blobdiff_plain;f=lib%2FPackages%2FSearch.pm;h=b545dbc5fa544c77bb07a59e1a247903c29e3fa6;hb=bcfcaa38f5df98ccff82e7ec1b9473b92b850c17;hp=ae8cee3c577edf729db8d0db3152147c59693309;hpb=f49363dc272472174dd57c663c2688c33af927cd;p=deb%2Fpackages.git diff --git a/lib/Packages/Search.pm b/lib/Packages/Search.pm index ae8cee3..b545dbc 100644 --- a/lib/Packages/Search.pm +++ b/lib/Packages/Search.pm @@ -56,7 +56,8 @@ our @ISA = qw( Exporter ); our @EXPORT_OK = qw( nextlink prevlink indexline resperpagelink - read_entry read_src_entry find_binaries + read_entry read_entry_all read_entry_simple + read_src_entry find_binaries do_names_search do_fulltext_search printindexline multipageheader ); our %EXPORT_TAGS = ( all => [ @EXPORT_OK ] ); @@ -338,27 +339,55 @@ sub multipageheader { return ( $start, $end ); } -sub read_entry { - my ($hash, $key, $results, $opts) = @_; +sub read_entry_all { + my ($hash, $key, $results, $non_results, $opts) = @_; my $result = $hash->{$key} || ''; - foreach (split /\000/, $result) { - my @data = split ( /\s/, $_, 7 ); + foreach (split /\000/o, $result) { + my @data = split ( /\s/o, $_, 8 ); debug( "Considering entry ".join( ':', @data), 2); - if ($opts->{h_suites}{$data[0]} - && ($opts->{h_archs}{$data[1]} || $data[1] eq 'all') - && $opts->{h_sections}{$data[2]}) { + if ($opts->{h_archives}{$data[0]} && $opts->{h_suites}{$data[1]} + && ($opts->{h_archs}{$data[2]} || $data[2] eq 'all') + && $opts->{h_sections}{$data[3]}) { debug( "Using entry ".join( ':', @data), 2); push @$results, [ $key, @data ]; + } else { + push @$non_results, [ $key, @data ]; } } } +sub read_entry { + my ($hash, $key, $results, $opts) = @_; + my @non_results; + read_entry_all( $hash, $key, $results, \@non_results, $opts ); +} +sub read_entry_simple { + my ($hash, $key, $archives, $suite) = @_; + my $result = $hash->{$key} || ''; + my @data_fuzzy; + 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]}) { + debug( "Using entry ".join( ':', @data), 2); + return \@data; + } elsif ($data[0] eq 'us') { + debug( "Fuzzy entry ".join( ':', @data), 2); + @data_fuzzy = @data; + } + } + } + return \@data_fuzzy; +} sub read_src_entry { my ($hash, $key, $results, $opts) = @_; my $result = $hash->{$key} || ''; - foreach (split /\000/, $result) { - my @data = split ( /\s/, $_, 5 ); + foreach (split /\000/o, $result) { + my @data = split ( /\s/o, $_, 6 ); debug( "Considering entry ".join( ':', @data), 2); - if ($opts->{h_suites}{$data[0]} && $opts->{h_sections}{$data[1]}) { + if ($opts->{h_archives}{$data[0]} + && $opts->{h_suites}{$data[1]} + && $opts->{h_sections}{$data[2]}) { debug( "Using entry ".join( ':', @data), 2); push @$results, [ $key, @data ]; } @@ -446,15 +475,16 @@ sub do_fulltext_search { } sub find_binaries { - my ($pkg, $suite, $src2bin) = @_; + my ($pkg, $archive, $suite, $src2bin) = @_; my $bins = $src2bin->{$pkg} || ''; my %bins; foreach (split /\000/o, $bins) { - my @data = split /\s/, $_, 4; + my @data = split /\s/, $_, 5; - if ($data[0] eq $suite) { - $bins{$data[1]}++; + if (($data[0] eq $archive) + && ($data[1] eq $suite)) { + $bins{$data[2]}++; } }