- %$html_header = ( title => _g( 'Package Contents Search Results' ),
- lang => $opts->{lang},
- title_tag => _g( '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},
- },
- );
-
- $$page_content = '';
- if (@results) {
- $$page_content .= "<p>".sprintf( _g( 'Found %s results' ),
- scalar @results )."</p>";
- $$page_content .= '<div
- id="pcontentsres"><table><colgroup><col><col></colgroup><tr><th>'._g('File').'</th><th>'._g('Packages')
- .'</th></tr>';
- foreach my $result (sort { $a->[0] cmp $b->[0] } @results) {
- my $file = shift @$result;
- $$page_content .= "<tr><td class=\"file\">/$file</td><td>";
- my %pkgs;
- foreach (@$result) {
- my ($pkg, $arch) = split /:/, $_;
- $pkgs{$pkg}{$arch}++;
+ 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 };