X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=cgi%2Fpkgreport.cgi;h=1f2294cf8449b5f00854811687fccba6cb60cc8b;hb=fa679d62cf5562f6206cf0f09cb36a05bb3f77b0;hp=86ebba632b7d6efbd56023d1822d44dde96b8798;hpb=dd5b9b25b5b477ca1b046492f461aeb796370f31;p=debbugs.git diff --git a/cgi/pkgreport.cgi b/cgi/pkgreport.cgi index 86ebba6..1f2294c 100755 --- a/cgi/pkgreport.cgi +++ b/cgi/pkgreport.cgi @@ -3,15 +3,17 @@ 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); +use vars qw($gPackagePages $gWebDomain %gSeverityDisplay @gSeverityList); if (defined $ENV{REQUEST_METHOD} and $ENV{REQUEST_METHOD} eq 'HEAD') { print "Content-Type: text/html; charset=utf-8\n\n"; @@ -27,7 +29,18 @@ my $repeatmerged = ($param{'repeatmerged'} || "yes") eq "yes"; my $archive = ($param{'archive'} || "no") eq "yes"; my $include = $param{'&include'} || $param{'include'} || ""; my $exclude = $param{'&exclude'} || $param{'exclude'} || ""; + +my $users = $param{'users'} || ""; + +my $ordering = $param{'ordering'}; my $raw_sort = ($param{'raw'} || "no") eq "yes"; +my $old_view = ($param{'oldview'} || "no") eq "yes"; +unless (defined $ordering) { + $ordering = "normal"; + $ordering = "oldview" if $old_view; + $ordering = "raw" if $raw_sort; +} + my $bug_rev = ($param{'bug-rev'} || "no") eq "yes"; my $pend_rev = ($param{'pend-rev'} || "no") eq "yes"; my $sev_rev = ($param{'sev-rev'} || "no") eq "yes"; @@ -53,12 +66,6 @@ my $show_list_footer = ($param{'show_list_footer'} || $userAgent->{'show_list_fo } if ($vt eq "bypkg" || $vt eq "bysrc") { $dist = undef; $arch = undef; } } - if (defined $param{'ordering'}) { - my $o = $param{'ordering'}; - if ($o eq "raw") { $raw_sort = 1; $bug_rev = 0; } - if ($o eq "normal") { $raw_sort = 0; $bug_rev = 0; } - if ($o eq "reverse") { $raw_sort = 0; $bug_rev = 1; } - } if (defined $param{'includesubj'}) { my $is = $param{'includesubj'}; $include .= "," . join(",", map { "subj:$_" } (split /[\s,]+/, $is)); @@ -70,7 +77,41 @@ my $show_list_footer = ($param{'show_list_footer'} || $userAgent->{'show_list_fo } -my ($pkg, $src, $maint, $maintenc, $submitter, $severity, $status, $tag); +my %hidden = map { $_, 1 } qw(status severity classification); +my %cats = ( + "status" => [ { + "nam" => "Status", + "pri" => [map { "pending=$_" } + qw(pending forwarded pending-fixed fixed done absent)], + "ttl" => ["Outstanding","Forwarded","Pending Upload", + "Fixed in NMU","Resolved","From other Branch"], + "def" => "Unknown Pending Status", + "ord" => [0,1,2,3,4,5,6], + } ], + "severity" => [ { + "nam" => "Severity", + "pri" => [map { "severity=$_" } @gSeverityList], + "ttl" => [map { $gSeverityDisplay{$_} } @gSeverityList], + "def" => "Unknown Severity", + "ord" => [0..@gSeverityList], + } ], + "classification" => [ { + "nam" => "Classification", + "pri" => [qw(pending=pending+tag=wontfix + pending=pending+tag=moreinfo + pending=pending+tag=patch + pending=pending+tag=confirmed + pending=pending)], + "ttl" => ["Will Not Fix","More information needed", + "Patch Available","Confirmed"], + "def" => "Unclassified", + "ord" => [2,3,4,1,0,5], + } ], + "oldview" => [ qw(status severity) ], + "normal" => [ qw(status severity classification) ], +); + +my ($pkg, $src, $maint, $maintenc, $submitter, $severity, $status, $tag, $usertag); my %which = ( 'pkg' => \$pkg, @@ -80,6 +121,7 @@ my %which = ( 'submitter' => \$submitter, 'severity' => \$severity, 'tag' => \$tag, + 'usertag' => \$usertag, ); my @allowedEmpty = ( 'maint' ); @@ -113,6 +155,25 @@ if (!$found) { } 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/..../); + add_user($user); +} + +if (defined $usertag) { + my %select_ut = (); + my ($u, $t) = split /:/, $usertag, 2; + Debbugs::User::read_usertags(\%select_ut, $u); + unless (defined $t && $t ne "") { + $t = join(",", keys(%select_ut)); + } + + add_user($u); + $tag = $t; +} + my $Archived = $archive ? " Archived" : ""; my $this = ""; @@ -120,10 +181,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/; @@ -132,10 +190,6 @@ set_option("repeatmerged", $repeatmerged); set_option("archive", $archive); set_option("include", $include); set_option("exclude", $exclude); -set_option("raw", $raw_sort); -set_option("bug-rev", $bug_rev); -set_option("pend-rev", $pend_rev); -set_option("sev-rev", $sev_rev); set_option("pend-exc", $pend_exc); set_option("pend-inc", $pend_inc); set_option("sev-exc", $sev_exc); @@ -149,10 +203,38 @@ 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); +sub add_user { + my $ut = \%ut; + my $u = shift; + + my $user = Debbugs::User::get_user($u); + + my %vis = map { $_, 1 } @{$user->{"visible_cats"}}; + for my $c (keys %{$user->{"categories"}}) { + $cats{$c} = $user->{"categories"}->{$c}; + $hidden{$c} = 1 unless defined $vis{$c}; + } + + for my $t (keys %{$user->{"tags"}}) { + $ut->{$t} = [] unless defined $ut->{$t}; + push @{$ut->{$t}}, @{$user->{"tags"}->{$t}}; + } + + %bugusertags = (); + for my $t (keys %{$ut}) { + for my $b (@{$ut->{$t}}) { + $bugusertags{$b} = [] unless defined $bugusertags{$b}; + push @{$bugusertags{$b}}, $t; + } + } + set_option("bugusertags", \%bugusertags); +} + my $title; my @bugs; if (defined $pkg) { $title = "package $pkg"; + add_user("$pkg\@packages.debian.org"); if (defined $version) { $title .= " (version $version)"; } elsif (defined $dist) { @@ -161,13 +243,9 @@ 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"; set_option('arch', 'source'); if (defined $version) { @@ -177,46 +255,12 @@ 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; - })}; - } 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=>[split /,/,$maint]); } elsif (defined $maintenc) { my %maintainers = %{getmaintainers()}; $title = "encoded maintainer $maintenc"; @@ -231,15 +275,11 @@ if (defined $pkg) { return 0; })}; } elsif (defined $submitter) { + 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)}; + @bugs = get_bugs(submitter => \@submitters); } elsif (defined($severity) && defined($status)) { $title = "$status $severity bugs"; $title .= " in $dist" if defined $dist; @@ -260,11 +300,27 @@ if (defined $pkg) { $title = "bugs tagged $tag"; $title .= " in $dist" if defined $dist; my @tags = split /,/, $tag; + my %bugs = (); + for my $t (@tags) { + for my $b (@{$ut{$t}}) { + $bugs{$b} = 1; + } + } @bugs = @{getbugs(sub {my %d = @_; + return 1 if $bugs{$d{"bug"}}; my %tags = map { $_ => 1 } split ' ', $d{"tags"}; return grep(exists $tags{$_}, @tags); })}; } +$title = htmlsanit($title); + +my @names; my @prior; my @title; my @order; +determine_ordering(); + +# strip out duplicate bugs +my %bugs; +@bugs{@bugs} = @bugs; +@bugs = keys %bugs; my $result = pkg_htmlizebugs(\@bugs); @@ -272,18 +328,18 @@ print "Content-Type: text/html; charset=utf-8\n\n"; print "\n"; print "
\n" . - "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" @@ -363,9 +416,21 @@ if (defined $pkg || defined $src) { print "different addresses.\n"; } +set_option("archive", !$archive); +printf "
See the %s reports
", + urlsanit(pkg_url(( + map { + $_ eq 'archive'?():($_,$param{$_}) + } keys %param + ), + ('archive',($archive?"no":"yes")) + ) + ), ($archive ? "active" : "archived"); +set_option("archive", $archive); + print $result if $showresult; -print pkg_javascript(); +print pkg_javascript() . "\n"; print "