) {
$_ =~ $regex or next;
print "DEBUG: Matched line $.
" if $debug > 2;
@@ -289,23 +288,61 @@ if ($searchon eq 'names') {
}
close DESC;
- my $obj = tie my %packages, 'DB_File', "$DBDIR/packages_small.db", O_RDONLY, 0666, $DB_BTREE
- or die "couldn't tie DB $DBDIR/packages_small.db: $!";
- my $obj = tie my %did2pkg, 'DB_File', "$DBDIR/descriptions_packages.db", O_RDONLY, 0666, $DB_BTREE
- or die "couldn't tie DB $DBDIR/descriptions_packages.db: $!";
+ tie my %packages, 'DB_File', "$DBDIR/$lookup", O_RDONLY, 0666, $DB_BTREE
+ or die "couldn't tie DB $DBDIR/$lookup: $!";
+ tie my %did2pkg, 'DB_File', "$DBDIR/$mapping", O_RDONLY, 0666, $DB_BTREE
+ or die "couldn't tie DB $DBDIR/$mapping: $!";
my %tmp_results;
foreach my $l (@lines) {
my $result = $did2pkg{$l};
foreach (split /\000/o, $result) {
my @data = split /\s/, $_, 3;
- next unless $archs{$data[2]};
+ next unless $opts->{h_archs}{$data[2]};
$tmp_results{$data[0]}++;
}
}
foreach my $pkg (keys %tmp_results) {
- read_entry( \%packages, $pkg, \@results );
+ &$read_entry( \%packages, $pkg, \@results, $opts );
}
+ return \@results;
+}
+
+sub find_binaries {
+ my ($pkg, $suite) = @_;
+
+ tie my %src2bin, 'DB_File', "$DBDIR/sources_packages.db", O_RDONLY, 0666, $DB_BTREE
+ or die "couldn't open $DBDIR/sources_packages.db: $!";
+
+ my $bins = $src2bin{$pkg} || '';
+ my %bins;
+ foreach (split /\000/o, $bins) {
+ my @data = split /\s/, $_, 4;
+
+ if ($data[0] eq $suite) {
+ $bins{$data[1]}++;
+ }
+ }
+
+ return [ keys %bins ];
+}
+
+if ($searchon eq 'names') {
+ push @results, @{ do_names_search( $keyword, 'packages_small.db',
+ 'package_postfixes.db',
+ \&read_entry, \%opts ) };
+} elsif ($searchon eq 'sourcenames') {
+ push @results, @{ do_names_search( $keyword, 'sources_small.db',
+ 'source_postfixes.db',
+ \&read_src_entry, \%opts ) };
+} else {
+ push @results, @{ do_names_search( $keyword, 'packages_small.db',
+ 'package_postfixes.db',
+ \&read_entry, \%opts ) };
+ push @results, @{ do_fulltext_search( $keyword, 'descriptions.txt',
+ 'descriptions_packages.db',
+ 'packages_small.db',
+ \&read_entry, \%opts ) };
}
my $st1 = new Benchmark;
@@ -329,8 +366,8 @@ if ($format eq 'html') {
}
}
-if ($too_much_hits) {
-print "Your search was too wide so we will only display exact matches. At least $too_much_hits results have been omitted and will not be displayed. Please consider using a longer keyword or more keywords.
";
+if ($too_many_hits) {
+ print "Your search was too wide so we will only display exact matches. At least $too_many_hits results have been omitted and will not be displayed. Please consider using a longer keyword or more keywords.
";
}
if (!@results) {
@@ -386,7 +423,6 @@ unless ($search_on_sources) {
$part{$package}{$suite}{$version} = $section unless $section eq 'main';
$desc{$package}{$suite}{$version} = $desc;
-
}
if ($format eq 'html') {
@@ -417,43 +453,17 @@ unless ($search_on_sources) {
}
print "\n";
}
- } elsif ($format eq 'xml') {
- require RDF::Simple::Serialiser;
- my $rdf = new RDF::Simple::Serialiser;
- $rdf->addns( debpkg => 'http://packages.debian.org/xml/01-debian-packages-rdf' );
- my @triples;
- foreach my $pkg (sort keys %pkgs) {
- foreach my $ver (@DISTS) {
- if (exists $pkgs{$pkg}{$ver}) {
- my @versions = version_sort keys %{$pkgs{$pkg}{$ver}};
- foreach my $version (@versions) {
- my $id = "$ROOT/$ver/$sect{$pkg}{$ver}{$version}/$pkg/$version";
- push @triples, [ $id, 'debpkg:package', $pkg ];
- push @triples, [ $id, 'debpkg:version', $version ];
- push @triples, [ $id, 'debpkg:section', $sect{$pkg}{$ver}{$version}, ];
- push @triples, [ $id, 'debpkg:suite', $ver ];
- push @triples, [ $id, 'debpkg:shortdesc', $desc{$pkg}{$ver}{$version} ];
- push @triples, [ $id, 'debpkg:part', $part{$pkg}{$ver}{$version} || 'main' ];
- foreach my $arch (sort keys %{$pkgs{$pkg}{$ver}{$version}}) {
- push @triples, [ $id, 'debpkg:architecture', $arch ];
- }
- }
- }
- }
- }
-
- print $rdf->serialise(@triples);
}
} else {
foreach (@results) {
my ($package, $suite, $section, $subsection, $priority,
- $version, $binaries) = @$_;
+ $version) = @$_;
$pkgs{$package}{$suite} = $version;
$sect{$package}{$suite}{source} = $subsection;
$part{$package}{$suite}{source} = $section unless $section eq 'main';
- $binaries{$package}{$suite} = [ sort split( /\s*,\s*/, $binaries ) ];
+ $binaries{$package}{$suite} = find_binaries( $package, $suite );
}
if ($format eq 'html') {
@@ -476,15 +486,8 @@ unless ($search_on_sources) {
print "
Binary packages: ";
my @bp_links;
foreach my $bp (@{$binaries{$pkg}{$ver}}) {
- my $sect = 'section';
-
- my $bp_link;
- if ($sect) {
- $bp_link = sprintf( "%s",
- $ver, $sect, uri_escape( $bp ), $bp );
- } else {
- $bp_link = $bp;
- }
+ my $bp_link = sprintf( "%s",
+ $ver, uri_escape( $bp ), $bp );
push @bp_links, $bp_link;
}
print join( ", ", @bp_links );
@@ -493,29 +496,6 @@ unless ($search_on_sources) {
}
print "\n";
}
- } elsif ($format eq 'xml') {
- require RDF::Simple::Serialiser;
- my $rdf = new RDF::Simple::Serialiser;
- $rdf->addns( debpkg => 'http://packages.debian.org/xml/01-debian-packages-rdf' );
- my @triples;
- foreach my $pkg (sort keys %pkgs) {
- foreach my $ver (@SUITES) {
- if (exists $pkgs{$pkg}{$ver}) {
- my $id = "$ROOT/$ver/source/$pkg";
-
- push @triples, [ $id, 'debpkg:package', $pkg ];
- push @triples, [ $id, 'debpkg:type', 'source' ];
- push @triples, [ $id, 'debpkg:section', $sect{$pkg}{$ver}{source} ];
- push @triples, [ $id, 'debpkg:version', $pkgs{$pkg}{$ver} ];
- push @triples, [ $id, 'debpkg:part', $part{$pkg}{$ver}{source} || 'main' ];
-
- foreach my $bp (@{$binaries{$pkg}{$ver}}) {
- push @triples, [ $id, 'debpkg:binary', $bp ];
- }
- }
- }
- }
- print $rdf->serialise(@triples);
}
}
@@ -530,7 +510,7 @@ sub printindexline {
my $no_results = shift;
my $index_line;
- if ($no_results > $results_per_page) {
+ if ($no_results > $opts{number}) {
$index_line = prevlink($input,\%params)." | ".
indexline( $input, \%params, $no_results)." | ".
@@ -544,10 +524,10 @@ sub multipageheader {
my $no_results = shift;
my ($start, $end);
- if ($results_per_page =~ /^all$/i) {
+ if ($opts{number} =~ /^all$/i) {
$start = 1;
$end = $no_results;
- $results_per_page = $no_results;
+ $opts{number} = $no_results;
} else {
$start = Packages::Search::start( \%params );
$end = Packages::Search::end( \%params );
@@ -567,7 +547,7 @@ sub multipageheader {
print "Results per page: ";
my @resperpagelinks;
for (50, 100, 200) {
- if ($results_per_page == $_) {
+ if ($opts{number} == $_) {
push @resperpagelinks, $_;
} else {
push @resperpagelinks, resperpagelink($input,\%params,$_);
@@ -593,5 +573,11 @@ print <
END
+my $pete = new Benchmark;
+my $petd = timediff($pete, $pet0);
+print "Total page evaluation took ".timestr($petd)."
"
+ if $debug_allowed;
print $input->end_html;
}
+
+# vim: ts=8 sw=4