X-Git-Url: https://git.deb.at/w?a=blobdiff_plain;f=lib%2FPackages%2FHTML.pm;h=a291a0028b6285d15e76880f35c9e1dfead4af1b;hb=f46c14dbc13274569f533b19e27c61960ea9bacd;hp=38bfb588eea2c7f1d678771873aa3f08e29bce70;hpb=08852aab550de858d4e4956ea357dbc3ae713a26;p=deb%2Fpackages.git diff --git a/lib/Packages/HTML.pm b/lib/Packages/HTML.pm index 38bfb58..a291a00 100644 --- a/lib/Packages/HTML.pm +++ b/lib/Packages/HTML.pm @@ -7,7 +7,8 @@ use URI::Escape; use HTML::Entities; use Packages::CGI; -use Packages::Search qw( read_entry ); +use Packages::Search qw( read_entry_simple ); +use Packages::Config qw( :all ); #use Packages::Util; #use Packages::I18N::Locale; @@ -23,12 +24,8 @@ 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 note title marker pdesc - pdeplegend pkg_list pmoreinfo print_deps ); + pdeplegend pkg_list pmoreinfo print_deps print_src_deps ); -our ( $HOME, $ROOT, $CONTACT_MAIL, $WEBMASTER_MAIL, - $SEARCH_PAGE, $SEARCH_CGI, $SEARCH_URL, - $SRC_SEARCH_URL, $CONTENTS_SEARCH_CGI, - $CN_HELP_URL, $BUG_URL, $SRC_BUG_URL, $QA_URL ); our $CHANGELOG_URL = '/changelogs'; sub img { @@ -75,7 +72,7 @@ sub pdeplegend { my $str = "\n"; foreach my $entry (@_) { - $str .= ""; + $str .= ""; } $str .= "\n
[0].gif\" alt=\"[$entry->[0]]\" width=\"16\" height=\"16\">= $entry->[1][0].gif\" alt=\"[$entry->[0]]\" width=\"16\" height=\"16\">= $entry->[1]
\n"; @@ -83,27 +80,16 @@ sub pdeplegend { } sub pkg_list { - my ( $pkgs, $lang, $env ) = @_; + my ( $packages, $opts, $pkgs, $lang ) = @_; my $str = ""; foreach my $p ( @$pkgs ) { - my $p_pkg = $env->{db}->get_pkg( $p ); - if ( $p_pkg ) { - if ($p_pkg->is_virtual) { - $str .= "
$p
\n". - "\t
".gettext("Virtual package")."
\n"; - } else { - my %subsections = $p_pkg->get_arch_fields( 'section', - $env->{archs} ); - my $subsection = $subsections{max_unique}; - my %desc_md5s = $p_pkg->get_arch_fields( 'description-md5', - $env->{archs} ); - my $short_desc = conv_desc( $lang, - encode_entities( $env->{db}->get_short_desc( $desc_md5s{max_unique}, $lang ), "<>&\"" ) ); - $str .= "
$p
\n". + my $short_desc = (read_entry_simple( $packages, $p, $opts->{h_archives}, $opts->{suite}))->[-1]; + + if ( $short_desc ) { + $str .= "
{suite}/$p\">$p
\n". "\t
$short_desc
\n"; - } } else { $str .= "
$p
\n\t
".gettext("Not available")."
\n"; } @@ -119,14 +105,14 @@ sub pmoreinfo { my %info = @_; my $name = $info{name} or return; -# my $env = $info{env} or return; + my $env = $info{env} or return; + my $opts = $info{opts} or return; my $page = $info{data} or return; my $is_source = $info{is_source}; my $str = "
"; $str .= sprintf( "

".gettext( "More Information on %s" )."

", $name ); - if ($info{bugreports}) { my $bug_url = $is_source ? $SRC_BUG_URL : $BUG_URL; @@ -134,27 +120,34 @@ sub pmoreinfo { $bug_url.$name, $name ); } - my $source = $page->get_src( 'name' ); + my $source = $page->get_src( 'package' ); + my $source_version = $page->get_src( 'version' ); + my $src_dir = $page->get_src('directory'); if ($info{sourcedownload}) { my $files = $page->get_src( 'files' ); + my $path = (@{$opts->{archive}} >1) ? + $opts->{suite} : + "$opts->{suite}/$opts->{archive}[0]"; $str .= gettext( "Source Package:" ); - $str .= " $source, ". + $str .= " $source, ". gettext( "Download" ).":\n"; - unless (@$files) { + unless (defined($files) and @$files) { $str .= gettext( "Not found" ); } else { foreach( @$files ) { my ($src_file_md5, $src_file_size, $src_file_name) = @$_; -# if ($d->{is_security}) { -# $str .= "{opts}{security_site}/$d->{src_directory}/$src_file_name\">["; -# } elsif ($d->{is_volatile}) { -# $str .= "{opts}{volatile_site}/$d->{src_directory}/$src_file_name\">["; -# } elsif ($d->{is_nonus}) { -# $str .= "{opts}{nonus_site}/$d->{src_directory}/$src_file_name\">["; -# } else { -# $str .= "{opts}{debian_site}/$d->{src_directory}/$src_file_name\">["; -# } + for ($page->get_newest('archive')) { + /security/o && do { + $str .= "{security}/$src_dir/$src_file_name\">["; last }; + /volatile/o && do { + $str .= "{volatile}/$src_dir/$src_file_name\">["; last }; + /backports/o && do { + $str .= "{backports}/$src_dir/$src_file_name\">["; last }; + /non-us/io && do { + $str .= "{nonus_site}/$src_dir/$src_file_name\">["; last }; + $str .= "{us}/$src_dir/$src_file_name\">["; + } if ($src_file_name =~ /dsc$/) { $str .= "dsc"; } else { @@ -167,47 +160,48 @@ sub pmoreinfo { # if ($src_version ne $version) && !$src_version_given_in_control; } -# if ($info{changesandcopy}) { -# if ( $d->{src_directory} ) { -# my $src_dir = $d->{src_directory}; -# (my $src_basename = $d->{src_version}) =~ s,^\d+:,,; # strip epoche -# $src_basename = "$d->{src_name}_$src_basename"; -# $src_dir =~ s,pool/updates,pool,o; -# $src_dir =~ s,pool/non-US,pool,o; -# $str .= "
".sprintf( gettext( "View the
Debian changelog" ), -# "$CHANGELOG_URL/$src_dir/$src_basename/changelog" )."
\n"; -# my $copyright_url = "$CHANGELOG_URL/$src_dir/$src_basename/"; -# $copyright_url .= ( $is_source ? 'copyright' : "$name.copyright" ); - -# $str .= sprintf( gettext( "View the copyright file" ), -# $copyright_url )."

"; -# } -# } + if ($info{changesandcopy}) { + if ( $src_dir ) { + (my $src_basename = $source_version) =~ s,^\d+:,,; # strip epoche + $src_basename = "${source}_$src_basename"; + $src_dir =~ s,pool/updates,pool,o; + $src_dir =~ s,pool/non-US,pool,o; + $str .= "
".sprintf( gettext( "View the Debian changelog" ), + "$CHANGELOG_URL/$src_dir/$src_basename/changelog" )."
\n"; + my $copyright_url = "$CHANGELOG_URL/$src_dir/$src_basename/"; + $copyright_url .= ( $is_source ? 'copyright' : "$name.copyright" ); + + $str .= sprintf( gettext( "View the copyright file" ), + $copyright_url )."

"; + } + } if ($info{maintainers}) { - my @uploaders = @{$page->get_src( 'uploaders' )}; - foreach (@uploaders) { - $_->[0] = encode_entities( $_->[0], '&<>' ); - } - my ($maint_name, $maint_mail ) = @{shift @uploaders}; - unless (@uploaders) { - $str .= "

\n".sprintf( gettext( "%s is responsible for this Debian package." ). - "\n", - "$maint_name" - ); - } else { - my $up_str = "$maint_name"; - my @uploaders_str; - foreach (@uploaders) { - push @uploaders_str, "[1]\">$_->[0]"; + my $uploaders = $page->get_src( 'uploaders' ); + if ($uploaders && @$uploaders) { + foreach (@$uploaders) { + $_->[0] = encode_entities( $_->[0], '&<>' ); + } + my ($maint_name, $maint_mail) = @{shift @$uploaders}; + unless (@$uploaders) { + $str .= "

\n".sprintf( gettext( "%s is responsible for this Debian package." ). + "\n", + "$maint_name" + ); + } else { + my $up_str = "$maint_name"; + my @uploaders_str; + foreach (@$uploaders) { + push @uploaders_str, "[1]\">$_->[0]"; + } + my $last_up = pop @uploaders_str; + $up_str .= ", ".join ", ", @uploaders_str if @uploaders_str; + $up_str .= sprintf( gettext( " and %s are responsible for this Debian package." ), $last_up ); + $str .= "

\n$up_str "; } - my $last_up = pop @uploaders_str; - $up_str .= ", ".join ", ", @uploaders_str if @uploaders_str; - $up_str .= sprintf( gettext( " and %s are responsible for this Debian package." ), $last_up ); - $str .= "

\n$up_str "; } - $str .= sprintf( gettext( "See the developer information for %s." )."

", $QA_URL.$source, $name ); + $str .= sprintf( gettext( "See the developer information for %s." )."

", $QA_URL.$source, $name ) if $source; } if ($info{search}) { @@ -266,7 +260,7 @@ sub print_deps { } else { $res .= "\n
  • "; } - $res .= "
    \"[$dep_type{$type}]\" "; + $res .= "
    \"[$dep_type{$type}]\" "; } foreach my $rel_alt ( @$rel ) { @@ -284,13 +278,16 @@ sub print_deps { $pkg_version = "($pkg_version)" if $pkg_version; my @results; - read_entry( $packages, $p_name, \@results, $opts); - if ( @results ) { + my %short_descs; + my $short_desc = $short_descs{$p_name} || + (read_entry_simple( $packages, $p_name, $opts->{h_archives}, $opts->{suite}))->[-1]; + if ( $short_desc ) { if ( $is_old_pkgs ) { push @res_pkgs, dep_item( "/$opts->{suite}/$p_name", $p_name, "$pkg_version$arch_str" ); } else { - my $short_desc = encode_entities( $results[0][-1], "<>&\"" ); + $short_descs{$p_name} ||= $short_desc; + $short_desc = encode_entities( $short_desc, "<>&\"" ); push @res_pkgs, dep_item( "/$opts->{suite}/$p_name", $p_name, "$pkg_version$arch_str", $short_desc ); } @@ -314,56 +311,48 @@ sub print_deps { return $res; } # end print_deps -# sub print_src_deps { -# my ( $env, $lang, $pkg, $version, $type) = @_; -# my %dep_type = ('build-depends' => 'adep', 'build-depends-indep' => 'idep' ); -# my $found = 0; -# my $res = "
      \n"; -# foreach my $dep ( @{$pkg->{versions}{$version}{$type}} ) { -# $found = 1; -# my @res_pkgs; -# $res .= "
    • \"[$dep_type{$type}]\" "; -# foreach my $or_dep ( @$dep ) { -# my $p_name = $or_dep->[0]; -# my $p = $env->{db}->get_pkg( $p_name ); -# my $p_version = $or_dep->[1] ? "(".encode_entities( $or_dep->[1] ). -# " $or_dep->[2]) " : ""; -# my $not = gettext( "not" ); -# if ($or_dep->[3]) { -# $or_dep->[3] =~ s/\s+/, /go; -# # as either all or no archs have to be prepended with -# # exlamation marks, convert the first and delete the others -# $or_dep->[3] =~ s/!\s*/$not /o; -# $or_dep->[3] =~ s/!\s*//go; -# } -# my $arch_str = $or_dep->[3] ? " [$or_dep->[3]]" : ""; -# if ( $p ) { -# if ( $p->is_virtual ) { -# my $short_desc = gettext( "Virtual package" ); -# push @res_pkgs, dep_item( "../virtual/$p_name", $p_name, "$p_version$arch_str", $short_desc ); -# } else { -# my %sections = $p->get_arch_fields( 'section', -# $env->{archs} ); -# my $section = $sections{max_unique}; -# my %desc_md5s = $p->get_arch_fields( 'description-md5', -# $env->{archs} ); -# my $short_desc = conv_desc( $lang, encode_entities( $env->{db}->get_short_desc( $desc_md5s{max_unique}, $lang ), "<>&\"" ) ); -# push @res_pkgs, dep_item( "../$section/$p_name", $p_name, "$p_version$arch_str", $short_desc ); -# } -# } else { -# my $short_desc = gettext( "Package not available" ); -# push @res_pkgs, dep_item( undef, $p_name, "$p_version$arch_str", $short_desc ); -# } -# } -# $res .= "\n".join( "
      \n".gettext( "or" )." ", @res_pkgs )."
    • \n"; -# } -# if ($found) { -# $res .= "\n
    "; -# } else { -# $res = ""; -# } -# return $res; -# } # end print_src_deps +sub print_src_deps { + my ( $packages, $opts, $pkg, $relations, $type) = @_; + my %dep_type = ('build-depends' => 'adep', 'build-depends-indep' => 'idep' ); + my $res = "
      \n"; + foreach my $dep (@$relations) { + my @res_pkgs; + $res .= "
    • \"[$dep_type{$type}]\" "; + foreach my $or_dep ( @$dep ) { + my $p_name = $or_dep->[0]; + my $p_version = $or_dep->[1] ? "(".encode_entities( $or_dep->[1] ). + " $or_dep->[2]) " : ""; + my $not = gettext( "not" ); + my $arch_str = ''; + if ($or_dep->[3] && @{$or_dep->[3]}) { + # as either all or no archs have to be prepended with + # exlamation marks, convert the first and delete the others + if ($or_dep->[3][0] =~ /^!/) { + $arch_str = "$not "; + foreach (@{$or_dep->[3]}) { + $_ =~ s/^!//go; + } + } + $arch_str = " [${arch_str}@{$or_dep->[3]}]"; + } + my $short_desc = (read_entry_simple( $packages, $p_name, $opts->{h_archives}, $opts->{suite}))->[-1]; + if ( $short_desc ) { + $short_desc = encode_entities( $short_desc, "<>&\"" ); + push @res_pkgs, dep_item( "/$opts->{suite}/$p_name", $p_name, "$p_version$arch_str", $short_desc ); + } else { + $short_desc = gettext( "Package not available" ); + push @res_pkgs, dep_item( undef, $p_name, "$p_version$arch_str", $short_desc ); + } + } + $res .= "\n".join( "
      \n".gettext( "or" )." ", @res_pkgs )."
    • \n"; + } + if (@$relations) { + $res .= "\n
    "; + } else { + $res = ""; + } + return $res; +} # end print_src_deps my $ds_begin = '
    '; @@ -496,7 +485,7 @@ MENU $KEYWORDS_LINE $DESC_LINE $meta - +