]> git.donarmstrong.com Git - debbugs.git/commitdiff
[project @ 2000-11-16 05:58:44 by ajt]
authorajt <>
Thu, 16 Nov 2000 13:58:44 +0000 (05:58 -0800)
committerajt <>
Thu, 16 Nov 2000 13:58:44 +0000 (05:58 -0800)
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
cgi/common.pl
cgi/pkgindex.cgi [new file with mode: 0755]
cgi/pkgreport.cgi

index 32491206437103638d4e3ec050ab099a1150378d..d363fdc0eac82e3e92ac80c525cfd617359a5859 100755 (executable)
@@ -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;
index 12371f118ff7d01eca0aa08ad647eb031de1e08f..7786b9c97f1c1e66c8a67e02c6bae256467a0dcf 100644 (file)
@@ -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(<I>) 
+    {
+        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 (executable)
index 0000000..ce7fe58
--- /dev/null
@@ -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 = "<p>Note that with multi-binary packages there may be other\n";
+  $note .= "reports filed under the different binary package names.</p>\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 = "<p>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.</p>\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 = "<p>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.</p>\n";
+}
+
+my $result = "<ul>\n";
+foreach my $x (sort keys %count) {
+  $result .= sprintf('<li><a href="pkgreport.cgi?%s=%s">%s</a> %d bugs</li>\n',
+                    $indexon, $x, $x, $count{$x});
+}
+$result .= "</ul>\n";
+
+print "Content-Type: text/html\n\n";
+
+print "<HTML><HEAD><TITLE>\n" . 
+    "$debbugs::gProject $Archived $debbugs::gBug reports by $tag\n" .
+    "</TITLE></HEAD>\n" .
+    '<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#800080">' .
+    "\n";
+print "<H1>" . "$debbugs::gProject $Archived $debbugs::gBug report logs: $tag" .
+      "</H1>\n";
+
+print $note;
+print $result;
+
+print "<hr>\n";
+print "$tail_html";
+
+print "</body></html>\n";
index 12a07421c57107293ea83955021a2d5d69f7a969..f749ee81b8ed66fce2e4cb033cdb11d11115d4b2 100755 (executable)
@@ -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);