File Coverage

blib/lib/Git/Repository/FileHistory.pm
Criterion Covered Total %
statement 10 12 83.3
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 14 16 87.5


line stmt bran cond sub pod time code
1             package Git::Repository::FileHistory;
2 1     1   23461 use strict;
  1         2  
  1         39  
3 1     1   6 use warnings;
  1         2  
  1         23  
4 1     1   25 use 5.008001;
  1         6  
  1         58  
5             our $VERSION = '0.05';
6              
7 1     1   451 use Git::Repository::Log::Iterator;
  0            
  0            
8              
9             sub new {
10             my ($class, $repo, @files) = @_;
11              
12             my $args;
13             $args = pop @files if ref $files[-1] eq 'HASH';
14              
15             my @cmd = ('--', @files);
16             unshift @cmd, $args->{branch} if $args->{branch};
17              
18             my $iter = Git::Repository::Log::Iterator->new($repo, @cmd);
19             my @logs;
20             while ( my $log = $iter->next ){
21             push @logs, $log;
22             }
23              
24             bless {
25             file_name => @files == 1 ? $files[0] : \@files,
26             logs => \@logs,
27             }, $class;
28             }
29              
30             sub file_name { shift->{file_name} }
31              
32             sub logs {
33             my $logs = shift->{logs};
34             wantarray ? @$logs : $logs;
35             }
36              
37             sub last_log { shift->logs->[0] }
38             sub first_log { shift->logs->[-1] }
39              
40             sub created_at {
41             my $first = shift->first_log;
42             $first && $first->author_gmtime;
43             }
44              
45             sub last_modified_at {
46             my $last = shift->last_log;
47             $last && $last->author_gmtime;
48             }
49             {
50             no warnings 'once';
51             *updated_at = *last_modified_at;
52             }
53              
54             sub created_by {
55             my $first = shift->first_log;
56             $first && $first->author_name;
57             }
58              
59             sub last_modified_by {
60             my $last = shift->last_log;
61             $last && $last->author_name;
62             }
63              
64             1;
65             __END__