bagder: curl-www/docs relinfo.pl,NONE,1.1
[email protected] Wed, 04 Feb 2009 21:47:51 +0000
| Newsgroups | gmane.comp.web.curl.www.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/curl/curl-www/docs
In directory labb:/tmp/cvs-serv22187
Added Files:
relinfo.pl
Log Message:
add this necessary script too
--- NEW FILE: relinfo.pl ---
#!/usr/bin/perl
# un-preprocessed _changes-file as input
require "vuln.pm";
sub vernum {
my ($ver)=@_;
my @v = split('\.', $ver);
return ($v[0] << 16) | ($v[1] << 8) | $v[2];
}
my $v=1;
for(@vuln) {
my ($id, $start, $stop, $title)=split('\|');
$id =~ s/ //;
$vulnurl[$v]="/docs/security.html\#$id";
$vulnid[$v]="$id";
$vulntitle[$v]="$title";
$v++;
}
print "<table>";
sub head {
print "<tr class=\"tabletop\"><th>index</th><th>Version</th><th>Vulnerabilites</th>";
printf("<th>Date</th><th>Since %s</th><th>Days</th><th>Bugfixes</th><th>Changes</th></tr>\n",
$releases[0]);
}
my $l;
my $str;
while(<STDIN>) {
# each release starts with this
if($_ =~ /^SUBTITLE\(Fixed in ([0-9.]*) - (.*)\)/) {
$str=$1;
my $date=$2;
push @releases, $1;
$reldate{$1}=$2;
$bugfixes{$str}=0;
$changes{$str}=0;
}
elsif($str && ($_ =~ /^ *BGF/)) {
# bugfix for version $str
$bugfixes{$str}++;
}
elsif($str && ($_ =~ /^ *CHG/)) {
# change for version $str
$changes{$str}++;
}
}
# do a loop to fix dates
for my $str (@releases) {
my $date = $reldate{$str};
my $datesecs=`date -d "$date" +%s`;
my $daysbetween;
my $deltadays=0;
if($prevsecs) {
# number of seconds between two releases!
my $reltime = $prevsecs - $datesecs;
# convert to days
$daysbetween = int($reltime/(3600*24));
# deltadays is the number of days between two releases
$deltadays = abs($prevdays - $daysbetween);
if($daysbetween < 100) {
$age = "$daysbetween days";
}
elsif($daysbetween < 400) {
$age = sprintf("%d months", int($daysbetween/30));
}
else {
my $mon = int(($daysbetween%365)/30);
$age = sprintf("%.1f years", $daysbetween/365);
}
$prevdays = $daysbetween; # store number of days between this and the most
# recent
}
else {
# store the first date
$prevsecs = $datesecs;
$prevdays = 0;
$age="most recent";
}
$since{$str}=$age;
$delta{$str}=$deltadays;
# the newer release
$newer{$str}=$prevstr;
if($prevstr) {
# there is a newer version, make a later mapping for it!
$later{$prevstr} = $str;
}
$prevstr=$str;
}
head();
my $totalbugs;
my $totalchanges;
for my $str (@releases) {
my $this = vernum($str);
my $date = $reldate{$str};
my @v;
my $vnum;
my $i;
for(@vuln) {
my ($id, $start, $stop)=split('\|');
#print "CHECK $start <= $this <= $stop\n";
if(($this >= vernum($start)) &&
($this <= vernum($stop))) {
# vulnerable
$v[$i]=1; # this one
}
$i++;
}
my $anchor = $str;
$anchor =~ s/\./_/g;
printf("<tr class=\"%s\"><td>%d</td><td><a href=\"/changes.html#$anchor\">$str</a></td>",
$l&1?"even":"odd",
$index++);
my $vulc=0;
my $vulstr;
for my $i (0 .. scalar(@vuln)-1 ) {
if($v[$i]) {
$vulstr .= sprintf("<a href=\"%s\" title=\"%s - %s\">#%d</a> ",
$vulnurl[$i+1], $vulntitle[$i+1], $vulnid[$i+1],
$i+1);
$vulc++;
}
}
if($vulstr) {
print "<td>$vulstr</td>";
}
else {
print "<td> </td>";
}
if($date =~ /([A-Za-z]+) (\d+) (\d\d\d\d)/) {
if(length($1)>3) {
# a long month name, use the shorter version
$date = substr($1, 0, 3)." $2 $3";
}
}
$totalchanges += $changes{$str};
$totalbugs += $bugfixes{$str};
my $age = $since{$str};
# figure out the number of days between the previous release and this
my $deltadays = $delta{$later{$str}};
$totaldays += $deltadays;
printf("<td>$date</td><td>$age</td><td>$deltadays ($totaldays)</td><td>%d (%d)</td><td>%d (%d)</td></tr>\n",
$bugfixes{$str}, $totalbugs,
$changes{$str}, $totalchanges);
++$l;
}
print "</table>\n";