use Moose::Autobox;
class Gitalist::Git::Object {
- use MooseX::Types::Moose qw/Str Int Bool Maybe/;
+ use MooseX::Types::Moose qw/Str Int Bool Maybe ArrayRef/;
use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
use File::Stat::ModeString qw/mode_to_string/;
use List::MoreUtils qw/any zip/;
default => 0,
is => 'ro' );
+ has tree => ( isa => 'ArrayRef[Gitalist::Git::Object]',
+ required => 0,
+ is => 'ro',
+ lazy_build => 1 );
+
method BUILD { $self->$_() for qw/_gpp_obj type size modestr/ }
+ method _build_tree {
+ confess("Can't list_tree on a blob object.")
+ if $self->type eq 'blob';
+ my $output = $self->_run_cmd(qw/ls-tree -z/, $self->sha1);
+ return unless defined $output;
+
+ my @ret;
+ for my $line (split /\0/, $output) {
+ my ($mode, $type, $object, $file) = split /\s+/, $line, 4;
+ push @ret, Gitalist::Git::Object->new( mode => oct $mode,
+ type => $type,
+ sha1 => $object,
+ file => $file,
+ project => $self->project,
+ );
+ }
+ return \@ret;
+ }
method diff ( Maybe[Bool] :$patch?,
Maybe[NonEmptySimpleStr] :$parent?,
=cut
method list_tree (Str $sha1?) {
$sha1 ||= $self->head_hash;
-
- my $output = $self->run_cmd(qw/ls-tree -z/, $sha1);
- return unless defined $output;
-
- my @ret;
- for my $line (split /\0/, $output) {
- my ($mode, $type, $object, $file) = split /\s+/, $line, 4;
- push @ret, Object->new( mode => oct $mode,
- type => $type,
- sha1 => $object,
- file => $file,
- project => $self,
- );
- }
- return @ret;
+ my $object = $self->get_object($sha1);
+ return @{$object->tree};
}
=head2 get_object ($sha1)