use HTML::Entities;
use Locale::gettext;
-use Packages::CGI ();
+use Packages::CGI qw(make_url make_search_url);
use Packages::Search qw( read_entry_simple );
use Packages::Config qw( :all );
our @ISA = qw( Exporter );
our @EXPORT = qw( header title trailer file_changed time_stamp
read_md5_hash write_md5_hash simple_menu
- ds_begin ds_item ds_end title marker pdesc
+ ds_begin ds_item ds_end title marker pdesc ptags
pdeplegend pkg_list pmoreinfo print_deps print_src_deps );
our $CHANGELOG_URL = '/changelogs';
return $str;
}
+sub ptags {
+ my ( $package, @tags ) = @_;
+ my $str = "";
+
+ $str .= "<div id=\"ptags\">\n<p>";
+ $str .= "<a href=\"http://debtags.alioth.debian.org/cgi-bin/edit.cgi?pkg=".uri_escape($package)."\">Tags</a>:\n";
+ foreach my $tag (@tags) {
+ $str .= "<a href=\"http://debtags.alioth.debian.org/cgi-bin/index.cgi?tags=".uri_escape($tag)."\">$tag</a>\n";
+ }
+ $str .= "</p>\n</div> <!-- end ptags -->\n";
+
+ return $str;
+}
+
sub pdeplegend {
my $str = "<table id=\"pdeplegend\" summary=\"legend\"><tr>\n";
my $suite = $opts->{suite}[0];
my $str = "";
- foreach my $p ( @$pkgs ) {
+ foreach my $p ( sort @$pkgs ) {
+ # we don't deal with virtual packages here because for the
+ # current uses of this function this isn't needed
my $short_desc = (read_entry_simple( $packages, $p, $opts->{h_archives}, $suite))->[-1];
if ( $short_desc ) {
- $str .= "<dt><a href=\"$ROOT/$suite/$p\">$p</a></dt>\n".
+ $str .= "<dt><a href=\"".make_url($p,'',{source=>undef})."\">$p</a></dt>\n".
"\t<dd>$short_desc</dd>\n";
} else {
$str .= "<dt>$p</dt>\n\t<dd>"._g("Not available")."</dd>\n";
my $src_dir = $page->get_src('directory');
if ($info{sourcedownload}) {
my $files = $page->get_src( 'files' );
- my $path = (@{$opts->{archive}} >1) ?
- $suite :
- "$suite/$opts->{archive}[0]";
$str .= _g( "Source Package:" );
- $str .= " <a href=\"$ROOT/$path/source/$source\">$source</a>, ".
+ $str .= " <a href=\"".make_url($source,'',{source=>'source'})."\">$source</a>, ".
_g( "Download" ).":\n";
unless (defined($files) and @$files) {
} else {
foreach( @$files ) {
my ($src_file_md5, $src_file_size, $src_file_name) = split /\s/o, $_;
- for ($page->get_newest('archive')) {
- /security/o && do {
- $str .= "<a href=\"$env->{security}/$src_dir/$src_file_name\">["; last };
- /volatile/o && do {
- $str .= "<a href=\"$env->{volatile}/$src_dir/$src_file_name\">["; last };
- /backports/o && do {
- $str .= "<a href=\"$env->{backports}/$src_dir/$src_file_name\">["; last };
- /non-us/io && do {
- $str .= "<a href=\"$env->{nonus_site}/$src_dir/$src_file_name\">["; last };
- $str .= "<a href=\"$env->{us}/$src_dir/$src_file_name\">[";
- }
+ # non-US hack
+ (my $server = lc $page->get_newest('archive')) =~ s/-//go;
+ $str .= sprintf("<a href=\"%s/$src_dir/$src_file_name\">[",
+ $env->{$server}||$env->{us});
if ($src_file_name =~ /dsc$/) {
$str .= "dsc";
} else {
}
sub dep_item {
- my ( $link, $name, $info, $desc ) = @_;
- my $post_link = '';
- if ($link) {
- $link = "<a href=\"$link\">";
+ my ( $suite, $name, $info, $desc ) = @_;
+ my ($link, $post_link) = ('', '');
+ if ($suite) {
+ $link = "<a href=\"".make_url($name,'',{suite=>$suite,source=>undef})."\">";
$post_link = '</a>';
- } else {
- $link = '';
}
if ($info) {
$info = " $info";
return "$link$name$post_link$info$desc";
} # end dep_item
+sub provides_string {
+ my ($suite, $entry, $also) = @_;
+ my %tmp = map { $_ => 1 } split /\s/, $entry;
+ my @provided_by = keys %tmp; # weed out duplicates
+ my $short_desc = $also ? _g("also a virtual package provided by ")
+ : _g("virtual package provided by ");
+ if (@provided_by < 10) {
+ $short_desc .= join( ', ',map { "<a href=\"".make_url($_,'',{suite=>$suite,source=>undef})."\">$_</a>" } @provided_by);
+ } else {
+ $short_desc .= sprintf( _g("%s packages"), scalar(@provided_by));
+ }
+ return $short_desc;
+}
+
sub print_deps {
my ( $packages, $opts, $pkg, $relations, $type) = @_;
my %dep_type = ('depends' => 'dep', 'recommends' => 'rec',
my $res = "<ul class=\"ul$dep_type{$type}\">\n";
my $first = 1;
my $suite = $opts->{suite}[0];
- my $one_archive = @{$opts->{archive}} > 1 ? '': $opts->{archive}[0];
# use Data::Dumper;
# debug( "print_deps called:\n".Dumper( $pkg, $relations, \$type ), 3 ) if DEBUG;
my $short_desc = $entry->[-1];
my $arch = $entry->[3];
my $archive = $entry->[1];
+ my $p_suite = $entry->[2];
if ( $short_desc ) {
- my $path = $one_archive eq $archive ? "$suite/$archive" :
- $suite;
if ( $is_old_pkgs ) {
- push @res_pkgs, dep_item( "$ROOT/$path/$p_name",
+ push @res_pkgs, dep_item( $p_suite,
$p_name, "$pkg_version$arch_str" );
- } elsif (defined $entry->[0]) {
-# FIXME: can be both virtual package (defined $entry->[0]) and real one
- my @provided_by = split /\s/, $entry->[0];
- $short_desc = "virtual package provided by ";
- if (@provided_by < 10) {
- $short_desc .= join( ', ',map { "<a href=\"$ROOT/$path/$_\">$_</a>" } @provided_by);
- } else {
- $short_desc .= scalar(@provided_by)." packages";
- }
- push @res_pkgs, dep_item( "$ROOT/$path/$p_name",
- $p_name, "$pkg_version$arch_str", $short_desc );
- } else {
+ } elsif (defined $entry->[1]) {
$entries{$p_name} ||= $entry;
$short_desc = encode_entities( $short_desc, "<>&\"" );
- push @res_pkgs, dep_item( "$ROOT/$path/$p_name",
+ $short_desc .= "<br>".provides_string( $p_suite,
+ $entry->[0],
+ 1 )
+ if defined $entry->[0];
+ push @res_pkgs, dep_item( $p_suite,
+ $p_name, "$pkg_version$arch_str", $short_desc );
+ } elsif (defined $entry->[0]) {
+ $short_desc = provides_string( $p_suite,
+ $entry->[0] );
+ #FIXME: we don't handle virtual packages from
+ # the fallback suite correctly here
+ push @res_pkgs, dep_item( $suite,
$p_name, "$pkg_version$arch_str", $short_desc );
}
} elsif ( $is_old_pkgs ) {
"<div id=\"fineprint\" class=\"bordertop\"><p>".
sprintf( _g( "To report a problem with the web site, e-mail <a href=\"mailto:%s\">%s</a>. For other contact information, see the Debian <a href=\"%s/contact\">contact page</a>." ), $CONTACT_MAIL, $CONTACT_MAIL, $HOME).
"</p>\n".
- "<p>". _g( "Last Modified: " ). "LAST_MODIFIED_DATE".
+ "<p>". _g( "Last Modified: " ). gmtime().
"<br>\n".
sprintf( _g( "Copyright © 1997-2005 <a href=\"http://www.spi-inc.org\">SPI</a>; See <a href=\"%s/license\">license terms</a>." ), "$HOME/" )."<br>\n".
_g( "Debian is a registered trademark of Software in the Public Interest, Inc." ).