Module: tools Branch: master Commit: 6d94eb8e800c602f9e3b11002e2268b8b8f2e99f URL: http://source.winehq.org/git/tools.git/?a=commit;h=6d94eb8e800c602f9e3b11002...
Author: Alexandre Julliard julliard@winehq.org Date: Tue May 27 15:59:58 2008 +0200
winetest: Build a proper index page for the test results.
---
winetest/build-index | 155 ++++++++++++++++++++++++++++++++++++++++++++++++ winetest/index.css | 54 +++++++++++++++++ winetest/winetest.conf | 5 +- winetest/winetest.cron | 7 +-- 4 files changed, 214 insertions(+), 7 deletions(-)
diff --git a/winetest/build-index b/winetest/build-index new file mode 100755 index 0000000..7b708f9 --- /dev/null +++ b/winetest/build-index @@ -0,0 +1,155 @@ +#!/usr/bin/perl -w +# +# Build the global index for winetest result data +# +# Copyright 2008 Alexandre Julliard julliard@winehq.org +# + +use strict; +use open ':utf8'; +use CGI qw(:standard); + +use vars qw/$gitdir $gitweb/; +require "winetest.conf"; + +binmode STDIN, ':utf8'; +binmode STDOUT, ':utf8'; + +$ENV{GIT_DIR} = $gitdir; + +my %w95 = (name => "Win95"); +my %w98 = (name => "Win98"); +my %me = (name => "Me"); +my %nt3 = (name => "NT3"); +my %nt4 = (name => "NT4"); +my %w2k = (name => "2000"); +my %xp = (name => "XP"); +my %w2k3 = (name => "2003"); +my %vista = (name => "Vista"); +my %wine = (name => "Wine"); + +# Map dissect's IDs to the above hashes +my %idmap = (95=>%w95, 98=>%w98, me=>%me, nt3=>%nt3, nt4=>%nt4, + 2000=>%w2k, xp=>%xp, 2003=>%w2k3, vista=>%vista, wine=>%wine); + +# Define the order of version groups in the summary +my @groups = (%w95, %w98, %me, %nt3, %nt4, %w2k, %xp, %w2k3, %vista, %wine); + +my @months = ("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); + +# read the test data dir + +my @builds; +my @too_old; + +opendir(DIR, "./data/") or die "cannot open ./data"; +foreach my $build (readdir(DIR)) +{ + next if $build =~ /^./; + next unless $build =~ /^[-.0-9a-zA-Z]+$/; + next unless -f "./data/$build/index.html"; + + my ($commit, $date, $subject); + $commit = `git log --max-count=1 --pretty="format:%ct %s" "$build^0" 2>/dev/null` if ($build =~ /^[0-9a-f]{40}$/); + if ($commit && $commit =~ /^(\d+) (.*)$/) + { + $date = $1; + $subject = $2; + # make sure the file mtime matches the commit time + utime $date, $date, "data/$build"; + } + else + { + $date = (stat "./data/$build")[9]; + $subject = ""; + } + # archive builds older than 2 months + if (time() - $date > 60 * 24 * 60 * 60) { push @too_old, $build; } + else { push @builds, { name => $build, date => $date, subj => $subject }; } +} + +closedir(DIR); +@builds = sort { $b->{date} <=> $a->{date} } @builds; + +# remove the too old results +foreach my $build (@too_old) { rename "data/$build", "old-data/$build"; } + +# count how many test runs we have for each version + +my %versions = (); + +foreach my $build (@builds) +{ + my %build_ver = (); + if (opendir( DIR, "./data/$build->{name}" )) + { + foreach my $run (readdir(DIR)) + { + next unless -d "./data/$build->{name}/$run"; + next unless $run =~ /^([0-9a-z]*)_.*/; + next unless defined $idmap{$1}; + my $ver = $idmap{$1}->{name}; + $versions{$ver}++; + $build_ver{$ver}++; + } + closedir(DIR); + } + $build->{versions} = %build_ver; +} + +open OUT, ">data/index.html.new" or die "cannot create data/index.html.new"; + +print OUT <<"EOF"; +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <title>Wine test runs</title> + <link rel="stylesheet" href="/index.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +</head> +<body> +EOF + +print OUT "<table class="builds"><tr><th class="build">Build</th><th class="date">Date</th>\n"; +foreach my $ver (@groups) +{ + next unless defined($versions{$ver->{name}}); + printf OUT "<th class="version">%s</th>", $ver->{name}; +} +print OUT "<th class="commit">Head commit</th></tr>\n"; + +my $odd = 0; +foreach my $build (@builds) +{ + printf OUT "<tr class="%s">\n", $odd ? "dark" : "light"; + $odd = !$odd; + printf OUT " <td class="build"><a href="%s" title="%s">%s</a></td>\n", $build->{name}, $build->{name}, substr($build->{name},0,12); + my @date = gmtime($build->{date}); + printf OUT " <td class="date">%02d-%s-%04d %02d:%02d</td>", $date[3], $months[$date[4]], $date[5] + 1900, $date[2], $date[1], $date[0]; + foreach my $ver (@groups) + { + next unless defined($versions{$ver->{name}}); + my $count = $build->{versions}->{$ver->{name}}; + if (!$count) + { + printf OUT "<td class="version">.</td>"; + } + elsif ($count > 1) + { + printf OUT "<td class="version"><a href="%s/#group_%s">%u</a></td>", $build->{name}, $ver->{name}, $count; + } + else + { + printf OUT "<td class="version"><a href="%s">%u</a></td>", $build->{name}, $count; + } + } + print OUT "\n <td class="commit">"; + if ($build->{subj}) { printf OUT "<a href="$gitweb?a=shortlog;h=%s">%s</a>", $build->{name}, escapeHTML($build->{subj}); } + print OUT "</td></tr>\n"; +} +print OUT "</table>\n</body></html>\n"; +close OUT; + +rename "data/index.html.new", "data/index.html" or unlink "data/index.html.new"; +exit 0; diff --git a/winetest/index.css b/winetest/index.css new file mode 100644 index 0000000..f90b133 --- /dev/null +++ b/winetest/index.css @@ -0,0 +1,54 @@ +/* give a WineHQ-ish look to the test list */ + +body { + background-color: #E2E2E2; + color: #000000; + font-family: "bitstream vera sans", "verdana", "arial", "helvetica", sans-serif; + margin: 10px; + font-size: 12px; +} + +a { color: #A50D0D; text-decoration: none; } +a:visited { color: #FF0000; } +a:hover { color: #FF6666; text-decoration: underline; } +a:active { color: #FF0000; } +a.hidden { text-decoration: none; color: #000000; } + +ol,ul,p { font-size: 12px; } +td,tr,th { font-size: 12px; } + +table.builds { + margin-right: auto; + text-spacing: 0; + border-spacing: 0; + white-space: nowrap; +} + +table.builds th { + line-height: 0.9; + vertical-align: text-top; + border-width: thin; + background-color: #601919; + color: #ffffff; + padding: 5px; +} + +table.builds td { + padding: 1px 5px; +} + +tr.light { background-color: #ffffff; } +tr.dark { background-color: #fff8f8; } +tr.light:hover { background-color: #f8e8e8; } +tr.dark:hover { background-color: #f8e8e8; } + +td.build, td.date { + font-family: monospace; +} +td.version { + text-align: center; +} +.commit { + width: 100%; + text-align: left; +} diff --git a/winetest/winetest.conf b/winetest/winetest.conf index a7ddf3f..e1b0297 100644 --- a/winetest/winetest.conf +++ b/winetest/winetest.conf @@ -1,11 +1,14 @@ # Hey Emacs! This is a -*-cperl-*- file!
-$root = "/wine/winetest"; +$root = "/home/winehq/opt/winetest"; $builds = "$root/winetest.builds"; # These two below should be on the same filesystem $queuedir = "$root/queue"; $datadir = "$root/data";
+$gitdir = "/home/winehq/opt/source/git/wine.git"; +$gitweb = "http://source.winehq.org/git/wine.git"; + # Maximum number of reports for one version and tag $maxmult = 10;
diff --git a/winetest/winetest.cron b/winetest/winetest.cron index e4129db..da41a7c 100755 --- a/winetest/winetest.cron +++ b/winetest/winetest.cron @@ -8,12 +8,7 @@ if [ ! -f $lock ]; then touch $lock while perl dissect; [ $? -eq 0 -o $? -eq 1 ]; do true; done while perl gather; do true; done - - # move 2-month old results out of the way - for i in `find ./data -maxdepth 1 -mtime +60 -type d -print` - do - mv $i old-data - done + perl build-index
# and archive 6-month old results (cd old-data && for i in `find . -maxdepth 1 -mtime +180 -type d -print`