use DB_File;
use Fcntl qw/O_RDONLY/;
+use Mail::Address;
$config_path = '/etc/debbugs';
$lib_path = '/usr/lib/debbugs';
require "$lib_path/errorlib";
sub splitpackages {
my $pkgs = shift;
return unless defined $pkgs;
- return split /[ \t?,()]+/, $pkgs;
+ 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
) . ";\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 '<a href="%s">%s</a>',
+ mainturl($_->address),
+ htmlsanit($_->format) || '(unknown)'
+ } @maintaddrs;
+ } else {
+ my $prefix = (ref $prefixfunc) ? $prefixfunc->(1) : $prefixfunc;
+ return sprintf '%s<a href="%s">(unknown)</a>', $prefix, mainturl('');
+ }
+}
+
sub htmlindexentry {
my $ref = shift;
my %status = %{getbugstatus($ref)};
$filename = $1 if ($val =~ /^filename=(.*)$/);
}
$params .= "&archive=yes" if ($common_archive);
+ my $pathinfo = '';
+ $pathinfo = "/$filename" if $filename ne '';
- return urlsanit("bugreport.cgi/$filename?$params");
+ return urlsanit("bugreport.cgi$pathinfo?$params");
}
sub mboxurl {
}
sub allbugs {
- my @bugs = ();
-
- opendir(D, "$debbugs::gSpoolDir/db") or &quitcgi("opendir db: $!");
- @bugs = sort {$a<=>$b} grep s/\.status$//,
- (grep m/^[0-9]+\.status$/,
- (readdir(D)));
- closedir(D);
-
- return @bugs;
+ return @{getbugs(sub { 1 })};
}
sub htmlizebugs {
sub countbugs {
my $bugfunc = shift;
if ($common_archive) {
- open I, "<$debbugs::gSpoolDir/index.archive" or &quitcgi("bugindex: $!");
+ open I, "<$debbugs::gSpoolDir/index.archive"
+ or &quitcgi("$debbugs::gSpoolDir/index.archive: $!");
} else {
- open I, "<$debbugs::gSpoolDir/index.db" or &quitcgi("bugindex: $!");
+ open I, "<$debbugs::gSpoolDir/index.db"
+ or &quitcgi("$debbugs::gSpoolDir/index.db: $!");
}
my %count = ();
} else {
if ( $common_archive ) {
open I, "<$debbugs::gSpoolDir/index.archive"
- or &quitcgi("bugindex: $!");
+ or &quitcgi("$debbugs::gSpoolDir/index.archive: $!");
} else {
open I, "<$debbugs::gSpoolDir/index.db"
- or &quitcgi("bugindex: $!");
+ or &quitcgi("$debbugs::gSpoolDir/index.db: $!");
}
while(<I>) {
if (m/^(\S+)\s+(\d+)\s+(\d+)\s+(\S+)\s+\[\s*([^]]*)\s*\]\s+(\w+)\s+(.*)$/) {
$maintainer{$a}= $b;
}
close(MM);
- open(MM,"$gMaintainerFileOverride") or &quitcgi("open $gMaintainerFileOverride: $!");
- while(<MM>) {
- next unless m/^(\S+)\s+(\S.*\S)\s*$/;
- ($a,$b)=($1,$2);
- $a =~ y/A-Z/a-z/;
- $maintainer{$a}= $b;
+ if (defined $gMaintainerFileOverride) {
+ open(MM,"$gMaintainerFileOverride") or &quitcgi("open $gMaintainerFileOverride: $!");
+ while(<MM>) {
+ next unless m/^(\S+)\s+(\S.*\S)\s*$/;
+ ($a,$b)=($1,$2);
+ $a =~ y/A-Z/a-z/;
+ $maintainer{$a}= $b;
+ }
+ close(MM);
}
- close(MM);
$_maintainer = \%maintainer;
return $_maintainer;
}
my $_pkgcomponent;
sub getpkgsrc {
return $_pkgsrc if $_pkgsrc;
+ return {} unless defined $gPackageSource;
my %pkgsrc;
my %pkgcomponent;
sub buglog {
my $bugnum = shift;
-
- my $dir = getlocationpath( getbuglocation( $bugnum, "log" ) );
- my $hash = get_hashname( $bugnum );
- return "" if ( !$dir );
- return "$dir/$hash/$bugnum.log";
+ my $location = getbuglocation($bugnum, 'log');
+ return getbugcomponent($bugnum, 'log', $location);
}
1;