#!/usr/bin/perl use strict; use warnings; use FindBin; use lib "$FindBin::Bin/../lib"; use Config; use File::Spec; use Test::Chimps::Client; use Test::TAP::Model::Visual; chdir "$FindBin::Bin/.."; check_dependencies(); my @tests = map glob, qw(t/*.t t/*/*.t t/*/*/*.t); my $start = time; my $model = Test::TAP::Model::Visual->new_with_tests(@tests); my $client = Test::Chimps::Client->new( server => 'http://plagger.org/chimps-server', model => $model, report_variables => { archname => $Config{archname}, committer => $ENV{USER} || $ENV{USERNAME}, osname => $Config{osname}, osvers => $Config{osvers}, project => 'Plagger', duration => time - $start, revision => get_revision(), }, ); my ($status, $msg) = $client->send; if (! $status) { print "Error: $msg\n"; exit(1); } sub get_revision { return extract_revision('svk', 'svk info', qr/Mirrored From: .*Rev\. (\d+)/) || extract_revision('svn', 'svn info', qr/Revision: (\d+)/) || extract_svn_revision('.svn/entries') || 'unknown'; } sub extract_revision { my($cmd, $command, $re) = @_; return unless has_command($cmd); my $out = qx($command) or return; $out =~ /$re/; return $1; } sub has_command { my $cmd = shift; grep { -e File::Spec->catfile($_, $cmd) } split /:/, $ENV{PATH}; } sub extract_svn_revision { my $file = shift; open my($fh), $file or return; while (<$fh>) { /revision="(\d+)"/ and return $1; } return; } sub check_dependencies { warn "Checking dependencies ...\n"; my $out = `$Config{perlpath} tools/check-dependencies.pl`; if (my @missing = $out =~ /^(.*missing \(required\))$/mg) { die "You need to install dependencies first.\n", join("\n", @missing) . "\n"; } warn "Done.\n"; }