X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=cgi%2Fpkgreport.cgi;h=7f16855b704c739b1cfabac536a6f02f45897f36;hb=adf6539386c22827b4652dae96b4b634f6f4b4f2;hp=2d7dec655c18d8a941ae95b28db1fc45208bed8b;hpb=45e8787fb06dfe53e6249641482f4ea3b9c2d348;p=debbugs.git diff --git a/cgi/pkgreport.cgi b/cgi/pkgreport.cgi index 2d7dec6..7f16855 100755 --- a/cgi/pkgreport.cgi +++ b/cgi/pkgreport.cgi @@ -3,15 +3,15 @@ package debbugs; use strict; -use POSIX qw(strftime tzset nice); +use POSIX qw(strftime nice); -#require '/usr/lib/debbugs/errorlib'; require './common.pl'; -require '/etc/debbugs/config'; -require '/etc/debbugs/text'; - +use Debbugs::Config qw(:globals :text); use Debbugs::User; +use Debbugs::CGI qw(version_url); +use Debbugs::Common qw(getparsedaddrs); +use Debbugs::Bugs qw(get_bugs); use vars qw($gPackagePages $gWebDomain %gSeverityDisplay @gSeverityList); @@ -90,10 +90,10 @@ my %cats = ( } ], "severity" => [ { "nam" => "Severity", - "pri" => [map { "severity=$_" } @debbugs::gSeverityList], - "ttl" => [map { $debbugs::gSeverityDisplay{$_} } @debbugs::gSeverityList], + "pri" => [map { "severity=$_" } @gSeverityList], + "ttl" => [map { $gSeverityDisplay{$_} } @gSeverityList], "def" => "Unknown Severity", - "ord" => [0,1,2,3,4,5,6,7], + "ord" => [0..@gSeverityList], } ], "classification" => [ { "nam" => "Classification", @@ -111,7 +111,9 @@ my %cats = ( "normal" => [ qw(status severity classification) ], ); -my ($pkg, $src, $maint, $maintenc, $submitter, $severity, $status, $tag, $usertag); +my ($pkg, $src, $maint, $maintenc, $submitter, $severity, $status, $tag, $usertag, + $owner, + ); my %which = ( 'pkg' => \$pkg, @@ -122,6 +124,7 @@ my %which = ( 'severity' => \$severity, 'tag' => \$tag, 'usertag' => \$usertag, + 'owner' => \$owner, ); my @allowedEmpty = ( 'maint' ); @@ -158,7 +161,7 @@ quitcgi("You have to choose something to select by") if (!$found); my %bugusertags; my %ut; for my $user (split /[\s*,]+/, $users) { - next unless ($user =~ m/..../); + next unless length($user) >= 4; add_user($user); } @@ -181,10 +184,7 @@ my $this = ""; my %indexentry; my %strings = (); -$ENV{"TZ"} = 'UTC'; -tzset(); - -my $dtime = strftime "%a, %e %b %Y %T UTC", localtime; +my $dtime = strftime "%a, %e %b %Y %T UTC", gmtime; my $tail_html = $debbugs::gHTMLTail; $tail_html = $debbugs::gHTMLTail; $tail_html =~ s/SUBSTITUTE_DTIME/$dtime/; @@ -206,10 +206,14 @@ set_option("use-bug-idx", defined($param{'use-bug-idx'}) ? $param{'use-bug-idx'} set_option("show_list_header", $show_list_header); set_option("show_list_footer", $show_list_footer); +our %seen_users; sub add_user { my $ut = \%ut; my $u = shift; + return if $seen_users{$u}; + $seen_users{$u} = 1; + my $user = Debbugs::User::get_user($u); my %vis = map { $_, 1 } @{$user->{"visible_cats"}}; @@ -233,11 +237,20 @@ sub add_user { set_option("bugusertags", \%bugusertags); } +my $pseudodesc = getpseudodesc(); +if (defined $pseudodesc and defined $pkg and exists $pseudodesc->{$pkg}) { + undef $dist; + set_option('dist',$dist) +} my $title; my @bugs; if (defined $pkg) { $title = "package $pkg"; add_user("$pkg\@packages.debian.org"); + # figure out the source package + my $pkgsrc = getpkgsrc(); + add_user($pkgsrc->{$pkg}.'@packages.debian.org') + if defined $pkgsrc->{$pkg}; if (defined $version) { $title .= " (version $version)"; } elsif (defined $dist) { @@ -246,12 +259,7 @@ if (defined $pkg) { $title .= " ($verdesc)" if defined $verdesc; } my @pkgs = split /,/, $pkg; - @bugs = @{getbugs(sub {my %d=@_; - foreach my $try (splitpackages($d{"pkg"})) { - return 1 if grep($try eq $_, @pkgs); - } - return 0; - }, 'package', @pkgs)}; + @bugs = get_bugs(package=>\@pkgs); } elsif (defined $src) { add_user("$src\@packages.debian.org"); $title = "source $src"; @@ -263,46 +271,21 @@ if (defined $pkg) { my $verdesc = getversiondesc($src); $title .= " ($verdesc)" if defined $verdesc; } - my @pkgs = (); - my @srcs = split /,/, $src; - foreach my $try (@srcs) { - push @pkgs, getsrcpkgs($try); - push @pkgs, $try if ( !grep(/^\Q$try\E$/, @pkgs) ); - } - @bugs = @{getbugs(sub {my %d=@_; - foreach my $try (splitpackages($d{"pkg"})) { - return 1 if grep($try eq $_, @pkgs); - } - return 0; - }, 'package', @pkgs)}; + @bugs = get_bugs(src=>[split /,/, $src]); } elsif (defined $maint) { - my %maintainers = %{getmaintainers()}; add_user($maint); $title = "maintainer $maint"; $title .= " in $dist" if defined $dist; if ($maint eq "") { - @bugs = @{getbugs(sub {my %d=@_; - foreach my $try (splitpackages($d{"pkg"})) { - return 1 if !getparsedaddrs($maintainers{$try}); - } - return 0; - })}; + my %maintainers = %{getmaintainers()}; + @bugs = @{getbugs(sub {my %d=@_; + foreach my $try (splitpackages($d{"pkg"})) { + return 1 if !getparsedaddrs($maintainers{$try}); + } + return 0; + })}; } else { - my @maints = split /,/, $maint; - my @pkgs = (); - foreach my $try (@maints) { - foreach my $p (keys %maintainers) { - my @me = getparsedaddrs($maintainers{$p}); - push @pkgs, $p if grep { $_->address eq $try } @me; - } - } - @bugs = @{getbugs(sub {my %d=@_; - foreach my $try (splitpackages($d{"pkg"})) { - my @me = getparsedaddrs($maintainers{$try}); - return 1 if grep { $_->address eq $maint } @me; - } - return 0; - }, 'package', @pkgs)}; + @bugs = get_bugs(maint=>[map {lc ($_)} split /,/,$maint]); } } elsif (defined $maintenc) { my %maintainers = %{getmaintainers()}; @@ -321,13 +304,8 @@ if (defined $pkg) { add_user($submitter); $title = "submitter $submitter"; $title .= " in $dist" if defined $dist; - my @submitters = split /,/, $submitter; - @bugs = @{getbugs(sub {my %d=@_; - my @se = getparsedaddrs($d{"submitter"} || ""); - foreach my $try (@submitters) { - return 1 if grep { $_->address eq $try } @se; - } - }, 'submitter-email', @submitters)}; + my @submitters = map {lc ($_)} split /,/, $submitter; + @bugs = get_bugs(submitter => \@submitters); } elsif (defined($severity) && defined($status)) { $title = "$status $severity bugs"; $title .= " in $dist" if defined $dist; @@ -360,6 +338,14 @@ if (defined $pkg) { return grep(exists $tags{$_}, @tags); })}; } +elsif (defined $owner) { + $title = "bugs owned by $owner"; + $title .= " in $dist" if defined $dist; + my @owners = map {lc ($_)} split /,/, $owner; + my %bugs = (); + @bugs = get_bugs(owner=>\@owners); + +} $title = htmlsanit($title); my @names; my @prior; my @title; my @order; @@ -376,12 +362,12 @@ print "Content-Type: text/html; charset=utf-8\n\n"; print "\n"; print "\n" . - "$debbugs::gProject$Archived $debbugs::gBug report logs: $title\n" . - '' . + "$title -- $gProject$Archived $gBug report logs\n" . + qq() . "\n" . '' . "\n"; -print "

" . "$debbugs::gProject$Archived $debbugs::gBug report logs: $title" . +print "

" . "$gProject$Archived $gBug report logs: $title" . "

\n"; my $showresult = 1; @@ -426,12 +412,12 @@ if (defined $pkg || defined $src) { if ($pkg and defined($pseudodesc) and exists($pseudodesc->{$pkg})) { push @references, "to the list of other pseudo-packages"; } else { - if ($pkg and defined $debbugs::gPackagePages) { + if ($pkg and defined $gPackagePages) { push @references, sprintf "to the %s package page", urlsanit("http://${debbugs::gPackagePages}/$pkg"), htmlsanit("$pkg"); } - if (defined $debbugs::gSubscriptionDomain) { + if (defined $gSubscriptionDomain) { my $ptslink = $pkg ? $srcforpkg : $src; - push @references, "to the Package Tracking System"; + push @references, "to the Package Tracking System"; } # Only output this if the source listing is non-trivial. if ($pkg and $srcforpkg and (@pkgs or $pkg ne $srcforpkg)) { @@ -442,9 +428,11 @@ if (defined $pkg || defined $src) { $references[$#references] = "or $references[$#references]" if @references > 1; print "

You might like to refer ", join(", ", @references), ".

\n"; } - print "

If you find a bug not listed here, please\n"; - printf "report it.

\n", - urlsanit("http://${debbugs::gWebDomain}/Reporting${debbugs::gHTMLSuffix}"); + if (defined $maint || defined $maintenc) { + print "

If you find a bug not listed here, please\n"; + printf "report it.

\n", + urlsanit("http://${debbugs::gWebDomain}/Reporting${debbugs::gHTMLSuffix}"); + } } else { print "

There is no record of the " . (defined($pkg) ? htmlsanit($pkg) . " package" @@ -464,11 +452,13 @@ if (defined $pkg || defined $src) { set_option("archive", !$archive); printf "

See the %s reports

", - urlsanit('pkgreport.cgi?'.join(';', - map {$_ eq 'archived'?():("$_=$param{$_}") - } keys %param, - ('archived='.$archive?"yes":"no") - ) + urlsanit(pkg_url(( + map { + $_ eq 'archive'?():($_,$param{$_}) + } keys %param + ), + ('archive',($archive?"no":"yes")) + ) ), ($archive ? "active" : "archived"); set_option("archive", $archive); @@ -508,10 +498,10 @@ if (defined $pkg) { } print " \n"; -my $includetags = htmlsanit(join(" ", grep { !m/^subj:/i } split /[\s,]+/, $include)); -my $excludetags = htmlsanit(join(" ", grep { !m/^subj:/i } split /[\s,]+/, $exclude)); -my $includesubj = htmlsanit(join(" ", map { s/^subj://i; $_ } grep { m/^subj:/i } split /[\s,]+/, $include)); -my $excludesubj = htmlsanit(join(" ", map { s/^subj://i; $_ } grep { m/^subj:/i } split /[\s,]+/, $exclude)); +my $includetags = htmlsanit(join(" ", grep { !m/^subj:/i } map {split /[\s,]+/} ref($include)?@{$include}:$include)); +my $excludetags = htmlsanit(join(" ", grep { !m/^subj:/i } map {split /[\s,]+/} ref($exclude)?@{$exclude}:$exclude)); +my $includesubj = htmlsanit(join(" ", map { s/^subj://i; $_ } grep { m/^subj:/i } map {split /[\s,]+/} ref($include)?@{$include}:$include)); +my $excludesubj = htmlsanit(join(" ", map { s/^subj://i; $_ } grep { m/^subj:/i } map {split /[\s,]+/} ref($exclude)?@{$exclude}:$exclude)); my $vismindays = ($mindays == 0 ? "" : $mindays); my $vismaxdays = ($maxdays == -1 ? "" : $maxdays); @@ -606,19 +596,19 @@ sub pkg_htmlindexentrystatus { my $showversions = ''; if (@{$status{found_versions}}) { my @found = @{$status{found_versions}}; - local $_; - s{/}{ } foreach @found; - $showversions .= join ', ', map htmlsanit($_), @found; + $showversions .= join ', ', map {s{/}{ }; htmlsanit($_)} @found; } if (@{$status{fixed_versions}}) { $showversions .= '; ' if length $showversions; $showversions .= 'fixed: '; my @fixed = @{$status{fixed_versions}}; - local $_; - s{/}{ } foreach @fixed; - $showversions .= join ', ', map htmlsanit($_), @fixed; + $showversions .= join ', ', map {s{/}{ }; htmlsanit($_)} @fixed; } - $result .= " ($showversions)" if length $showversions; + $result .= ' ($showversions)} if length $showversions; $result .= ";\n"; $result .= $showseverity; @@ -638,14 +628,14 @@ sub pkg_htmlindexentrystatus { $result .= buglinklist(";\nBlocks ", ", ", split(/ /,$status{blocks})); - my $days = 0; if (length($status{done})) { $result .= "
Done: " . htmlsanit($status{done}); - $days = ceil($debbugs::gRemoveAge - -M buglog($status{id})); + my $days = bug_archiveable(bug => $status{id}, + status => \%status, + days_until => 1, + ); if ($days >= 0) { $result .= ";\nWill be archived" . ( $days == 0 ? " today" : $days == 1 ? " in $days day" : " in $days days" ) . ""; - } else { - $result .= ";\nArchived"; } } @@ -654,7 +644,7 @@ sub pkg_htmlindexentrystatus { $result .= ";\nForwarded to " . join(', ', map {maybelink($_)} - split /,\s*/,$status{forwarded} + split /[,\s]+/,$status{forwarded} ); } my $daysold = int((time - $status{date}) / 86400); # seconds to days @@ -695,7 +685,7 @@ sub pkg_htmlizebugs { my $header = ''; my $footer = "

Summary

\n"; - my @dummy = ($debbugs::gRemoveAge); #, @debbugs::gSeverityList, @debbugs::gSeverityDisplay); #, $debbugs::gHTMLExpireNote); + my @dummy = ($gRemoveAge); #, @gSeverityList, @gSeverityDisplay); #, $gHTMLExpireNote); if (@bugs == 0) { return "

No reports found!

\n"; @@ -746,12 +736,12 @@ sub pkg_htmlizebugs { push @keys_in_order, "X"; while ((my $k = shift @keys_in_order) ne "X") { for my $k2 (@{$o}) { + $k2+=0; push @keys_in_order, "${k}_${k2}"; } } } - for ( my $i = 0; $i <= $#keys_in_order; $i++ ) { - my $order = $keys_in_order[ $i ]; + for my $order (@keys_in_order) { next unless defined $section{$order}; my @ttl = split /_/, $order; shift @ttl; my $title = $title[0]->[$ttl[0]] . " bugs"; @@ -821,20 +811,7 @@ sub pkg_htmlpackagelinks { } sub pkg_htmladdresslinks { - my ($prefixfunc, $urlfunc, $addresses) = @_; - if (defined $addresses and $addresses ne '') { - my @addrs = getparsedaddrs($addresses); - my $prefix = (ref $prefixfunc) ? $prefixfunc->(scalar @addrs) - : $prefixfunc; - return $prefix . - join ', ', map { sprintf '%s', - $urlfunc->($_->address), - htmlsanit($_->format) || '(unknown)' - } @addrs; - } else { - my $prefix = (ref $prefixfunc) ? $prefixfunc->(1) : $prefixfunc; - return sprintf '%s(unknown)', $prefix, $urlfunc->(''); - } + htmlize_addresslinks(@_,'submitter'); } sub pkg_javascript { @@ -843,7 +820,7 @@ sub pkg_javascript {