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.

\n"; foreach my $pkg (keys %count) { $sortkey{$pkg} = lc $pkg; - $htmldescrip{$pkg} = sprintf('%s ' - . '(maintainer: %s)', + $htmldescrip{$pkg} = sprintf('%s (%s)', pkgurl($pkg), htmlsanit($pkg), - mainturl($maintainers{$pkg}), - htmlsanit($maintainers{$pkg} || "(unknown)")); + htmlmaintlinks(sub { $_[0] == 1 ? 'maintainer: ' + : 'maintainers: ' }, + $maintainers{$pkg})); } } elsif ($indexon eq "src") { $tag = "source package"; @@ -80,33 +80,32 @@ if ($indexon eq "pkg") { $note = ""; foreach my $src (keys %count) { $sortkey{$src} = lc $src; - $htmldescrip{$src} = sprintf('%s ' - . '(maintainer: %s)', + $htmldescrip{$src} = sprintf('%s (%s)', srcurl($src), htmlsanit($src), - mainturl($maintainers{$src}), - htmlsanit($maintainers{$src} || "(unknown)")); + htmlmaintlinks(sub { $_[0] == 1 ? 'maintainer: ' + : 'maintainers: ' }, + $maintainers{$src})); } } elsif ($indexon eq "maint") { $tag = "maintainer"; - %count = countbugs(sub {my %d=@_; + my %email2maint = (); + %count = countbugs(sub {my %d=@_; return map { - emailfromrfc822($maintainers{$_}) || () + my @me = getparsedaddrs($maintainers{$_}); + foreach my $addr (@me) { + $email2maint{$addr->address} = $addr->format + unless exists $email2maint{$addr->address}; + } + map { $_->address } @me; } splitpackages($d{"pkg"}); - }); + }); $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"; - 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 Fri, 20 Jun 2003 18:57:25 +0100