X-Git-Url: https://git.deb.at/w?a=blobdiff_plain;ds=sidebyside;f=lib%2FPackages%2FSearch.pm;h=b793ab46b215a9ef5b9ec6a7c555579114162905;hb=fba8ac72a773c38df1b3da420548fd2c961cf23e;hp=d04f44a3992507509be58892b857da7c9a693196;hpb=f27f1fcc5bffc0696f694e962eb40dbb0c554855;p=deb%2Fpackages.git diff --git a/lib/Packages/Search.pm b/lib/Packages/Search.pm index d04f44a..b793ab4 100644 --- a/lib/Packages/Search.pm +++ b/lib/Packages/Search.pm @@ -340,14 +340,26 @@ sub printindexline { sub read_entry_all { my ($hash, $key, $results, $non_results, $opts) = @_; - my $result = $hash->{$key} || ''; + my ($virt, $result) = split /\000/o, $hash->{$key} || "-\01-", 2; + + my %virt = split /\01/o, $virt; + while (my ($suite, $provides) = each %virt) { + next if $suite eq '-'; + if ($opts->{h_suites}{$suite}) { + push @$results, [ $key, "-", $suite, 'virtual', 'v', 'v', 'v', 'v', + $provides]; + } else { + push @$non_results, [ $key, "-", $suite, 'virtual', 'v', 'v', 'v', 'v', + $provides]; + } + } + foreach (split /\000/o, $result) { my @data = split ( /\s/o, $_, 8 ); debug( "Considering entry ".join( ':', @data), 2) if DEBUG; - if ($opts->{h_archives}{$data[0]} && $opts->{h_suites}{$data[1]} - && ($opts->{h_archs}{$data[2]} || $data[2] eq 'all' - || $data[2] eq 'virtual') - && ($opts->{h_sections}{$data[3]} || $data[3] eq 'v')) { + if ($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) if DEBUG; push @$results, [ $key, @data ]; } else { @@ -362,35 +374,20 @@ sub read_entry { } sub read_entry_simple { my ($hash, $key, $archives, $suite) = @_; - my $result = $hash->{$key} || ''; + # FIXME: drop $archives + + my ($virt, $result) = split /\000/o, $hash->{$key} || "-\01-\0", 2; + my %virt = split /\01/o, $virt; debug( "read_entry_simple: key=$key, archives=". - join(" ",(keys %$archives)).", suite=$suite", 1); - my (@data_fuzzy, @data_virtual, @data_fuzzy_virtual); + join(" ",(keys %$archives)).", suite=$suite", 1) if DEBUG; foreach (split /\000/o, $result) { my @data = split ( /\s/o, $_, 8 ); - debug( "Considering entry ".join( ':', @data), 2) if DEBUG; - if ($data[1] eq $suite) { - if ($archives->{$data[0]} - && ($data[2] ne 'virtual')) { - debug( "Using entry ".join( ':', @data), 2) if DEBUG; - return \@data; - } elsif ($archives->{$data[0]}) { - debug( "Virtual entry ".join( ':', @data), 2) if DEBUG; - @data_virtual = @data; - } elsif (($data[0] eq 'us') - && ($data[2] ne 'virtual')) { - debug( "Fuzzy entry ".join( ':', @data), 2) if DEBUG; - @data_fuzzy = @data; - } elsif ($data[0] eq 'us') { - debug( "Virtual fuzzy entry ".join( ':', @data), 2) if DEBUG; - @data_fuzzy_virtual = @data; - } - } + debug( "use entry: @data", 2 ) if DEBUG && $data[1] eq $suite; + return [ $virt{$suite}, @data ] if $data[1] eq $suite; } - return \@data_virtual if @data_virtual; - return \@data_fuzzy if @data_fuzzy; - return \@data_fuzzy_virtual; + return [ $virt{$suite} ]; } + sub read_src_entry_all { my ($hash, $key, $results, $non_results, $opts) = @_; my $result = $hash->{$key} || '';