# $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;