Commit | Line | Data |
0250a92d |
1 | package Gitalist::Git::Object::HasTree; |
2 | use MooseX::Declare; |
3 | |
4 | role Gitalist::Git::Object::HasTree { |
5 | has tree => ( isa => 'ArrayRef[Gitalist::Git::Object]', |
6 | required => 0, |
7 | is => 'ro', |
8 | lazy_build => 1 ); |
9 | |
10 | |
11 | ## Builders |
12 | method _build_tree { |
13 | my $output = $self->_run_cmd(qw/ls-tree -z/, $self->sha1); |
14 | return unless defined $output; |
15 | |
16 | my @ret; |
17 | for my $line (split /\0/, $output) { |
18 | my ($mode, $type, $object, $file) = split /\s+/, $line, 4; |
19 | my $class = 'Gitalist::Git::Object::' . ucfirst($type); |
20 | push @ret, $class->new( mode => oct $mode, |
21 | type => $type, |
22 | sha1 => $object, |
23 | file => $file, |
24 | project => $self->project, |
25 | ); |
26 | } |
27 | return \@ret; |
28 | } |
29 | |
30 | } |