File Coverage

lib/Git/Lint.pm
Criterion Covered Total %
statement 22 54 40.7
branch 0 14 0.0
condition 0 3 0.0
subroutine 7 10 70.0
pod 3 3 100.0
total 32 84 38.1


line stmt bran cond sub pod time code
1             package Git::Lint;
2              
3 2     2   2070 use strict;
  2         4  
  2         70  
4 2     2   32 use warnings;
  2         4  
  2         64  
5              
6 2     2   9 use Git::Lint::Config;
  2         4  
  2         42  
7 2     2   29 use Try::Tiny;
  2         6  
  2         122  
8 2     2   12 use Module::Loader;
  2         2  
  2         957  
9              
10             our $VERSION = '0.014';
11              
12             my $config;
13              
14             sub new {
15 2     2 1 1102 my $class = shift;
16 2         5 my $self = { issues => undef };
17              
18 2         4 bless $self, $class;
19              
20 2         11 $config = Git::Lint::Config->load();
21              
22 2         9 return $self;
23             }
24              
25             sub config {
26 1     1 1 4 my $self = shift;
27 1         2 return $config;
28             }
29              
30             sub run {
31 0     0 1   my $self = shift;
32 0           my $opt = shift;
33              
34 0           foreach my $required (qw{profile check}) {
35             die "git-lint: $required is required\n"
36 0 0         unless defined $opt->{$required};
37             }
38              
39 0 0 0       if ( $opt->{check} ne 'message' && $opt->{check} ne 'commit' ) {
40 0           die "git-lint: check must be either message or commit\n";
41             }
42              
43 0 0         if ( $opt->{check} eq 'message' ) {
44             die "git-lint: file is required if check is message\n"
45 0 0         unless defined $opt->{file};
46             }
47              
48             die 'git-lint: profile ' . $opt->{profile} . ' was not found' . "\n"
49 0 0         unless exists $self->config->{profiles}{ $opt->{check} }{ $opt->{profile} };
50              
51 0           my $check = lc $opt->{check};
52 0           $check = ucfirst $check;
53              
54 0           my $loader = Module::Loader->new;
55              
56 0           my @issues;
57 0           foreach my $module ( @{ $self->config->{profiles}{ $opt->{check} }{ $opt->{profile} } } ) {
  0            
58 0           my $class = q{Git::Lint::Check::} . $check . q{::} . $module;
59             try {
60 0     0     $loader->load($class);
61             }
62             catch {
63 0     0     my $exception = $_;
64 0           die "git-lint: $exception\n";
65 0           };
66 0           my $plugin = $class->new();
67              
68             # TODO: this would be better to be named the same method
69 0 0         my $input = ( $opt->{check} eq 'commit' ? $class->diff() : $class->message( file => $opt->{file} ) );
70              
71             # ensure the plugins don't manipulate the original input
72 0           my @lines = @{$input};
  0            
73 0           push @issues, $plugin->check( \@lines );
74             }
75              
76 0           foreach my $issue (@issues) {
77 0 0         if ( $opt->{check} eq 'commit' ) {
78 0           push @{ $self->{issues}{ $issue->{filename} } }, $issue->{message};
  0            
79             }
80             else {
81 0           push @{ $self->{issues} }, $issue->{message};
  0            
82             }
83             }
84              
85 0           return;
86             }
87              
88             1;
89              
90             __END__