aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Youri/Check/Input/Build.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Youri/Check/Input/Build.pm')
-rw-r--r--lib/Youri/Check/Input/Build.pm128
1 files changed, 128 insertions, 0 deletions
diff --git a/lib/Youri/Check/Input/Build.pm b/lib/Youri/Check/Input/Build.pm
new file mode 100644
index 0000000..2b4e3a6
--- /dev/null
+++ b/lib/Youri/Check/Input/Build.pm
@@ -0,0 +1,128 @@
+# $Id: Build.pm 1179 2006-08-05 08:30:57Z warly $
+package Youri::Check::Input::Build;
+
+=head1 NAME
+
+Youri::Check::Input::Build - Check build outputs
+
+=head1 DESCRIPTION
+
+This plugin checks build outputs of packages, and report failures. Additional
+source plugins handle specific sources.
+
+=cut
+
+use warnings;
+use strict;
+use Carp;
+use Youri::Utils;
+use base 'Youri::Check::Input';
+
+sub columns {
+ return qw/
+ arch
+ bot
+ status
+ /;
+}
+
+sub links {
+ return qw/
+ status url
+ /;
+}
+
+=head2 new(%args)
+
+Creates and returns a new Youri::Check::Input::Build object.
+
+Specific parameters:
+
+=over
+
+=item sources $sources
+
+Hash of source plugins definitions
+
+=back
+
+=cut
+
+sub _init {
+ my $self = shift;
+ my %options = (
+ sources => undef,
+ @_
+ );
+
+ croak "No source defined" unless $options{sources};
+ croak "sources should be an hashref" unless ref $options{sources} eq 'HASH';
+
+ foreach my $id (keys %{$options{sources}}) {
+ print "Creating source $id\n" if $options{verbose};
+ eval {
+ push(
+ @{$self->{_sources}},
+ create_instance(
+ 'Youri::Check::Input::Build::Source',
+ id => $id,
+ test => $options{test},
+ verbose => $options{verbose},
+ %{$options{sources}->{$id}}
+ )
+ );
+ # register monitored archs
+ $self->{_archs}->{$_}->{$id} = 1
+ foreach @{$options{sources}->{$id}->{archs}};
+ };
+ print STDERR "Failed to create source $id: $@\n" if $@;
+ }
+
+ croak "no sources created" unless @{$self->{_sources}};
+}
+
+sub run {
+ my ($self, $media, $resultset) = @_;
+ croak "Not a class method" unless ref $self;
+
+ # this is a source media check only
+ return unless $media->get_type() eq 'source';
+
+ my $callback = sub {
+ my ($package) = @_;
+
+ my $name = $package->get_name();
+ my $version = $package->get_version();
+ my $release = $package->get_release();
+
+ foreach my $source (@{$self->{_sources}}) {
+ my $id = $source->get_id();
+ foreach my $arch (keys %{$self->{_archs}}) {
+ next unless $self->{_archs}->{$arch}->{$id};
+ $resultset->add_result($self->{_id}, $media, $package, {
+ arch => $arch,
+ bot => $id,
+ status => $source->status($name, $version, $release, $arch),
+ url => $source->url($name, $version, $release, $arch),
+ }) if $source->fails(
+ $name,
+ $version,
+ $release,
+ $arch,
+ );
+ }
+ }
+ };
+
+ $media->traverse_headers($callback);
+}
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (C) 2002-2006, YOURI project
+
+This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
+
+=cut
+
+1;