aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Youri/Submit/Test/Set.pm
blob: 2ed49948c0f7fb0caf620a4b303b26842dca8f09 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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;