The branch, master has been updated via 667a1dd Remove remaining files from the old perl-based buildfarm. via f846851 Add status tests. from a092307 fjall needs more time to finish tests under valgrind
http://gitweb.samba.org/?p=build-farm.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 667a1dd5493505ff1b7d495083fa29161757c501 Author: Jelmer Vernooij <jel...@samba.org> Date: Mon Nov 22 13:22:10 2010 +0100 Remove remaining files from the old perl-based buildfarm. commit f8468510105a6f9803b123a5f58dfa05d9e214e0 Author: Jelmer Vernooij <jel...@samba.org> Date: Mon Nov 22 13:03:57 2010 +0100 Add status tests. ----------------------------------------------------------------------- Summary of changes: buildfarm/web/__init__.py | 28 +- buildfarm/web/tests/test_status.py | 39 ++ gitlog.pl | 161 ------ history | 28 - svnlog.pl | 182 ------- tests/data.pl | 32 -- tests/util.pl | 45 -- web/build.pl | 971 ------------------------------------ web/data.pm | 644 ------------------------ web/history.pm | 496 ------------------ web/util.pm | 203 -------- 11 files changed, 54 insertions(+), 2775 deletions(-) create mode 100644 buildfarm/web/tests/test_status.py delete mode 100755 gitlog.pl delete mode 100755 history delete mode 100755 svnlog.pl delete mode 100755 tests/data.pl delete mode 100755 tests/util.pl delete mode 100644 web/data.pm delete mode 100644 web/history.pm delete mode 100644 web/util.pm Changeset truncated at 500 lines: diff --git a/buildfarm/web/__init__.py b/buildfarm/web/__init__.py index e735941..d0500af 100755 --- a/buildfarm/web/__init__.py +++ b/buildfarm/web/__init__.py @@ -100,20 +100,23 @@ def html_build_status(status): ostatus = [] if "panic" in status.other_failures: - return span("status panic", "PANIC") + ostatus.append(span("status panic", "PANIC")) if "disk full" in status.other_failures: - return span("status failed", "disk full") + ostatus.append(span("status failed", "disk full")) if "timeout" in status.other_failures: - return span("status failed", "timeout") + ostatus.append(span("status failed", "timeout")) if "inconsistent test result" in status.other_failures: ostatus.append(span("status failed", "unexpected return code")) bstatus = "/".join([span_status(s) for s in status.stages]) - if bstatus == "": - bstatus = "?" - return "/".join([bstatus] + ostatus) + ret = bstatus + if ostatus: + ret += "(%s)" % ",".join(ostatus) + if ret == "": + ret = "?" + return ret -def build_status_html(myself, build): +def build_link(myself, build): params = { "host": build.host, "tree": build.tree, @@ -395,7 +398,7 @@ class ViewBuildPage(BuildFarmPage): for old_build in old_builds: yield "<tr><td>%s</td><td>%s</td><td>%s</td></tr>\n" % ( revision_link(myself, old_build.revision, tree), - build_status_html(myself, old_build), + build_link(myself, old_build), util.dhm_time(old_build.age)) yield "</tbody></table>\n" @@ -458,7 +461,7 @@ class ViewBuildPage(BuildFarmPage): yield "<tr><td>Tree:</td><td>%s</td></tr>\n" % self.tree_link(myself, tree) yield "<tr><td>Build Revision:</td><td>%s</td></tr>\n" % revision_link(myself, build.revision, tree) yield "<tr><td>Build age:</td><td><div class='age'>%s</div></td></tr>\n" % self.red_age(build.age) - yield "<tr><td>Status:</td><td>%s</td></tr>\n" % build_status_html(myself, build) + yield "<tr><td>Status:</td><td>%s</td></tr>\n" % build_link(myself, build) yield "<tr><td>Compiler:</td><td>%s</td></tr>\n" % compiler if cflags is not None: yield "<tr><td>CFLAGS:</td><td>%s</td></tr>\n" % cflags @@ -575,7 +578,7 @@ class ViewRecentBuildsPage(BuildFarmPage): yield "<td>%s</td>" % build_platform(build) yield "<td>%s</td>" % host_link(myself, build.host) yield "<td>%s</td>" % build.compiler - yield "<td>%s</td>" % build_status_html(myself, build) + yield "<td>%s</td>" % build_link(myself, build) yield "</tr>" yield "</tbody></table>" yield "</div>" @@ -597,7 +600,7 @@ class ViewHostPage(BuildFarmPage): yield "<td><span class='tree'>" + self.tree_link(myself, build.tree) +"</span>/" + build.compiler + "</td>" yield "<td>" + revision_link(myself, build.revision, build.tree) + "</td>" yield "<td><div class='age'>" + self.red_age(build.age) + "</div></td>" - yield "<td><div class='status'>%s</div></td>" % build_status_html(myself, build) + yield "<td><div class='status'>%s</div></td>" % build_link(myself, build) yield "<td>%s</td>" % warnings yield "</tr>" @@ -804,8 +807,7 @@ class HistoryPage(BuildFarmPage): yield "<span class=\"label\">Builds: </span>\n" builds = self.buildfarm.get_revision_builds(tree.name, entry.revision) for build in builds: - yield "%s(%s) " % (build_status_html(myself, build), - host_link(myself, build.host)) + yield "%s(%s) " % (build_link(myself, build), host_link(myself, build.host)) yield "</div>\n" yield "</div>\n" diff --git a/buildfarm/web/tests/test_status.py b/buildfarm/web/tests/test_status.py new file mode 100644 index 0000000..a1450d3 --- /dev/null +++ b/buildfarm/web/tests/test_status.py @@ -0,0 +1,39 @@ +#!/usr/bin/python +# Copyright (C) Jelmer Vernooij <jel...@samba.org> 2010 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +from buildfarm.data import BuildStatus +from buildfarm.web import html_build_status + +import testtools + +class BuildStatusHtmlTests(testtools.TestCase): + + def test_empty(self): + status = BuildStatus() + self.assertEquals("?", html_build_status(status)) + + def test_failed_build(self): + status = BuildStatus([("CONFIGURE", 0), ("BUILD", 4)]) + self.assertEquals( + '<span class="status passed">ok</span>/<span class="status failed">4</span>', + html_build_status(status)) + + def test_disk_full(self): + status = BuildStatus([("CONFIGURE", 0), ("BUILD", 4)], set(["timeout"])) + self.assertEquals( + '<span class="status passed">ok</span>/<span class="status failed">4</span>' + '(<span class="status failed">timeout</span>)', html_build_status(status)) diff --git a/gitlog.pl b/gitlog.pl deleted file mode 100755 index a913598..0000000 --- a/gitlog.pl +++ /dev/null @@ -1,161 +0,0 @@ -#!/usr/bin/perl -w -# -# Extract information about recent git commits -# -# tri...@samba.org, November 2006 -# bja...@samba.org - -use strict; -use lib "web"; -use util; -use POSIX; -use Data::Dumper; -use File::stat; -use Date::Parse; - -#################################### -# push an entry onto the array - -sub push_entry($$$$) -{ - my $entry = shift; - my $log = shift; - my $days = shift; - my $tree = shift; - unshift(@{$log}, $entry); -# printf("Adding entry\n"); -# print Dumper $entry; - return $log; -} - -#################################### -# return an array of logfile entries given a git log file. -# Only return entries newer than $days old -sub git_parse($$$$) -{ - my $git_path = shift; - my $days = shift; - my $tree = shift; - my $subdir = shift; - my $log; - my $entry = {}; - my $addto = ""; - - $subdir = "" unless defined($subdir); - - my $magicstart = "---GIT-COMMIT-MAGIC-START---"; - my $magicmsg = "---GIT-COMMIT-MAGIC-MESSAGE---"; - my $magicdiff = "---GIT-COMMIT-MAGIC-DIFF---"; - my $magicbody = "---GIT-COMMIT-MAGIC-BODY---"; - my $format = $magicstart."%n%H%n%ct%n%an%n".$magicmsg."%n%s%n".$magicbody."%b%n".$magicdiff; - my $sincedays; - $sincedays = "--since='$days days'" if defined($days); - # the number of entries is also being limited to a maximum number - # in the "git log" command. This is required because we - # checked in 11 years of samba development 1 days ago :-) - - # git log --pretty=format:---GIT-COMMIT-MAGIC-START---%n%H%n%ct%n%an%n---GIT-COMMIT-MAGIC-MESSAGE---%n%s%b%n---GIT-COMMIT-MAGIC-DIFF--- --numstat --since='1 days' - open(FILE, "cd $git_path; git log --pretty=format:$format --numstat $sincedays -500 $tree -- $subdir |"); - my $line_count; - while (defined (my $line = <FILE>)) { -# printf("line=$line"); - # separator line indicates new entry - if ($line =~ /^$magicstart$/ ) { - # only add entry if one exists - if ($entry->{DATE}) { - $log = push_entry($entry, $log, $days, $tree); - } - - $entry = {}; - $line_count = 0; - next; - } - $line_count++; - - if ($line_count == 1) { - chomp $line; - $entry->{REVISION} = $line; - next; - } elsif ($line_count == 2) { - chomp $line; - $entry->{DATE} = $line; - next; - } elsif ($line_count == 3) { - chomp $line; - $entry->{AUTHOR} = $line; - next; - } - - if ($line =~ /^$magicmsg$/) { - $addto = "MESSAGE"; - next; - } - - if ($line =~ /^$magicdiff$/) { - $addto = "DIFF_STUFF"; - next; - } - - chomp $line; - if ($addto eq "MESSAGE") { - if ($line =~ /^$magicbody(<unknown>$)?(.*)$/) { - $line = $2; - } - $entry->{MESSAGE} .= $line."\n"; - next; - } - - if ($addto eq "DIFF_STUFF") { - $line =~ m/^([0-9]*)[ \t]*([0-9]*)[ \t]*(.*)/; - my $a = $1; - my $b = $2; - my $f = $3; - $f =~ s/^$subdir\///; - if (($b eq "0") and ($a ne "0")) { - $entry->{ADDED} .= "$f "; - } elsif (($a eq "0") and ($b ne "0")) { - $entry->{REMOVED} .= "$f "; - } else { - $entry->{FILES} .= "$f "; - } - next; - } - } - # the last log entry should be caught here: - if ($entry->{DATE}) { - $log = push_entry($entry, $log, $days, $tree); - } - - close(FILE); - - # cleanup the messages -# for (my $line = $#{$log}; $line > 0; $line--) { -# $entry = $log->[$line]; -# if ($entry->{MESSAGE}) { -# while (chomp($entry->{MESSAGE})) { } -# } -# } - - return $log; -} - - -###################################### -# main program -if ($#ARGV < 2 || $ARGV[0] eq '--help' || $ARGV[0] eq '-h') { - print " -Usage: gitlog.pl <PATH> <DAYS> <DEST> [<subdir>] - -Extract all commits git tree <PATH> in the last DAYS days. Store the -results in DEST in a format easily readable by the build farm web -scripts. "; exit(1); } - -my $git_path_arg = $ARGV[0]; -my $days_arg = $ARGV[1]; -my $tree_arg = $ARGV[2]; -my $dest_arg = $ARGV[3]; -my $subdir_arg = $ARGV[4]; - -my $log_data = git_parse($git_path_arg, $days_arg, $tree_arg, $subdir_arg); - -util::SaveStructure($dest_arg, $log_data); diff --git a/history b/history deleted file mode 100755 index 590c387..0000000 --- a/history +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -# This script converts log files produced by CVS into Perl DataDumper -# files that can be easily loaded by the buildfarm web interface. - -#cd $HOME/master || exit 1 - -( - -./gitlog.pl /data/git/ppp.git/ 60 master cache/history.ppp -./gitlog.pl /data/git/ccache.git/ 60 master cache/history.ccache -./gitlog.pl /data/git/rsync.git/ 60 master cache/history.rsync -./gitlog.pl /data/git/samba.git/ 60 v3-5-test cache/history.samba_3_current -./gitlog.pl /data/git/samba.git/ 60 v3-6-test cache/history.samba_3_next -./gitlog.pl /data/git/samba.git/ 60 master cache/history.samba_3_master -./gitlog.pl /data/git/samba.git/ 60 master cache/history.samba_4_0_test -./gitlog.pl /data/git/samba.git/ 60 master cache/history.samba_4_0_waf -./gitlog.pl /data/git/samba.git/ 60 master cache/history.libreplace lib/replace -./gitlog.pl /data/git/samba.git/ 60 master cache/history.talloc lib/talloc -./gitlog.pl /data/git/samba.git/ 60 master cache/history.tdb lib/tdb -./gitlog.pl /data/git/samba.git/ 60 master cache/history.ldb source4/lib/ldb -./gitlog.pl /data/git/samba.git/ 60 master cache/history.pidl pidl - -./gitlog.pl /data/git/ctdb.git/ 60 master cache/history.ctdb -./gitlog.pl /data/git/build-farm.git/ 60 master cache/history.build_farm -./gitlog.pl /data/git/samba-web.git/ 60 master cache/history.samba-web - -) > history.log 2>&1 diff --git a/svnlog.pl b/svnlog.pl deleted file mode 100755 index 02a507d..0000000 --- a/svnlog.pl +++ /dev/null @@ -1,182 +0,0 @@ -#!/usr/bin/perl -w -# -# Extract information about recent SVN commits -# -# tri...@samba.org, April 2001 -# va...@samba.org, August 2004 - -use strict; -use lib "web"; -use util; -use POSIX; -use Data::Dumper; -use File::stat; -use Date::Parse; - -#################################### -# push an entry onto the array - -sub push_entry($$$$) -{ - my $entry = shift; - my $log = shift; - my $days = shift; - my $tree = shift; - - # we can assume that each entry is unique, due to the nature of svn - # so we don't need any of the magic required for cvs - if (($entry->{DATE} > time() - $days*24*60*60) && - ($entry->{TREE} eq $tree)) { - - # we put these on in reverse order so that it's in order of - # date. - unshift(@{$log}, $entry); - } - - return $log; -} - -#################################### -# return an array of logfile entries given a svn log file. -# Only return entries newer than $days old -sub svn_parse($$$$) -{ - my $repo_url = shift; - my $tree_dir = shift; - my $days = shift; - my $tree = shift; - my $log; - my $entry = {}; - - # don't know what time zone this machine is, but given the granularity - # of days, (intended to be about 60 days), a few hours either way makes - # very little difference - my $start_date = POSIX::strftime("%Y-%m-%d", gmtime(time() - $days*60*60*24)); - - open(FILE, "svn log --verbose --non-interactive $repo_url/$tree_dir -r HEAD:'{$start_date}' |"); - #open(FILE, "< log.txt") or die "Could not open log: $!"; - while (defined (my $line = <FILE>)) { - - - # separator line indicates new entry - if ($line =~ /^\-{5,}$/) { - # only add entry if one exists - if ($entry->{DATE}) { - $log = push_entry($entry, $log, $days, $tree); - } - - $entry = {}; - - next; - } - - # the first line after the separator (which sets entry to {}) - # looks like: - # r15 | vance | 2004-07-31 22:24:55 -0700 (Sat, 31 Jul 2004) | 4 lines - if (! defined $entry->{DATE}) { - - my ($rev, $author, $date, $lines) = split /\s+\|\s+/, $line; - $entry->{DATE} = str2time($date); - - # kill the r in the revision - $rev =~ s/^r//; - $entry->{REVISION} = $rev; - $entry->{AUTHOR} = $author; - $entry->{TREE} = $tree; - next; - } - - - # read the list of changed/added/removed files - if ($line =~ /^Changed paths:/) { - - while (<FILE>) { - - $line = $_; - if ($line =~ /^\s*$/) { last; } - - elsif ($line =~ /\s+A (.*)/) { - my $file = $1; - $file =~ s#^/$tree_dir/##o; - if ($entry->{ADDED}) { - $entry->{ADDED} .= " $file"; - } else { - $entry->{ADDED} = "$file"; - } - } - - elsif ($line =~ /\s+M (.*)/) { - my $file = $1; - $file =~ s#^/$tree_dir/##o; - if ($entry->{FILES}) { - $entry->{FILES} .= " $file"; - } else { - $entry->{FILES} = "$file"; - } - } - - elsif ($line =~ /\s+R (.*)/ || - $line =~ /\s+D (.*)/) { - my $file = $1; - $file =~ s#^/$tree_dir/##o; - if ($entry->{REMOVED}) { - $entry->{REMOVED} .= " $file"; - } else { - $entry->{REMOVED} = "$file"; - } - } - } - - next; - } - - # add the line to the message - if (defined $entry->{MESSAGE}) { - $entry->{MESSAGE} .= $line; - } - else { - $entry->{MESSAGE} = $line; - } - } - - if ($entry->{DATE}) { - $log = push_entry($entry, $log, $days, $tree); - } - - close(FILE); - - # cleanup the messages - for (my $line = $#{$log}; $line > 0; $line--) { - $entry = $log->[$line]; - if ($entry->{MESSAGE}) { - while (chomp($entry->{MESSAGE})) { } - } - } - - return $log; -} - - -###################################### -# main program -if ($#ARGV < 4 || $ARGV[0] eq '--help' || $ARGV[0] eq '-h') { - print " -Usage: svnlog.pl <REPOSITORY-URL> <TREE-DIR> <DAYS> <TREE> <DEST> - -Extract all commits to REPOSITORY-URL/TREE-DIR in the last -DAYS days. Store the results in DEST, indexed under TREE, -- build.samba.org