SCM Repository
Annotation of /packages/htmlscripts/print_deps.pl
Parent Directory
|
Revision Log
Revision 1.1.2.15 - (view) (download) (as text)
| 1 : | djpig | 1.1 | use strict; |
| 2 : | use warnings; | ||
| 3 : | |||
| 4 : | djpig | 1.1.2.7 | use HTML::Entities; |
| 5 : | |||
| 6 : | use Packages::Pkg; | ||
| 7 : | use Deb::Versions; | ||
| 8 : | |||
| 9 : | djpig | 1.1.2.10 | sub dep_item { |
| 10 : | my ( $link, $name, $info, $desc ) = @_; | ||
| 11 : | my $post_link = ''; | ||
| 12 : | if ($link) { | ||
| 13 : | $link = "<a href=\"$link\">"; | ||
| 14 : | $post_link = '</a>'; | ||
| 15 : | } else { | ||
| 16 : | $link = ''; | ||
| 17 : | } | ||
| 18 : | if ($info) { | ||
| 19 : | $info = " $info"; | ||
| 20 : | } else { | ||
| 21 : | $info = ''; | ||
| 22 : | } | ||
| 23 : | if ($desc) { | ||
| 24 : | djpig | 1.1.2.14 | $desc = "</dt><dd>$desc</dd>"; |
| 25 : | djpig | 1.1.2.10 | } else { |
| 26 : | djpig | 1.1.2.14 | $desc = '</dt>'; |
| 27 : | djpig | 1.1.2.10 | } |
| 28 : | |||
| 29 : | return "$link$name$post_link$info$desc"; | ||
| 30 : | djpig | 1.1.2.14 | } # end dep_item |
| 31 : | |||
| 32 : | sub dep_item_ds { | ||
| 33 : | my ( $link, $name, $info) = @_; | ||
| 34 : | my $post_link = ''; | ||
| 35 : | if ($link) { | ||
| 36 : | $link = "<a href=\"$link\">"; | ||
| 37 : | $post_link = '</a>'; | ||
| 38 : | } else { | ||
| 39 : | $link = ''; | ||
| 40 : | } | ||
| 41 : | if ($info) { | ||
| 42 : | $info = " $info"; | ||
| 43 : | } else { | ||
| 44 : | $info = ''; | ||
| 45 : | } | ||
| 46 : | return "$link$name$post_link$info"; | ||
| 47 : | } # end dep_item_ds | ||
| 48 : | |||
| 49 : | djpig | 1.1.2.10 | |
| 50 : | djpig | 1.1 | sub print_deps { |
| 51 : | djpig | 1.1.2.10 | my ( $env, $lang, $pkg, $relations, $type) = @_; |
| 52 : | djpig | 1.1 | my %dep_type = ('depends' => 'dep', 'recommends' => 'rec', |
| 53 : | 'suggests' => 'sug'); | ||
| 54 : | djpig | 1.1.2.9 | my $res = "<ul class=\"ul$dep_type{$type}\">\n"; |
| 55 : | djpig | 1.1.2.10 | my $first = 1; |
| 56 : | |||
| 57 : | # use Data::Dumper; | ||
| 58 : | # warn Dumper( \$lang, $pkg->get_name, \$type, $relations ); | ||
| 59 : | |||
| 60 : | foreach my $rel (@$relations) { | ||
| 61 : | my $is_old_pkgs = $rel->[0]; | ||
| 62 : | my @res_pkgs = (); | ||
| 63 : | |||
| 64 : | if ($is_old_pkgs) { | ||
| 65 : | djpig | 1.1.2.14 | $res .= "<dt>"; |
| 66 : | djpig | 1.1.2.10 | } else { |
| 67 : | if ($first) { | ||
| 68 : | $res .= "<li>"; | ||
| 69 : | $first = 0; | ||
| 70 : | djpig | 1.1 | } else { |
| 71 : | djpig | 1.1.2.14 | $res .= "</dl></li>\n<li>"; |
| 72 : | djpig | 1.1 | } |
| 73 : | djpig | 1.1.2.14 | $res .= "<span class=\"hidecss\">[$dep_type{$type}] </span><dl><dt>"; |
| 74 : | djpig | 1.1.2.10 | } |
| 75 : | djpig | 1.1 | |
| 76 : | djpig | 1.1.2.10 | foreach my $rel_alt ( @$rel ) { |
| 77 : | next unless ref($rel_alt); | ||
| 78 : | my ( $p_name, $pkg_version, $arch_neg, | ||
| 79 : | $arch_str, $subsection, $available ) = @$rel_alt; | ||
| 80 : | djpig | 1.1 | |
| 81 : | djpig | 1.1.2.10 | if ($arch_str) { |
| 82 : | if ($arch_neg) { | ||
| 83 : | $arch_str = " [".gettext("not")." $arch_str]"; | ||
| 84 : | djpig | 1.1 | } else { |
| 85 : | djpig | 1.1.2.10 | $arch_str = " [$arch_str]"; |
| 86 : | djpig | 1.1 | } |
| 87 : | } | ||
| 88 : | djpig | 1.1.2.10 | $pkg_version = "($pkg_version)" if $pkg_version; |
| 89 : | djpig | 1.1 | |
| 90 : | djpig | 1.1.2.10 | my $p = $env->{db}->get_pkg( $p_name ); |
| 91 : | if ( $p ) { | ||
| 92 : | if ( $is_old_pkgs ) { | ||
| 93 : | push @res_pkgs, dep_item( "../$subsection/$p_name", $p_name, "$pkg_version$arch_str" ); | ||
| 94 : | } elsif ( $subsection eq 'virtual' ) { | ||
| 95 : | my $short_desc = gettext( "Virtual package" ); | ||
| 96 : | push @res_pkgs, dep_item( "../virtual/$p_name", $p_name, "$pkg_version$arch_str", $short_desc ); | ||
| 97 : | } else { | ||
| 98 : | my %desc_md5s = $p->get_arch_fields( 'description-md5', | ||
| 99 : | $env->{archs} ); | ||
| 100 : | my $short_desc = conv_desc( $env->{lang}, encode_entities( $env->{db}->get_short_desc( $desc_md5s{max_unique}, $lang ), "<>&\"" ) ); | ||
| 101 : | push @res_pkgs, dep_item( "../$subsection/$p_name", $p_name, "$pkg_version$arch_str", $short_desc ); | ||
| 102 : | } | ||
| 103 : | } elsif ( $is_old_pkgs ) { | ||
| 104 : | push @res_pkgs, dep_item( undef, $p_name, "$pkg_version$arch_str" ); | ||
| 105 : | } else { | ||
| 106 : | my $short_desc = gettext( "Package not available" ); | ||
| 107 : | push @res_pkgs, dep_item( undef, $p_name, "$pkg_version$arch_str", $short_desc ); | ||
| 108 : | } | ||
| 109 : | |||
| 110 : | djpig | 1.1 | } |
| 111 : | djpig | 1.1.2.10 | |
| 112 : | djpig | 1.1.2.15 | $res .= "\n".join( "<dt>".gettext( "or" )." ", @res_pkgs )."\n"; |
| 113 : | djpig | 1.1 | } |
| 114 : | djpig | 1.1.2.10 | if (@$relations) { |
| 115 : | djpig | 1.1.2.14 | $res .= "</dl></li>\n"; |
| 116 : | djpig | 1.1.2.12 | $res .= "</ul>\n"; |
| 117 : | djpig | 1.1.2.9 | } else { |
| 118 : | djpig | 1.1.2.10 | $res = ""; |
| 119 : | djpig | 1.1.2.9 | } |
| 120 : | djpig | 1.1 | return $res; |
| 121 : | djpig | 1.1.2.14 | } # end print_deps |
| 122 : | djpig | 1.1 | |
| 123 : | sub print_src_deps { | ||
| 124 : | djpig | 1.1.2.10 | my ( $env, $lang, $pkg, $version, $type) = @_; |
| 125 : | djpig | 1.1 | my %dep_type = ('build-depends' => 'adep', 'build-depends-indep' => 'idep' ); |
| 126 : | djpig | 1.1.2.9 | my $found = 0; |
| 127 : | my $res = "<ul class=\"ul$dep_type{$type}\">\n"; | ||
| 128 : | djpig | 1.1 | foreach my $dep ( @{$pkg->{versions}{$version}{$type}} ) { |
| 129 : | djpig | 1.1.2.9 | $found = 1; |
| 130 : | djpig | 1.1 | my @res_pkgs; |
| 131 : | djpig | 1.1.2.14 | $res .= "<li><span class=\"hidecss\">[$dep_type{$type}] </span><dl><dt>"; |
| 132 : | djpig | 1.1 | foreach my $or_dep ( @$dep ) { |
| 133 : | my $p_name = $or_dep->[0]; | ||
| 134 : | my $p = $env->{db}->get_pkg( $p_name ); | ||
| 135 : | my $p_version = $or_dep->[1] ? "(".encode_entities( $or_dep->[1] ). | ||
| 136 : | " $or_dep->[2]) " : ""; | ||
| 137 : | my $not = gettext( "not" ); | ||
| 138 : | if ($or_dep->[3]) { | ||
| 139 : | $or_dep->[3] =~ s/\s+/, /go; | ||
| 140 : | # as either all or no archs have to be prepended with | ||
| 141 : | # exlamation marks, convert the first and delete the others | ||
| 142 : | $or_dep->[3] =~ s/!\s*/$not /o; | ||
| 143 : | $or_dep->[3] =~ s/!\s*//go; | ||
| 144 : | } | ||
| 145 : | my $arch_str = $or_dep->[3] ? " [$or_dep->[3]]" : ""; | ||
| 146 : | if ( $p ) { | ||
| 147 : | if ( $p->is_virtual ) { | ||
| 148 : | my $short_desc = gettext( "Virtual package" ); | ||
| 149 : | djpig | 1.1.2.10 | push @res_pkgs, dep_item( "../virtual/$p_name", $p_name, "$p_version$arch_str", $short_desc ); |
| 150 : | djpig | 1.1 | } else { |
| 151 : | my %sections = $p->get_arch_fields( 'section', | ||
| 152 : | $env->{archs} ); | ||
| 153 : | my $section = $sections{max_unique}; | ||
| 154 : | my %desc_md5s = $p->get_arch_fields( 'description-md5', | ||
| 155 : | $env->{archs} ); | ||
| 156 : | djpig | 1.1.2.10 | my $short_desc = conv_desc( $lang, encode_entities( $env->{db}->get_short_desc( $desc_md5s{max_unique}, $lang ), "<>&\"" ) ); |
| 157 : | push @res_pkgs, dep_item( "../$section/$p_name", $p_name, "$p_version$arch_str", $short_desc ); | ||
| 158 : | djpig | 1.1 | } |
| 159 : | } else { | ||
| 160 : | my $short_desc = gettext( "Package not available" ); | ||
| 161 : | djpig | 1.1.2.10 | push @res_pkgs, dep_item( undef, $p_name, "$p_version$arch_str", $short_desc ); |
| 162 : | djpig | 1.1 | } |
| 163 : | } | ||
| 164 : | djpig | 1.1.2.14 | $res .= "\n".join( "<dt>\n".gettext( "or" )." ", @res_pkgs )."</dl></li>\n"; |
| 165 : | djpig | 1.1 | } |
| 166 : | djpig | 1.1.2.9 | if ($found) { |
| 167 : | $res .= "\n</ul>"; | ||
| 168 : | } else { | ||
| 169 : | $res = ""; | ||
| 170 : | } | ||
| 171 : | djpig | 1.1 | return $res; |
| 172 : | djpig | 1.1.2.14 | } # end print_src_deps |
| 173 : | djpig | 1.1 | |
| 174 : | djpig | 1.1.2.1 | sub print_deps_ds { |
| 175 : | djpig | 1.1.2.10 | my ( $env, $pkg, $relations, $type) = @_; |
| 176 : | djpig | 1.1.2.1 | my $res = ""; |
| 177 : | |||
| 178 : | djpig | 1.1.2.10 | use Data::Dumper; |
| 179 : | # warn Dumper( $type, $relations ); | ||
| 180 : | |||
| 181 : | djpig | 1.1.2.2 | my @res; |
| 182 : | djpig | 1.1.2.10 | foreach my $rel (@$relations) { |
| 183 : | my @res_pkgs = (); | ||
| 184 : | foreach my $rel_alt ( @$rel ) { | ||
| 185 : | next unless ref($rel_alt); | ||
| 186 : | my ( $p_name, $pkg_version, $arch_neg, | ||
| 187 : | $arch_str, $subsection, $available ) = @$rel_alt; | ||
| 188 : | |||
| 189 : | if ($arch_str) { | ||
| 190 : | if ($arch_neg) { | ||
| 191 : | $arch_str = " [".gettext("not")." $arch_str]"; | ||
| 192 : | } else { | ||
| 193 : | $arch_str = " [$arch_str]"; | ||
| 194 : | djpig | 1.1.2.1 | } |
| 195 : | djpig | 1.1.2.10 | } |
| 196 : | $pkg_version = "($pkg_version)" if $pkg_version; | ||
| 197 : | djpig | 1.1.2.1 | |
| 198 : | djpig | 1.1.2.10 | if ($available) { |
| 199 : | djpig | 1.1.2.14 | push @res_pkgs, dep_item_ds( "../$subsection/$p_name", |
| 200 : | $p_name, | ||
| 201 : | "$pkg_version$arch_str" ); | ||
| 202 : | djpig | 1.1.2.10 | } else { |
| 203 : | djpig | 1.1.2.14 | push @res_pkgs, dep_item_ds( undef, |
| 204 : | $p_name, | ||
| 205 : | "$pkg_version$arch_str" ); | ||
| 206 : | djpig | 1.1.2.1 | } |
| 207 : | djpig | 1.1.2.10 | |
| 208 : | djpig | 1.1.2.1 | } |
| 209 : | djpig | 1.1.2.15 | push @res, join( " ".gettext( "or" )." ", @res_pkgs ); |
| 210 : | djpig | 1.1.2.1 | } |
| 211 : | |||
| 212 : | djpig | 1.1.2.2 | if (@res) { |
| 213 : | djpig | 1.1.2.10 | $res .= ds_item($type, join( ", ", @res)); |
| 214 : | djpig | 1.1.2.1 | } |
| 215 : | return $res; | ||
| 216 : | djpig | 1.1.2.14 | } # end print_deps_ds |
| 217 : | djpig | 1.1.2.1 | |
| 218 : | djpig | 1.1.2.10 | #FIXME |
| 219 : | djpig | 1.1.2.4 | sub print_reverse_rel_ds { |
| 220 : | djpig | 1.1.2.6 | my ( $env, $pkg, $versions, $type, $is_src_dep) = @_; |
| 221 : | djpig | 1.1.2.4 | my $res = ""; |
| 222 : | my @res = (); | ||
| 223 : | my @all_archs = ( @{$env->{archs}}, 'all' ); | ||
| 224 : | my $lc_type = lc $type; | ||
| 225 : | |||
| 226 : | unless (exists $pkg->{rr}{$lc_type}) { | ||
| 227 : | return ""; | ||
| 228 : | } | ||
| 229 : | |||
| 230 : | djpig | 1.1.2.5 | my ( $save_p, $save_as ) = ( "", "" ); |
| 231 : | my @save_vs = (); | ||
| 232 : | djpig | 1.1.2.8 | my $r_p; |
| 233 : | foreach $r_p ( sort keys %{$pkg->{rr}{$lc_type}} ) { | ||
| 234 : | djpig | 1.1.2.4 | foreach my $r_v ( version_sort keys %{$pkg->{rr}{$lc_type}{$r_p}} ) { |
| 235 : | my %arch_deps; | ||
| 236 : | foreach my $r_a ( keys %{$pkg->{rr}{$lc_type}{$r_p}{$r_v}} ) { | ||
| 237 : | $arch_deps{$r_a}{$r_p} = | ||
| 238 : | "@{$pkg->{rr}{$lc_type}{$r_p}{$r_v}{$r_a}}"; | ||
| 239 : | } | ||
| 240 : | djpig | 1.1.2.5 | @all_archs = sort keys %arch_deps; |
| 241 : | djpig | 1.1.2.4 | my $arch_str = compute_arch_str( $r_p, $versions, \%arch_deps, |
| 242 : | djpig | 1.1.2.6 | \@all_archs, $is_src_dep ); |
| 243 : | djpig | 1.1.2.4 | if ( ($r_p eq $save_p) && ($arch_str eq $save_as) ) { |
| 244 : | djpig | 1.1.2.5 | push @save_vs, $r_v; |
| 245 : | djpig | 1.1.2.4 | } else { |
| 246 : | djpig | 1.1.2.5 | if ( $save_p ) { |
| 247 : | $save_p = compute_link( $env, $save_p ); | ||
| 248 : | # if (@save_vs == keys %{$versions->{v2a}}) { | ||
| 249 : | # push @res, "$save_p$save_as"; | ||
| 250 : | # } else { | ||
| 251 : | push @res, "$save_p (". | ||
| 252 : | join( ", ", version_sort @save_vs ). | ||
| 253 : | ")$save_as"; | ||
| 254 : | # } | ||
| 255 : | } | ||
| 256 : | |||
| 257 : | djpig | 1.1.2.4 | $save_p = $r_p; |
| 258 : | djpig | 1.1.2.5 | @save_vs = ( $r_v ); |
| 259 : | djpig | 1.1.2.4 | $save_as = $arch_str; |
| 260 : | } | ||
| 261 : | } | ||
| 262 : | } | ||
| 263 : | |||
| 264 : | if (@res) { | ||
| 265 : | djpig | 1.1.2.15 | #FIXME: gettext |
| 266 : | djpig | 1.1.2.8 | $res = "<li>Reverse $type: ".join( ", ", @res)."</li>\n"; |
| 267 : | djpig | 1.1.2.4 | } |
| 268 : | return $res; | ||
| 269 : | djpig | 1.1.2.14 | } # end print_reverse_rel_ds |
| 270 : | djpig | 1.1.2.4 | |
| 271 : | |||
| 272 : | djpig | 1.1.2.6 | sub compute_src_arch_str { |
| 273 : | my ( $dp, $versions, $arch_deps, $all_archs ) = @_; | ||
| 274 : | |||
| 275 : | |||
| 276 : | my $full_arch_string = ""; | ||
| 277 : | my $arch_str = ""; | ||
| 278 : | foreach my $a ( @$all_archs ) { | ||
| 279 : | if ( exists( $versions->{a2v}{$a} ) | ||
| 280 : | && exists( $arch_deps->{$a} ) ) { | ||
| 281 : | if ( exists $arch_deps->{$a}{$dp} ) { | ||
| 282 : | $full_arch_string .= $a; | ||
| 283 : | } | ||
| 284 : | } | ||
| 285 : | } | ||
| 286 : | |||
| 287 : | my ( %dep_archs, %not_dep_archs ); | ||
| 288 : | my @toks = split / /, $full_arch_string; | ||
| 289 : | foreach (@toks) { | ||
| 290 : | /^all$/ && return ""; | ||
| 291 : | |||
| 292 : | /^!(\w+)$/ && do { | ||
| 293 : | $not_dep_archs{$1}++; | ||
| 294 : | next; | ||
| 295 : | }; | ||
| 296 : | |||
| 297 : | /^(\w+)$/ && do { | ||
| 298 : | $dep_archs{$1}++; | ||
| 299 : | next; | ||
| 300 : | }; | ||
| 301 : | } | ||
| 302 : | |||
| 303 : | foreach (keys %dep_archs) { | ||
| 304 : | if (exists $not_dep_archs{$_}) { | ||
| 305 : | delete $not_dep_archs{$_}; | ||
| 306 : | } | ||
| 307 : | |||
| 308 : | $arch_str .= $_; | ||
| 309 : | } | ||
| 310 : | foreach (keys %not_dep_archs) { | ||
| 311 : | $arch_str .= "!$_"; | ||
| 312 : | } | ||
| 313 : | |||
| 314 : | return $arch_str; | ||
| 315 : | djpig | 1.1.2.14 | } # end compute_src_arch_str |
| 316 : | djpig | 1.1.2.6 | |
| 317 : | djpig | 1.1 | 1; |
| root@alioth.debian.org | ViewVC Help |
| Powered by ViewVC 1.0.0 |

