#!/usr/bin/perl
-# $Id: db2html.in,v 1.4 1999/09/18 14:53:02 gecko 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
-require('/etc/debbugs/config');
-require('/etc/debbugs/text');
-require('/usr/lib/debbugs/errorlib');
-$ENV{'PATH'}= '/usr/lib/debbugs'.$ENV{'PATH'};
+$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)
#)
# unless $ref =~ m/^-/ || $ref =~ m/^124/;
&filelock("lock/$ref");
- $preserveonly= defined($lastrun) && -M "db/$ref.log" > $lastrun;
+ $preserveonly= defined($lastrun) && -M "db-h/".get_hashname($ref)."/$ref.log" > $lastrun;
if ($ref =~ m/^-\d$/)
{ $week= $ref eq '-1' ? 'this week' :
$ref eq '-2' ? 'last week' :
"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;
$tpackfile= "pnone.html";
$indexpart= 'unmatched';
} else
- { open(S,"db/$ref.status") || &quit("open db/$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: $@");
}
if ($preserveonly) { &preserve("$linkto.html"); &preserve("$linkto-b.html"); &unfilelock; next; }
- open(L,"db/$ref.log") || &quit("open db/$ref.log: $!");
+ my $hash = get_hashname($ref);
+ open(L,"db-h/$hash/$ref.log") || &quit("open db-h/$hash/$ref.log: $!");
$log='';
$boring=''; $xmessage= 0;
$normstate= 'kill-init';
} elsif ($normstate eq 'html') {
$this .= $_;
} elsif ($normstate eq 'go') {
+ s/^\030//;
$this .= &sani($_);
} elsif ($normstate eq 'go-nox') {
next if !s/^X//;
"<html><head><title>$gProject $gBug report logs - ".
"$short, boring messages</title>\n".
"<link rev=\"made\" href=\"mailto:$gMaintainerEmail)\">\n".
- "</head><body><h1>$gProject $gBugreport logs -".
+ "</head>$gHTMLStart<h1>$gProject $gBugreport logs -".
"\n <A href=\"../$linkto.html\">$short</A>,".
" boring messages</h1>\n$boring\n<hr>\n".
$tail_html."</body></html>\n");
"<html><head><title>$gProject $gBug report logs - ".
"$short</title>\n".
"<link rev=\"made\" href=\"mailto:$gMaintainerEmail\">\n".
- "</head><body><h1>$gProject $gBug report logs - $short<br>\n".
- &sani($s_subject)."</h1>".
+ "</head>$gHTMLStart<h1>$gProject $gBug report logs - $short<br>\n".
+ &sani($data->{subject})."</h1>".
"$descriptivehead\n".
"\n<hr>\n".
$log.
$who_html= $gProject;
$owner_addr= $gMaintainerEmail;
$otherindex_html= "For other kinds of index or for other information about
-$gProject and the $gBug system, see the <A HREF\"../../\">$gBug system top-level
+$gProject and the $gBug system, see the <A HREF=\"../../\">$gBug system top-level
contents WWW page</A>.
";
&file("si/$pending$severity.html",'ref',
"<html><head><title>$who_html $gBug reports: $headstring</title>\n".
"<link rev=\"made\" href=\"mailto:".&sani($owner_addr)."\">\n".
- "</head><body><h1>$who_html $gBug reports: $headstring</h1>\n".
+ "</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");
}
}
&file($tfilename,'ref',
"<html><head><title>$gProject $gBug reports: $what $sani</title>\n".
"<link rev=\"made\" href=\"mailto:$gMaintainerEmail\">\n".
- "</head><body><h1>$gProject $gBug reports: $what $sani</h1>\n".
+ "</head>$gHTMLStart<h1>$gProject $gBug reports: $what $sani</h1>\n".
&$getxinforef($tkey).
$caveat.
"See the <A href=\"../$filename\">listing of $whatplural</A>.\n".