1 package Git::PurePerl::Object::Tree;
3 use MooseX::StrictConstructor;
4 use Moose::Util::TypeConstraints;
5 use namespace::autoclean;
7 extends 'Git::PurePerl::Object';
10 ( is => 'ro', isa => 'ObjectKind', required => 1, default => 'tree' );
11 has 'directory_entries' => (
13 isa => 'ArrayRef[Git::PurePerl::DirectoryEntry]',
20 my $content = $self->content;
21 return unless $content;
22 my @directory_entries;
24 my $space_index = index( $content, ' ' );
25 my $mode = substr( $content, 0, $space_index );
26 $content = substr( $content, $space_index + 1 );
27 my $null_index = index( $content, "\0" );
28 my $filename = substr( $content, 0, $null_index );
29 $content = substr( $content, $null_index + 1 );
30 my $sha1 = unpack( 'H*', substr( $content, 0, 20 ) );
31 $content = substr( $content, 20 );
32 push @directory_entries,
33 Git::PurePerl::DirectoryEntry->new(
35 filename => $filename,
40 $self->directory_entries( \@directory_entries );
43 __PACKAGE__->meta->make_immutable;