From 34fed491ff614313ad17fb4626ae268e0e8c8921 Mon Sep 17 00:00:00 2001 From: ajt <> Date: Thu, 16 Nov 2000 05:58:44 -0800 Subject: [PATCH] [project @ 2000-11-16 05:58:44 by ajt] First pass at package/maintainer/submitter indices Moved readparse to common.pl, since it's, well, common to all the cgi stuff Moved some of the pkgreport.cgi logic from common.pl into pkgreport.cgi --- cgi/bugreport.cgi | 23 ----------- cgi/common.pl | 46 ++++++++++++++++++++- cgi/pkgindex.cgi | 103 ++++++++++++++++++++++++++++++++++++++++++++++ cgi/pkgreport.cgi | 71 ++++++++++++++------------------ 4 files changed, 178 insertions(+), 65 deletions(-) create mode 100755 cgi/pkgindex.cgi diff --git a/cgi/bugreport.cgi b/cgi/bugreport.cgi index 3249120..d363fdc 100755 --- a/cgi/bugreport.cgi +++ b/cgi/bugreport.cgi @@ -14,29 +14,6 @@ require '/etc/debbugs/text'; use vars(qw($gHTMLTail $gWebDomain)); -sub readparse { - # Parse query string. I could use CGI.pm here, but it is 6 thousand - # lines long and very expensive. I want light-weight. - my ($in, $key, $val, %ret); - if (defined $ENV{"QUERY_STRING"} && $ENV{"QUERY_STRING"} ne "") { - $in=$ENV{QUERY_STRING}; - } elsif(defined $ENV{"REQUEST_METHOD"} - && $ENV{"REQUEST_METHOD"} eq "POST") - { - read(STDIN,$in,$ENV{CONTENT_LENGTH}); - } else { - return; - } - foreach (split(/&/,$in)) { - s/\+/ /g; - ($key, $val) = split(/=/,$_,2); - $key=~s/%(..)/pack("c",hex($1))/ge; - $val=~s/%(..)/pack("c",hex($1))/ge; - $ret{$key}=$val; - } - return %ret; -} - my %param = readparse(); my $tail_html; diff --git a/cgi/common.pl b/cgi/common.pl index 12371f1..7786b9c 100644 --- a/cgi/common.pl +++ b/cgi/common.pl @@ -13,6 +13,27 @@ sub set_option { if ($opt eq "include") { %common_include = %{$val}; } } +sub readparse { + my ($in, $key, $val, %ret); + if (defined $ENV{"QUERY_STRING"} && $ENV{"QUERY_STRING"} ne "") { + $in=$ENV{QUERY_STRING}; + } elsif(defined $ENV{"REQUEST_METHOD"} + && $ENV{"REQUEST_METHOD"} eq "POST") + { + read(STDIN,$in,$ENV{CONTENT_LENGTH}); + } else { + return; + } + foreach (split(/&/,$in)) { + s/\+/ /g; + ($key, $val) = split(/=/,$_,2); + $key=~s/%(..)/pack("c",hex($1))/ge; + $val=~s/%(..)/pack("c",hex($1))/ge; + $ret{$key}=$val; + } + return %ret; +} + sub quit { my $msg = shift; print "Content-Type: text/html\n\n"; @@ -254,9 +275,9 @@ sub maintbugs { } sub maintencbugs { - my $maint = shift; + my $maintenc = shift; my %maintainers = getmaintainers(); - return getbugs(sub {my %d=@_; return maintencoded($maintainers{$d{"pkg"}} || "") eq $maint}); + return getbugs(sub {my %d=@_; return maintencoded($maintainers{$d{"pkg"}} || "") eq $maintenc}); } sub pkgbugs { @@ -264,6 +285,27 @@ sub pkgbugs { return getbugs( sub { my %d = @_; return $inpkg eq $d{"pkg"} }); } +sub countbugs { + my $bugfunc = shift; + if ($common_archive) { + open I, "<$debbugs::gSpoolDir/index.archive" or &quit("bugindex: $!"); + } else { + open I, "<$debbugs::gSpoolDir/index.db" or &quit("bugindex: $!"); + } + + my %count = (); + while() + { + if (m/^(\S+)\s+(\d+)\s+(\d+)\s+(\S+)\s+\[\s*([^]]*)\s*\]\s+(\w+)\s+(.*)$/) { + my $x = $bugfunc->(pkg => $1, bug => $2, status => $4, + submitter => $5, severity => $6, tags => $7); + $count{$x}++; + } + } + close I; + return %count; +} + sub getbugs { my $bugfunc = shift; diff --git a/cgi/pkgindex.cgi b/cgi/pkgindex.cgi new file mode 100755 index 0000000..ce7fe58 --- /dev/null +++ b/cgi/pkgindex.cgi @@ -0,0 +1,103 @@ +#!/usr/bin/perl -wT + +package debbugs; + +use strict; +use POSIX qw(strftime tzset nice); + +#require '/usr/lib/debbugs/errorlib'; +require '/usr/lib/debbugs/common.pl'; +#require '/debian/home/ajt/newajbug/common.pl'; + +require '/etc/debbugs/config'; +require '/etc/debbugs/text'; + +nice(5); + +my %param = readparse(); + +my $indexon = $param{'indexon'} || 'pkg'; +if ($indexon !~ m/^(pkg|maint|submitter)/) { + quit("You have to choose something to index on"); +} + +my $repeatmerged = ($param{'repeatmerged'} || "yes") eq "yes"; +my $archive = ($param{'archive'} || "no") eq "yes"; +#my $include = $param{'include'} || ""; +#my $exclude = $param{'exclude'} || ""; + +my $Archived = $archive ? "Archived" : ""; + +my %maintainer = &getmaintainers(); +my %strings = (); + +$ENV{"TZ"} = 'UTC'; +tzset(); + +my $dtime = strftime "%a, %e %b %Y %T UTC", localtime; +my $tail_html = $debbugs::gHTMLTail; +$tail_html = $debbugs::gHTMLTail; +$tail_html =~ s/SUBSTITUTE_DTIME/$dtime/; + +set_option("repeatmerged", $repeatmerged); +set_option("archive", $archive); +set_option("include", { map {($_,1)} (split /[\s,]+/, $include) }) + if ($include); +set_option("exclude", { map {($_,1)} (split /[\s,]+/, $exclude) }) + if ($exclude); + +my %count; +my $tag; +my $note; +if ($indexon eq "pkg") { + $tag = "package"; + %count = countbugs(sub {my %d=@_; return $d{"pkg"}}); + $note = "

Note that with multi-binary packages there may be other\n"; + $note .= "reports filed under the different binary package names.

\n"; +} elsif ($indexon eq "maint") { + $tag = "maintainer"; + %@count = countbugs(sub {my %d=@_; my $me; + $me = $maintainers{$d{"pkg"}} || ""; + $me =~ s/\s*\(.*\)\s*//; + $me = $1 if ($me =~ m/<(.*)>/); + return $me; + }); + $note = "

Note that maintainers may use different Maintainer fields for\n"; + $note .= "different packages, so there may be other reports filed under\n"; + $note .= "different addresses.

\n"; +} elsif ($indexon eq "submitter") { + $tag = "submitter"; + %count = countbugs(sub {my %d=@_; my $se; + ($se = $d{"submitter"} || "") =~ s/\s*\(.*\)\s*//; + if ($se =~ m/<(.*)>/) { $me = $1 } + return $se; + }); + $note = "

Note that people may use different email accounts for\n"; + $note .= "different bugs, so there may be other reports filed under\n"; + $note .= "different addresses.

\n"; +} + +my $result = "\n"; + +print "Content-Type: text/html\n\n"; + +print "\n" . + "$debbugs::gProject $Archived $debbugs::gBug reports by $tag\n" . + "\n" . + '' . + "\n"; +print "

" . "$debbugs::gProject $Archived $debbugs::gBug report logs: $tag" . + "

\n"; + +print $note; +print $result; + +print "
\n"; +print "$tail_html"; + +print "\n"; diff --git a/cgi/pkgreport.cgi b/cgi/pkgreport.cgi index 12a0742..f749ee8 100755 --- a/cgi/pkgreport.cgi +++ b/cgi/pkgreport.cgi @@ -14,27 +14,6 @@ require '/etc/debbugs/text'; nice(5); -sub readparse { - my ($in, $key, $val, %ret); - if (defined $ENV{"QUERY_STRING"} && $ENV{"QUERY_STRING"} ne "") { - $in=$ENV{QUERY_STRING}; - } elsif(defined $ENV{"REQUEST_METHOD"} - && $ENV{"REQUEST_METHOD"} eq "POST") - { - read(STDIN,$in,$ENV{CONTENT_LENGTH}); - } else { - return; - } - foreach (split(/&/,$in)) { - s/\+/ /g; - ($key, $val) = split(/=/,$_,2); - $key=~s/%(..)/pack("c",hex($1))/ge; - $val=~s/%(..)/pack("c",hex($1))/ge; - $ret{$key}=$val; - } - return %ret; -} - my %param = readparse(); my ($pkg, $maint, $maintenc, $submitter, $severity, $status); @@ -59,7 +38,7 @@ my $Archived = $archive ? "Archived" : ""; my $this = ""; my %indexentry; -my %maintainer = &getmaintainers(); +my %maintainers = getmaintainers(); my %strings = (); $ENV{"TZ"} = 'UTC'; @@ -70,19 +49,6 @@ my $tail_html = $debbugs::gHTMLTail; $tail_html = $debbugs::gHTMLTail; $tail_html =~ s/SUBSTITUTE_DTIME/$dtime/; -my $tag; -if (defined $pkg) { - $tag = "package $pkg"; -} elsif (defined $maint) { - $tag = "maintainer $maint"; -} elsif (defined $maintenc) { - $tag = "encoded maintainer $maintenc"; -} elsif (defined $submitter) { - $tag = "submitter $submitter"; -} elsif (defined $severity) { - $tag = "$status $severity bugs"; -} - set_option("repeatmerged", $repeatmerged); set_option("archive", $archive); set_option("include", { map {($_,1)} (split /[\s,]+/, $include) }) @@ -90,17 +56,42 @@ set_option("include", { map {($_,1)} (split /[\s,]+/, $include) }) set_option("exclude", { map {($_,1)} (split /[\s,]+/, $exclude) }) if ($exclude); +my $tag; my @bugs; if (defined $pkg) { - @bugs = pkgbugs($pkg); + $tag = "package $pkg"; + #@bugs = pkgbugs($pkg); + @bugs = getbugs(sub {my %d=@_; return $pkg eq $d{"pkg"}}); } elsif (defined $maint) { - @bugs = maintbugs($maint); + $tag = "maintainer $maint"; + #@bugs = maintbugs($maint); + @bugs = getbugs(sub {my %d=@_; my $me; + ($me = $maintainers{$d{"pkg"}}||"") =~ s/\s*\(.*\)\s*//; + if ($me =~ m/<(.*)>/) { $me = $1 } + return $me eq $maint; + }) } elsif (defined $maintenc) { - @bugs = maintencbugs($maintenc); + $tag = "encoded maintainer $maintenc"; + #@bugs = maintencbugs($maintenc); + @bugs = getbugs(sub {my %d=@_; + return maintencoded($maintainers{$d{"pkg"}} || "") + eq $maintenc + }); } elsif (defined $submitter) { - @bugs = submitterbugs($submitter); + $tag = "submitter $submitter"; + #@bugs = submitterbugs($submitter); + @bugs = getbugs(sub {my %d=@_; my $se; + ($se = $d{"submitter"} || "") =~ s/\s*\(.*\)\s*//; + if ($se =~ m/<(.*)>/) { $me = $1 } + return $se eq $submitter; + }); } elsif (defined $severity) { - @bugs = severitybugs($status, $severity); + $tag = "$status $severity bugs"; + #@bugs = severitybugs($status, $severity); + @bugs = getbugs(sub {my %d=@_; + return ($d{"severity"} eq $severity) + && ($d{"status"} eq $status); + }); } my $result = htmlizebugs(@bugs); -- 2.39.2