aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Youri/Submit/Check/Rpmlint.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Youri/Submit/Check/Rpmlint.pm')
-rw-r--r--lib/Youri/Submit/Check/Rpmlint.pm75
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