use vars qw($gPackagePages $gWebDomain);
-if ($ENV{REQUEST_METHOD} eq 'HEAD') {
- print "Content-Type: text/html\n\n";
+if (defined $ENV{REQUEST_METHOD} and $ENV{REQUEST_METHOD} eq 'HEAD') {
+ print "Content-Type: text/html; charset=utf-8\n\n";
exit 0;
}
nice(5);
+my $userAgent = detect_user_agent();
my %param = readparse();
my $repeatmerged = ($param{'repeatmerged'} || "yes") eq "yes";
my $pend_inc = $param{'&pend-inc'} || $param{'pend-inc'} || "";
my $sev_exc = $param{'&sev-exc'} || $param{'sev-exc'} || "";
my $sev_inc = $param{'&sev-inc'} || $param{'sev-inc'} || "";
+my $version = $param{'version'} || undef;
+my $dist = $param{'dist'} || undef;
+my $arch = $param{'arch'} || undef;
+my $show_list_header = ($param{'show_list_header'} || $userAgent->{'show_list_header'} || "yes" ) eq "yes";
+my $show_list_footer = ($param{'show_list_footer'} || $userAgent->{'show_list_footer'} || "yes" ) eq "yes";
my ($pkg, $src, $maint, $maintenc, $submitter, $severity, $status, $tag);
set_option("pend-inc", $pend_inc);
set_option("sev-exc", $sev_exc);
set_option("sev-inc", $sev_inc);
+set_option("version", $version);
+set_option("dist", $dist);
+set_option("arch", $arch);
+set_option("use-bug-idx", defined($param{'use-bug-idx'}) ? $param{'use-bug-idx'} : 0);
+set_option("show_list_header", $show_list_header);
+set_option("show_list_footer", $show_list_footer);
my $title;
my @bugs;
if (defined $pkg) {
$title = "package $pkg";
+ if (defined $version) {
+ $title .= " (version $version)";
+ } elsif (defined $dist) {
+ $title .= " in $dist";
+ my $verdesc = getversiondesc($pkg);
+ $title .= " ($verdesc)" if defined $verdesc;
+ }
+ my @pkgs = split /,/, $pkg;
@bugs = @{getbugs(sub {my %d=@_;
- return grep($pkg eq $_, splitpackages($d{"pkg"}))
- }, 'package', $pkg)};
+ foreach my $try (splitpackages($d{"pkg"})) {
+ return 1 if grep($try eq $_, @pkgs);
+ }
+ return 0;
+ }, 'package', @pkgs)};
} elsif (defined $src) {
$title = "source $src";
- my @pkgs = getsrcpkgs($src);
- push @pkgs, $src if ( !grep(/^\Q$src\E$/, @pkgs) );
+ set_option('arch', 'source');
+ if (defined $version) {
+ $title .= " (version $version)";
+ } elsif (defined $dist) {
+ $title .= " in $dist";
+ 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);
} elsif (defined $maint) {
my %maintainers = %{getmaintainers()};
$title = "maintainer $maint";
+ $title .= " in $dist" if defined $dist;
if ($maint eq "") {
- @bugs = @{getbugs(sub {my %d=@_; my $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 1 if !getparsedaddrs($maintainers{$try});
}
return 0;
})};
} else {
+ my @maints = split /,/, $maint;
my @pkgs = ();
- foreach my $p (keys %maintainers) {
- my @me = getparsedaddrs($maintainers{$p});
- push @pkgs, $p if grep { $_->address eq $maint } @me;
+ 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=@_; my $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;
} elsif (defined $maintenc) {
my %maintainers = %{getmaintainers()};
$title = "encoded maintainer $maintenc";
+ $title .= " in $dist" if defined $dist;
@bugs = @{getbugs(sub {my %d=@_;
foreach my $try (splitpackages($d{"pkg"})) {
my @me = getparsedaddrs($maintainers{$try});
})};
} elsif (defined $submitter) {
$title = "submitter $submitter";
- @bugs = @{getbugs(sub {my %d=@_; my $se;
- ($se = $d{"submitter"} || "") =~ s/\s*\(.*\)\s*//;
- $se = $1 if ($se =~ m/<(.*)>/);
- return $se eq $submitter;
- }, 'submitter-email', $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)};
} elsif (defined($severity) && defined($status)) {
$title = "$status $severity bugs";
+ $title .= " in $dist" if defined $dist;
+ my @severities = split /,/, $severity;
+ my @statuses = split /,/, $status;
@bugs = @{getbugs(sub {my %d=@_;
- return ($d{"severity"} eq $severity)
- && ($d{"status"} eq $status);
+ return (grep($d{"severity"} eq $_, @severities))
+ && (grep($d{"status"} eq $_, @statuses));
})};
} elsif (defined($severity)) {
$title = "$severity bugs";
+ $title .= " in $dist" if defined $dist;
+ my @severities = split /,/, $severity;
@bugs = @{getbugs(sub {my %d=@_;
- return ($d{"severity"} eq $severity);
- }, 'severity', $severity)};
+ return (grep($d{"severity"} eq $_, @severities));
+ }, 'severity', @severities)};
} elsif (defined($tag)) {
$title = "bugs tagged $tag";
+ $title .= " in $dist" if defined $dist;
+ my @tags = split /,/, $tag;
@bugs = @{getbugs(sub {my %d = @_;
my %tags = map { $_ => 1 } split ' ', $d{"tags"};
- return exists $tags{$tag};
+ return grep(exists $tags{$_}, @tags);
})};
}
my $result = htmlizebugs(\@bugs);
-print "Content-Type: text/html\n\n";
+print "Content-Type: text/html; charset=utf-8\n\n";
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
print "<HTML><HEAD>\n" .
my $showresult = 1;
if (defined $pkg || defined $src) {
+ my $showpkg = (defined $pkg) ? $pkg : "source package $src";
my %maintainers = %{getmaintainers()};
my $maint = $pkg ? $maintainers{$pkg} : $maintainers{$src} ? $maintainers{$src} : undef;
if (defined $maint) {
print '<p>';
- my $showpkg = (defined $pkg) ? $pkg : "source package $src";
print htmlmaintlinks(sub { $_[0] == 1 ? "Maintainer for $showpkg is "
: "Maintainers for $showpkg are "
},
$maint);
print ".</p>\n";
+ } else {
+ print "<p>No maintainer for $showpkg. Please do not report new bugs against this package.</p>\n";
}
if (defined $maint or @bugs) {
my %pkgsrc = %{getpkgsrc()};
print join( ", ", map( "<A href=\"" . pkgurl($_) . "\">$_</A>", @pkgs ) );
print ".\n";
}
- if ($pkg) {
- my @references;
- my $pseudodesc = getpseudodesc();
- if (defined($pseudodesc) and exists($pseudodesc->{$pkg})) {
- push @references, "to the <a href=\"http://${debbugs::gWebDomain}/pseudo-packages${debbugs::gHTMLSuffix}\">list of other pseudo-packages</a>";
- } else {
+ my @references;
+ my $pseudodesc = getpseudodesc();
+ if ($pkg and defined($pseudodesc) and exists($pseudodesc->{$pkg})) {
+ push @references, "to the <a href=\"http://${debbugs::gWebDomain}/pseudo-packages${debbugs::gHTMLSuffix}\">list of other pseudo-packages</a>";
+ } else {
+ if ($pkg and defined $debbugs::gPackagePages) {
push @references, sprintf "to the <a href=\"%s\">%s package page</a>", urlsanit("http://${debbugs::gPackagePages}/$pkg"), htmlsanit("$pkg");
}
- if ($srcforpkg) {
- if (defined $debbugs::gSubscriptionDomain) {
- push @references, "to the <a href=\"http://$debbugs::gSubscriptionDomain/$srcforpkg\">Package Tracking System</a>";
- }
- # Only output this if the source listing is non-trivial.
- if (@pkgs or $pkg ne $srcforpkg) {
- push @references, sprintf "to the source package <a href=\"%s\">%s</a>'s bug page", srcurl($srcforpkg), htmlsanit($srcforpkg);
- }
+ if (defined $debbugs::gSubscriptionDomain) {
+ my $ptslink = $pkg ? $srcforpkg : $src;
+ push @references, "to the <a href=\"http://$debbugs::gSubscriptionDomain/$ptslink\">Package Tracking System</a>";
}
- if (@references) {
- $references[$#references] = "or $references[$#references]" if @references > 1;
- print "<p>You might like to refer ", join(", ", @references), ".</p>\n";
+ # Only output this if the source listing is non-trivial.
+ if ($pkg and $srcforpkg and (@pkgs or $pkg ne $srcforpkg)) {
+ push @references, sprintf "to the source package <a href=\"%s\">%s</a>'s bug page", srcurl($srcforpkg), htmlsanit($srcforpkg);
}
}
+ if ($pkg) {
+ set_option("archive", !$archive);
+ push @references, sprintf "to the <a href=\"%s\">%s reports for %s</a>", pkgurl($pkg), ($archive ? "active" : "archived"), htmlsanit($pkg);
+ set_option("archive", $archive);
+ }
+ if (@references) {
+ $references[$#references] = "or $references[$#references]" if @references > 1;
+ print "<p>You might like to refer ", join(", ", @references), ".</p>\n";
+ }
print "<p>If you find a bug not listed here, please\n";
printf "<a href=\"%s\">report it</a>.</p>\n",
urlsanit("http://${debbugs::gWebDomain}/Reporting${debbugs::gHTMLSuffix}");