]> git.donarmstrong.com Git - debbugs.git/blobdiff - scripts/db2html.in
merge changes from dla source tree
[debbugs.git] / scripts / db2html.in
index 4c5e9efdd25a2b670ae4cc9429ce42f791f4c2a0..b45d2b95ac0e24a33bf35e61c1135d73897f1d23 100755 (executable)
@@ -1,16 +1,20 @@
 #!/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";
 
@@ -18,7 +22,8 @@ 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;
@@ -28,7 +33,7 @@ $indexunmatched = '';
                        '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
@@ -60,7 +65,7 @@ if (defined($stampfile))
 }
 
 #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/;
@@ -81,9 +86,15 @@ while(<MM>)
 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) 
@@ -117,7 +128,7 @@ for $f (@files)
             "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;
@@ -126,43 +137,34 @@ for $f (@files)
         $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) 
@@ -172,11 +174,11 @@ for $f (@files)
             }
         }
         $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);
@@ -193,12 +195,12 @@ for $f (@files)
                 ($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' :
@@ -207,14 +209,11 @@ for $f (@files)
                 $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";
         }
@@ -240,12 +239,12 @@ for $f (@files)
     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: $@");
     }
@@ -305,6 +304,7 @@ for $f (@files)
         } elsif ($normstate eq 'html') {
             $this .= $_;
         } elsif ($normstate eq 'go') {
+            s/^\030//;
             $this .= &sani($_);
         } elsif ($normstate eq 'go-nox') {
             next if !s/^X//;
@@ -346,7 +346,7 @@ for $f (@files)
           "$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.
@@ -465,9 +465,9 @@ for $pending (qw(pending forwarded done)) {
               "</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");
     }
 }