diff options
Diffstat (limited to 'lib/Youri/Submit/Check/Rpmlint.pm')
-rw-r--r-- | lib/Youri/Submit/Check/Rpmlint.pm | 75 |
1 files changed, 52 insertions, 23 deletions
diff --git a/lib/Youri/Submit/Check/Rpmlint.pm b/lib/Youri/Submit/Check/Rpmlint.pm index 20e478b..c7bdf01 100644 --- a/lib/Youri/Submit/Check/Rpmlint.pm +++ b/lib/Youri/Submit/Check/Rpmlint.pm @@ -1,56 +1,85 @@ # $Id: Tag.pm 867 2006-04-11 20:34:56Z guillomovitch $ -package Youri::Upload::Check::Rpmlint; +package Youri::Submit::Check::Rpmlint; =head1 NAME -Youri::Upload::Check::Tag - Incorrect tag values check +Youri::Submit::Check::Rpmlint - Rpmlint-based check =head1 DESCRIPTION -This check plugin rejects packages with incorrect tag values, based on regular -expressions. +This check plugin wraps rpmlint, and reject packages triggering results +declared as fatal. =cut use warnings; use strict; use Carp; -use base qw/Youri::Upload::Check/; +use base qw/Youri::Submit::Check/; + +=head2 new(%args) + +Creates and returns a new Youri::Submit::Check::Rpmlint object. + +Specific parameters: + +=over + +=item results $results + +List of rpmlint result id considered as fatal. + +=item path $path + +Path to the rpmlint executable (default: /usr/bin/rpmlint) + +=item config $config + +Specific rpmlint configuration. + +=back + +=cut + sub _init { my $self = shift; my %options = ( - fatal_error => '', - @_ + results => undef, + path => '/usr/bin/rpmlint', + config => '', + @_ ); - $self->{_fatal_error} = $options{fatal_error}; + + croak "no results to check" unless $options{results}; + croak "fatal should be an arrayref" unless ref $options{results} eq 'ARRAY'; + + $self->{_pattern} = '^(?:' . join('|', @{$options{results}}) . ')$'; } sub run { my ($self, $package, $repository, $target, $define) = @_; croak "Not a class method" unless ref $self; - my $file = $package->get_file; - open my $rpmlint, "/usr/bin/rpmlint $file |"; - my $fatal; - my $error = "fatal errors detected, upload rejected:\n"; - while (<$rpmlint>) { - if (/$self->{_fatal_error}/) { - $fatal = 1; - $error .= "- $_" - } - } - if ($fatal) { - $self->{_error} = $error; - return 0 + my @errors; + + my $command = "$self->{_path} -f $self->{_config} " . $package->as_file(); + open(RPMLINT, "$command |") or die "Can't run $command: $!"; + while (my $line = <RPMLINT>) { + my ($id, $value) = $line =~ /^[EW]: \S+ (\S+) (.*)$/; + if ($id =~ /$self->{_pattern}/o) { + push(@errors, "$id $value"); + } } - 1 + + return @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. +This program is free software; you can redistribute it and/or modify it under +the same terms as Perl itself. =cut |