- %$html_header = ( title => 'Package Contents Search Results' ,
- lang => 'en',
- title_tag => 'Debian Package Contents Search Results',
- print_title => 1,
- print_search_field => 'packages',
- search_field_values => {
- keywords => $keyword_enc,
- searchon => 'contents',
- arch => $archs_enc,
- suite => $suites_enc,
- section => $sections_enc,
- exact => $opts->{exact},
- debug => $opts->{debug},
- },
- );
-
- if (@results) {
- $$page_content .= scalar @results . " results displayed:<br>";
- foreach (@results) {
- $$page_content .= "<tt>$_</tt><br>\n";
+ my (%results,%archs);
+ foreach my $result (sort { $a->[0] cmp $b->[0] } @results) {
+ my $file = shift @$result;
+ my %pkgs;
+ foreach (@$result) {
+ my ($pkg, $arch) = split m/:/, $_;
+ next unless $opts->{h_archs}{$arch};
+ $pkgs{$pkg}{$arch}++;
+ $archs{$arch}++ unless $arch eq 'all';
+ }
+ next unless keys %pkgs;
+ $results{$file} = \%pkgs;
+ }
+ my @all_archs = sort keys %archs;
+ @all_archs = sort @ARCHITECTURES unless @all_archs;
+ $page_content->{suite} = $suite;
+ $page_content->{archive} = $archive;
+ $page_content->{all_architectures} = \@all_archs;
+ $page_content->{all_suites} = [ grep { $_ !~ /-(updates|backports)$/ } @SUITES ];
+ $page_content->{mode} = $mode;
+ $page_content->{search_architectures} = $opts->{arch};
+ $page_content->{search_keywords} = $opts->{keywords};
+ $page_content->{sections} = $opts->{section};
+ $page_content->{too_many_hits} = $Packages::Search::too_many_hits;
+
+ debug( "all_archs = @all_archs", 1 ) if DEBUG;
+
+ if (keys %results) {
+ my $sort_func = sub { $_[0] cmp $_[1] };
+ $sort_func = sub { (sort keys %{$results{$_[0]}})[0]
+ cmp
+ (sort keys %{$results{$_[1]}})[0]
+ } if $opts->{sort_by} eq 'pkg';
+
+ $page_content->{results} = [];
+ foreach my $file (sort {&$sort_func($a,$b)} keys %results) {
+ my %result;
+ $result{file} = "/$file";
+ $result{packages} = [];
+ foreach my $pkg (sort keys %{$results{$file}}) {
+ my $arch_str = '';
+ my @archs = keys %{$results{$file}{$pkg}};
+ my $arch_neg = 0;
+ unless ($results{$file}{$pkg}{all} ||
+ (@archs == @all_archs)) {
+ if (@archs >= @all_archs/2) {
+ @archs = grep { !$results{$file}{$pkg}{$_} } @all_archs;
+ $arch_neg = 1;
+ }
+ } else {
+ @archs = ();
+ }
+ push @{$result{packages}}, { pkg => $pkg, architectures => \@archs, architectures_are_rev => $arch_neg };
+ }
+ push @{$page_content->{results}}, \%result;