X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FGitalist%2FGit%2FObject.pm;h=154f0126ba13ef456d6f3b5ccf4ed866818b7c5f;hb=09214cdde075e77c9713fdc14b472e982712917d;hp=00f037eb5e1d87bcaa4e4bbbd5ebe691fdf34a18;hpb=10af354d976f27f1d0d34fe4e263eac7545d5809;p=catagits%2FGitalist.git diff --git a/lib/Gitalist/Git/Object.pm b/lib/Gitalist/Git/Object.pm index 00f037e..154f012 100644 --- a/lib/Gitalist/Git/Object.pm +++ b/lib/Gitalist/Git/Object.pm @@ -2,43 +2,66 @@ use MooseX::Declare; use Moose::Autobox; class Gitalist::Git::Object { - use MooseX::Types::Moose qw/Str Int/; + 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/; + # project and sha1 are required initargs has project => ( isa => 'Gitalist::Git::Project', required => 1, is => 'ro', weak_ref => 1, - handles => [ 'run_cmd' ], + handles => { + _run_cmd => 'run_cmd', + _run_cmd_fh => 'run_cmd_fh', + _run_cmd_list => 'run_cmd_list', + _get_gpp_object => 'get_gpp_object', + }, ); has sha1 => ( isa => NonEmptySimpleStr, - required => 1, - is => 'ro' ); - - has $_ => ( isa => NonEmptySimpleStr, required => 1, + is => 'ro' ); + + has type => ( isa => NonEmptySimpleStr, is => 'ro', - lazy_build => 1 ) - for qw/type modestr size/; + required => 1 ); + + has $_ => ( isa => NonEmptySimpleStr, + required => 1, + is => 'ro', + lazy_build => 1 ) + for qw/modestr size/; + + has _gpp_obj => ( isa => 'Git::PurePerl::Object', + required => 1, + is => 'ro', + lazy_build => 1, + handles => [ 'content', + ], + ); # objects can't determine their mode or filename has file => ( isa => NonEmptySimpleStr, required => 0, is => 'ro' ); has mode => ( isa => Int, - required => 1, - default => 0, - is => 'ro' ); + required => 1, + default => 0, + is => 'ro' ); + + method BUILD { $self->$_() for qw/_gpp_obj size modestr/ } - method BUILD { $self->$_() for qw/type size modestr/ } +## Private methods - foreach my $key (qw/ type size /) { - method "_build_$key" { - my $v = $self->_cat_file_with_flag(substr($key, 0, 1)); - chomp($v); - return $v; - } +## Builders + method _build__gpp_obj { + return $self->_get_gpp_object($self->sha1) + } + + method "_build_size" { + my $v = $self->_cat_file_with_flag('s'); + chomp($v); + return $v; } method _build_modestr { @@ -47,22 +70,7 @@ class Gitalist::Git::Object { } method _cat_file_with_flag ($flag) { - $self->run_cmd('cat-file', '-' . $flag, $self->{sha1}) - } - -=head2 contents - -Return the contents of a given file. - -=cut - - # FIXME - Should be an attribute so it gets cached? - method contents { - if ( $self->type ne 'blob' ) { - die "object $self->sha1 is not a file\n" - } - - $self->_cat_file_with_flag('p'); + $self->_run_cmd('cat-file', '-' . $flag, $self->{sha1}) } } # end class