diff options
Diffstat (limited to 'lib/Youri/Submit/Test/Set.pm')
-rw-r--r-- | lib/Youri/Submit/Test/Set.pm | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/lib/Youri/Submit/Test/Set.pm b/lib/Youri/Submit/Test/Set.pm new file mode 100644 index 0000000..2ed4994 --- /dev/null +++ b/lib/Youri/Submit/Test/Set.pm @@ -0,0 +1,79 @@ +# $Id: Set.pm 1687 2007-06-28 22:44:07Z guillomovitch $ +package Youri::Submit::Test::Set; + +=head1 NAME + +Youri::Submit::Test::Set - Packages set test + +=head1 DESCRIPTION + +This test rejects non-canonical packages set, meaning packages generated from +different sources packages, checking expected number or source and binaries +packages. + +=cut + +use warnings; +use strict; +use Carp; +use List::MoreUtils qw/all/; +use base qw/Youri::Submit::Step/; + +sub _init { + my $self = shift; + my %options = ( + min_sources => 1, + max_sources => 1, + min_binaries => 1, + max_binaries => undef, + @_ + ); + + $self->{_min_sources} = $options{min_sources}; + $self->{_max_sources} = $options{max_sources}; + $self->{_min_binaries} = $options{min_binaries}; + $self->{_max_binaries} = $options{max_binaries}; +} + +sub process_packages { + my ($self, $packages, $repository, $target, $context) = @_; + croak "Not a class method" unless ref $self; + + my $errors; + + if (@$packages > 1) { + my $name = $packages->[0]->get_canonical_name(); + $errors .= "not a canonical package set\n" + unless + all { $_->get_canonical_name() eq $name } + @$packages; + } + + my $sources = grep { $_->is_source() } @$packages; + + $errors .= "number of source packages > $self->{_max_sources}\n" + if defined $self->{_max_sources} && $sources > $self->{_max_sources}; + + $errors .= "number of source packages < $self->{_min_sources}\n" + if defined $self->{_min_sources} && $sources < $self->{_min_sources}; + + my $binaries = grep { $_->is_binary() } @$packages; + + $errors .= "number of binary packages > $self->{_max_binaries}\n" + if defined $self->{_max_binaries} && $binaries > $self->{_max_binaries}; + + $errors .= "number of binary packages < $self->{_min_binaries}\n" + if defined $self->{_min_binaries} && $binaries < $self->{_min_binaries}; + + croak $errors if $errors; +} + +=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; |