#!/usr/bin/perl
-# $Id: db2html.in,v 1.9 2002/09/25 16:16:55 doogie Exp $
+# $Id: db2html.in,v 1.22 2004/04/19 10:03:53 cjwatson Exp $
# usage: db2html [-diff] [-stampfile=<stampfile>] [-lastrun=<days>] <wwwbase>
#load the necessary libraries/configuration
-$config_path = '/org/bugs.debian.org/etc';
-$lib_path = '/org/bugs.debian.org/scripts';
+$config_path = '/etc/debbugs';
+$lib_path = '/usr/lib/debbugs';
require("$config_path/config");
require("$config_path/text");
require("$lib_path/errorlib");
$ENV{'PATH'} = $lib_path.':'.$ENV{'PATH'};
+use POSIX qw(strftime tzset);
+$ENV{"TZ"} = 'UTC';
+tzset();
+
#set current working directory
chdir("$gSpoolDir") || die "chdir spool: $!\n";
$diff = 0;
$stampfile = 'stamp.html';
$tail_html = $gHTMLTail;
-$expirynote_html = $gHTMLExpireNote;
+$expirynote_html = '';
+$expirynote_html = $gHTMLExpireNote if $gRemoveAge;
$shorthead = ' Ref * Package Keywords/Subject Submitter';
$shortindex = '';
$amonths = -1;
'forwarded','forwarded to upstream software authors');
#set timestamp for html files
-chop($dtime=`date -u '+%H:%M:%S GMT %a %d %h'`); $? and die $?;
+$dtime = strftime "%a, %e %b %Y %T UTC", localtime;
$tail_html =~ s/SUBSTITUTE_DTIME/$dtime/;
#check for commandline switches
}
#only process file if greater than last run...
-if (defined($lastrun) && -M "db" > $lastrun)
+if (defined($lastrun) && -M "db-h" > $lastrun)
{ $_= $gHTMLStamp;
s/SUBSTITUTE_DTIME/$dtime/o;
s/\<\!\-\-updateupdate\-\-\>.*\<\!\-\-\/updateupdate\-\-\>/check/;
close(MM);
#load all database files
-opendir(D,'db') || &quit("opendir db: $!");
-@files= sort { $a <=> $b } readdir(D);
+opendir(D,'db-h') || &quit("opendir db-h: $!");
+@dirs = grep(s#^#db-h/#,grep(/^\d+$/,readdir(D)));
closedir(D);
+foreach my $dir (@dirs) {
+ opendir(D,$dir);
+ push @files, grep(/^-?\d+\.log$/,readdir(D));
+ closedir(D);
+}
+@files = sort { $a <=> $b } @files;
for $pending (qw(pending done forwarded))
{ for $severity (@showseverities)
"sent to <code>request@$gEmailDomain</code> (all of which".
"produce replies).\n";
$indexlink= "Messages not matched to a specific $gBug report - $week";
- $s_subject= '';
+ $data->{subject}= '';
$indexentry= '';
undef $tpack;
undef $tmaint;
$indexpart= 'unmatched';
} else
{
- my $hash = get_hashname($ref);
- open(S,"db-h/$hash/$ref.status") || &quit("open db-h/$hash/$ref.status: $!");
- chomp($s_originator= <S>);
- chomp($s_date= <S>);
- chomp($s_subject= <S>);
- chomp($s_msgid= <S>);
- chomp($s_package= <S>);
- chomp($s_keywords= <S>);
- chomp($s_done= <S>);
- chomp($s_forwarded= <S>);
- chomp($s_mergedwith= <S>);
- chomp($s_severity= <S>);
- $_= $s_package; y/A-Z/a-z/; $_= $` if m/[^-+._a-z0-9()]/;
+ $data=readbug($ref);
+ $_= $data->{package}; y/A-Z/a-z/; $_= $` if m/[^-+._a-z0-9()]/;
$tpack= $_;
- if ($s_severity eq '' || $s_severity eq 'normal')
+ if ($data->{severity} eq '' || $data->{severity} eq 'normal')
{ $showseverity= '';
$addseverity= $gDefaultSeverity;
- } elsif (grep($s_severity eq $_, @strongseverities))
- { $showseverity= "<strong>Severity: $s_severity</strong>;\n";
- $addseverity= $s_severity;
+ } elsif (isstrongseverity($data->{severity}))
+ { $showseverity= "<strong>Severity: $data->{severity}</strong>;\n";
+ $addseverity= $data->{severity};
} else
- { $showseverity= "Severity: <em>$s_severity</em>;\n";
- $addseverity= $s_severity;
+ { $showseverity= "Severity: <em>$data->{severity}</em>;\n";
+ $addseverity= $data->{severity};
}
- $days= int(($startdate - $s_date)/86400); close(S);
- $indexlink= "#$ref: ".&sani($s_subject);
+ $days= int(($startdate - $data->{date})/86400); close(S);
+ $indexlink= "#$ref: ".&sani($data->{subject});
$indexentry= '';
$packfile= length($tpack) ? "pa/l$tpack.html" : "pa/none.html";
$indexentry .= "Package: <A href=\"../$packfile\"><strong>".
- &sani($s_package)."</strong></A>;\n"
- if length($s_package);
+ &sani($data->{package})."</strong></A>;\n"
+ if length($data->{package});
$indexentry .= $showseverity;
- $indexentry .= "Reported by: ".&sani($s_originator);
- $indexentry .= ";\nKeywords: ".&sani($s_keywords)
- if length($s_keywords);
+ $indexentry .= "Reported by: ".&sani($data->{originator});
+ $indexentry .= ";\nOwned by: ".&sani($data->{owner})
+ if length($data->{owner});
+ $indexentry .= ";\nKeywords: ".&sani($data->{keywords})
+ if length($data->{keywords});
$linkto= $ref; $linkto =~ s,^..,$&/$&,;
- @merged= split(/ /,$s_mergedwith);
+ @merged= split(/ /,$data->{mergedwith});
if (@merged)
{ $mseparator= ";\nmerged with ";
for $m (@merged)
}
}
$daysold=$submitted='';
- if (length($s_done))
- { $indexentry .= ";\n<strong>Done:</strong> ".&sani($s_done);
+ if (length($data->{done}))
+ { $indexentry .= ";\n<strong>Done:</strong> ".&sani($data->{done});
$indexpart= "done$addseverity";
- } elsif (length($s_forwarded))
- { $indexentry .= ";\n<strong>Forwarded</strong> to ".&sani($s_forwarded);
+ } elsif (length($data->{forwarded}))
+ { $indexentry .= ";\n<strong>Forwarded</strong> to ".&sani($data->{forwarded});
$indexpart= "forwarded$addseverity";
} else
{ $cmonths= int($days/30);
($pad>0 ? ' 'x$pad : '').
sprintf("<A href=\"../%s.html\">%d</A>",$linkto,$ref).
&sani(sprintf(" %-1.1s %-10.10s %-35.35s %-.25s\n",
- $s_severity,
- $s_package,
- (length($s_keywords) ? $s_keywords.'/' : '').
- $s_subject, $s_originator));
+ $data->{severity},
+ $data->{package},
+ (length($data->{keywords}) ? $data->{keywords}.'/' : '').
+ $data->{subject}, $data->{originator}));
$shortindex.= $thissient;
- $sient{"$ref $s_package"}= $thissient;
+ $sient{"$ref $data->{package}"}= $thissient;
if ($days >= 7)
{ $font= $days <= 30 ? '' :
$days <= 60 ? 'em' :
$font= length($font) ? "<$font>" : '';
$daysold= "; $font$days days old$efont";
}
- if ($preserveonly) { $submitted= 'THIS IS A BUG IN THE BUG PROCESSOR'; }
- else
- { $submitted= `TZ=GMT LANG=C \\
- date -d '1 Jan 1970 00:00:00 + $s_date seconds' \\
- '+ %a, %d %b %Y %T %Z'`;
- $? and die $?;
+ if ($preserveonly) {
+ $submitted = 'THIS IS A BUG IN THE BUG PROCESSOR';
+ } else {
+ $submitted = strftime "%a, %e %b %Y %T %Z", localtime($data->{date});
}
- $submitted =~ s/\n$//; $submitted =~ s/, 0/, /g;
$submitted= "; dated $submitted";
$indexpart= "pending$addseverity";
}
eval("\$iiindex$indexpart = \$indexadd.\$iiindex$indexpart; 1;") ||
&quit("eval add to \$iiindex$indexpart failed: $@");
if (defined($tmaint))
- { $countpermaint{$tmaint} += length($s_done) ? 0 : length($s_forwarded) ? 0 : 1;
+ { $countpermaint{$tmaint} += length($data->{done}) ? 0 : length($data->{forwarded}) ? 0 : 1;
eval("\$permaint${indexpart}{\$tmaint} .= \$indexadd; 1;") ||
&quit("eval add to \$permaint${indexpart}{\$tmaint} failed: $@");
}
if (defined($tpack))
- { $countperpack{$tpack} += length($s_done) ? 0 : length($s_forwarded) ? 0 : 1;
+ { $countperpack{$tpack} += length($data->{done}) ? 0 : length($data->{forwarded}) ? 0 : 1;
eval("\$perpack${indexpart}{\$tpack} .= \$indexadd; 1;") ||
&quit("eval add to \$perpack${indexpart}{\$tpack} failed: $@");
}
} elsif ($normstate eq 'html') {
$this .= $_;
} elsif ($normstate eq 'go') {
+ s/^\030//;
$this .= &sani($_);
} elsif ($normstate eq 'go-nox') {
next if !s/^X//;
"$short</title>\n".
"<link rev=\"made\" href=\"mailto:$gMaintainerEmail\">\n".
"</head>$gHTMLStart<h1>$gProject $gBug report logs - $short<br>\n".
- &sani($s_subject)."</h1>".
+ &sani($data->{subject})."</h1>".
"$descriptivehead\n".
"\n<hr>\n".
$log.
"</head>$gHTMLStart<h1>$who_html $gBug reports: $headstring</h1>\n".
$otherindex_html.
($pending eq 'done' ? "<P>\n$expirynote_html" : '').
- "<hr>\n".
+ "<hr>\n<ul>\n".
$$value.
- "<hr>\n".
+ "</ul>\n<hr>\n".
$tail_html."</body></html>\n");
}
}