Hi porters,
a few weeks ago steven@ sent a diff for cpan.port.mk that provides
regress reporting functionality via p5-Test-Reporter. When i saw that
the cpantest script directly sends out emails i stepped in and changed
a few bits to write the report mail into a file.
Unfortunately the output was not correct and additionally the existing
code of cpantest made my eys bleed, so i wrote build/cpanreport.
It's very simple, still depends on p5-Test-Reporter but does the job.
I've got a bit feedback already but i want more solid replies before i
commit this.
To use it, apply the diff, set CPAN_REPORT=Yes, create a directory for
the reports (i.e. /usr/ports/mystuff/reports) and set CPAN_REPORT_DB to
point to it.
With this all perl ports using the cpan.port.mk will write files you can
email to [EMAIL PROTECTED] after you `make regress'.
This way we can dispatch build testing reports to prove problems and
have a better ground to submit upstream patches.
Please let me hear your oppinions and/or {,dis}agreements.
Regards,
Simon
diff -urNx CVS -x .#* -x *.orig ./build/cpanreport
/usr/ports/infrastructure/build/cpanreport
--- ./build/cpanreport Thu Jan 1 01:00:00 1970
+++ /usr/ports/infrastructure/build/cpanreport Thu Jul 5 20:18:04 2007
@@ -0,0 +1,84 @@
+#!/usr/bin/perl
+# $OpenBSD$
+# Copyright (c) 2007 Simon Bertrang. All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Neither the name of OpenBSD nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY ITS AUTHOR AND THE OpenBSD project ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+use Getopt::Std qw(getopts);
+use Test::Reporter;
+
+my $distname;
+my $fh;
+my $log;
+my %opts = (
+ 'd' => $ENV{'CPAN_REPORT_DB'} || '.',
+ 'f' => $ENV{'REGRESS_LOGFILE'} || '',
+ 'g' => '',
+);
+my $reporter;
+
+sub usage {
+ die("usage: $0 [-d logdir]" .
+ " [-f regress.log]" .
+ " -g fail|pass|na|unknown distname\n");
+}
+
+unless (getopts('d:f:g:', \%opts)) {
+ usage();
+}
+
+unless ($opts{'g'} && $opts{'g'} =~ m/^(?:pass|fail|na|unknown)$/o) {
+ usage();
+}
+
+unless ($distname = shift(@ARGV)) {
+ usage();
+}
+
+if ($opts{'f'}) {
+ unless (open($fh, '<', $opts{'f'})) {
+ die("$0: $!: $opts{'f'}\n");
+ }
+ close(STDIN);
+}
+else {
+ $fh = \*STDIN;
+}
+
+{
+ local($/) = undef;
+ $log = <$fh>;
+}
+close($fh);
+
+unless (open($fh, '>', $opts{'d'} . "/$distname")) {
+ die("$0: $!: ", $opts{'d'}, "/$distname\n");
+}
+
+$reporter = Test::Reporter->new();
+
+$reporter->grade($opts{'g'});
+$reporter->distribution($distname);
+$reporter->comments($log);
+
+$reporter->write($fh);
+
+close($fh);
Binary files ./mk/.cpan.port.mk.swp and
/usr/ports/infrastructure/mk/.cpan.port.mk.swp differ
diff -urNx CVS -x .#* -x *.orig ./mk/cpan.port.mk
/usr/ports/infrastructure/mk/cpan.port.mk
--- ./mk/cpan.port.mk Sat Nov 25 14:14:40 2006
+++ /usr/ports/infrastructure/mk/cpan.port.mk Thu Jul 5 20:41:33 2007
@@ -21,3 +21,20 @@
REGRESS_DEPENDS+=::devel/p5-Test-Pod \
::devel/p5-Test-Pod-Coverage
.endif
+
+.if defined(CPAN_REPORT)
+REGRESS_DEPENDS+=::devel/p5-Test-Reporter
+REGRESS_FLAGS+= TEST_VERBOSE=1
+. if empty(CPAN_REPORT_DB) || !exists(${CPAN_REPORT_DB})
+ERRORS+= "Fatal: CPAN_REPORT_DB must point to a directory"
+. endif
+CPAN_REPORTER= ${PORTSDIR}/infrastructure/build/cpanreport
+CPAN_REPORTER_FLAGS= -d ${CPAN_REPORT_DB} -f ${REGRESS_LOGFILE} ${DISTNAME}
+CPAN_REPORTER_PASS= -g pass ${CPAN_REPORTER_FLAGS}
+CPAN_REPORTER_FAIL= -g fail ${CPAN_REPORTER_FLAGS}
+
+post-regress:
+ @if grep 'All tests successful' ${REGRESS_LOGFILE}; then \
+ ${CPAN_REPORTER} ${CPAN_REPORTER_PASS}; \
+ else ${CPAN_REPORTER} ${CPAN_REPORTER_FAIL}; fi
+.endif