From: cjwatson <>
Date: Thu, 26 Jun 2003 00:51:51 +0000 (-0800)
Subject: [project @ 2003-06-25 17:51:51 by cjwatson]
X-Git-Tag: release/2.6.0~856
X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=30477d1013d3a142bfcca88a2000d5d59846b89b;p=debbugs.git
[project @ 2003-06-25 17:51:51 by cjwatson]
CGI scripts now support multiple maintainers for a single package. I'm not
entirely sure about the htmlmaintlinks() interface, but by and large it
seems to work.
---
diff --git a/cgi/bugreport.cgi b/cgi/bugreport.cgi
index 22b0dac..bd5c5a6 100755
--- a/cgi/bugreport.cgi
+++ b/cgi/bugreport.cgi
@@ -211,8 +211,10 @@ foreach my $pkg (@tpacks) {
my $tmaint = defined($maintainer{$pkg}) ? $maintainer{$pkg} : '(unknown)';
my $tsrc = defined($pkgsrc{$pkg}) ? $pkgsrc{$pkg} : '(unknown)';
- $descriptivehead .= "Maintainer for $pkg is\n".
- ''.htmlsanit($tmaint).'';
+ $descriptivehead .=
+ htmlmaintlinks(sub { $_[0] == 1 ? "Maintainer for $pkg is\n"
+ : "Maintainers for $pkg are\n" },
+ $tmaint);
$descriptivehead .= ";\nSource for $pkg is\n".
'$tsrc" if ($tsrc ne "(unknown)");
$descriptivehead .= ".\n
";
diff --git a/cgi/common.pl b/cgi/common.pl
index e42f6e0..ed9728e 100644
--- a/cgi/common.pl
+++ b/cgi/common.pl
@@ -2,6 +2,7 @@
use DB_File;
use Fcntl qw/O_RDONLY/;
+use Mail::Address;
$config_path = '/etc/debbugs';
$lib_path = '/usr/lib/debbugs';
require "$lib_path/errorlib";
@@ -132,6 +133,15 @@ sub splitpackages {
return map lc, split /[ \t?,()]+/, $pkgs;
}
+my %_parsedaddrs;
+sub getparsedaddrs {
+ my $addr = shift;
+ return () unless defined $addr;
+ return @{$_parsedaddrs{$addr}} if exists $_parsedaddrs{$addr};
+ @{$_parsedaddrs{$addr}} = Mail::Address->parse($addr);
+ return @{$_parsedaddrs{$addr}};
+}
+
# Generate a comma-separated list of HTML links to each package given in
# $pkgs. $pkgs may be empty, in which case an empty string is returned, or
# it may be a comma-separated list of package names.
@@ -153,6 +163,25 @@ sub htmlpackagelinks {
) . ";\n";
}
+# Generate a comma-separated list of HTML links to each maintainer given in
+# $maints, which should be a comma-separated list of RFC822 addresses.
+sub htmlmaintlinks {
+ my ($prefixfunc, $maints) = @_;
+ if (defined $maints and $maints ne '') {
+ my @maintaddrs = getparsedaddrs($maints);
+ my $prefix = (ref $prefixfunc) ? $prefixfunc->(scalar @maintaddrs)
+ : $prefixfunc;
+ return $prefix .
+ join ', ', map { sprintf '%s',
+ mainturl($_->address),
+ htmlsanit($_->format) || '(unknown)'
+ } @maintaddrs;
+ } else {
+ my $prefix = (ref $prefixfunc) ? $prefixfunc->(1) : $prefixfunc;
+ return sprintf '%s(unknown)', $prefix, mainturl('');
+ }
+}
+
sub htmlindexentry {
my $ref = shift;
my %status = %{getbugstatus($ref)};
diff --git a/cgi/pkgindex.cgi b/cgi/pkgindex.cgi
index dc0af76..a2c73e5 100755
--- a/cgi/pkgindex.cgi
+++ b/cgi/pkgindex.cgi
@@ -62,12 +62,12 @@ if ($indexon eq "pkg") {
$note .= "reports filed under the different binary package names.
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"; - my %email2maint = (); - for my $x (values %maintainers) { - my $y = emailfromrfc822($x); - $email2maint{$y} = $x unless (defined $email2maint{$y}); - } foreach my $maint (keys %count) { $sortkey{$maint} = lc $email2maint{$maint} || "(unknown)"; - $htmldescrip{$maint} = sprintf('%s', - mainturl($maint), - htmlsanit($email2maint{$maint}) || "(unknown)") + $htmldescrip{$maint} = htmlmaintlinks('', $email2maint{$maint}); } } elsif ($indexon eq "submitter") { $tag = "submitter"; diff --git a/cgi/pkgreport.cgi b/cgi/pkgreport.cgi index 9440dd3..8456a26 100755 --- a/cgi/pkgreport.cgi +++ b/cgi/pkgreport.cgi @@ -126,30 +126,24 @@ if (defined $pkg) { } elsif (defined $maint) { my %maintainers = %{getmaintainers()}; $title = "maintainer $maint"; - my @pkgs = (); - foreach my $p (keys %maintainers) { - my $me = $maintainers{$p}; - $me =~ s/\s*\(.*\)\s*//; - $me = $1 if ($me =~ m/<(.*)>/); - push @pkgs, $p if ($me eq $maint); - } if ($maint eq "") { @bugs = @{getbugs(sub {my %d=@_; my $me; foreach my $try (splitpackages($d{"pkg"})) { - ($me = $maintainers{$try} || "") - =~ s/\s*\(.*\)\s*//; - $me = $1 if ($me =~ m/<(.*)>/); - return 1 if $me eq $maint; + my @me = getparsedaddrs($maintainers{$try}); + return 1 if grep { $_->address eq $maint } @me; } return 0; })}; } else { + my @pkgs = (); + foreach my $p (keys %maintainers) { + my @me = getparsedaddrs($maintainers{$p}); + push @pkgs, $p if grep { $_->address eq $maint } @me; + } @bugs = @{getbugs(sub {my %d=@_; my $me; foreach my $try (splitpackages($d{"pkg"})) { - ($me = $maintainers{$try} || "") - =~ s/\s*\(.*\)\s*//; - $me = $1 if ($me =~ m/<(.*)>/); - return 1 if $me eq $maint; + my @me = getparsedaddrs($maintainers{$try}); + return 1 if grep { $_->address eq $maint } @me; } return 0; }, 'package', @pkgs)}; @@ -159,9 +153,10 @@ if (defined $pkg) { $title = "encoded maintainer $maintenc"; @bugs = @{getbugs(sub {my %d=@_; foreach my $try (splitpackages($d{"pkg"})) { - return 1 if - maintencoded($maintainers{$try} || "") eq - $maintenc; + my @me = getparsedaddrs($maintainers{$try}); + return 1 if grep { + maintencoded($_->address) eq $maintenc + } @me; } return 0; })}; @@ -210,9 +205,13 @@ if (defined $pkg || defined $src) { my %maintainers = %{getmaintainers()}; my $maint = $pkg ? $maintainers{$pkg} : $maintainers{$src} ? $maintainers{$src} : undef; if (defined $maint) { - print "Maintainer for " . ( defined($pkg) ? $pkg : "source package $src" ) . " is " - . htmlsanit($maint) . ".
\n"; + print ''; + my $showpkg = (defined $pkg) ? $pkg : "source package $src"; + print htmlmaintlinks(sub { $_[0] == 1 ? "Maintainer for $showpkg is " + : "Maintainers for $showpkg are " + }, + $maint); + print ".
\n"; } if (defined $maint or @bugs) { my %pkgsrc = %{getpkgsrc()}; diff --git a/debian/changelog b/debian/changelog index bf12134..4b695f5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,6 +2,7 @@ debbugs (2.4.2) UNRELEASED; urgency=low * Colin Watson: - Add (slightly) fancy CGI decoding of message/* MIME types. + - CGI scripts now support multiple maintainers for a single package. -- Colin Watson