is => 'ro',
lazy_build => 1,
handles => [ 'parents',
- 'parent_sha1',
'author',
- 'authored_time',
'committer',
- 'committed_time',
],
);
# This feels wrong, but current templates assume
# these attributes are present on every object.
- foreach my $key (qw/tree_sha1 comment content/) {
+ foreach my $key (qw/content/) {
has $key => ( isa => Str,
required => 1,
is => 'ro',
--- /dev/null
+package Gitalist::Git::Object::Commit;
+use MooseX::Declare;
+
+class Gitalist::Git::Object::Commit extends Gitalist::Git::Object {
+ has '+_gpp_obj' => ( handles => [ 'comment',
+ 'tree_sha1',
+ 'committed_time',
+ 'authored_time',
+ 'parent_sha1',
+ 'parent_sha1s',
+ ],
+ );
+
+}
use MooseX::Types::Moose qw/Str Maybe Bool HashRef ArrayRef/;
use List::MoreUtils qw/any zip/;
use DateTime;
+ use Gitalist::Git::Object::Commit;
use aliased 'Gitalist::Git::Object';
our $SHA1RE = qr/[0-9a-fA-F]{40}/;
unless ( $self->_is_valid_rev($sha1) ) {
$sha1 = $self->head_hash($sha1);
}
- return Object->new(
+ my $type = $self->run_cmd('cat-file', '-t', $sha1);
+ chomp($type);
+ my $class = 'Gitalist::Git::Object';
+ if ($type eq 'commit') {
+ $class .= '::' . ucfirst($type);
+ };
+ return $class->new(
project => $self,
sha1 => $sha1,
);
# Return an ::Object from a sha1
my $obj1 = $proj->get_object('5716ca5987cbf97d6bb54920bea6adde242d87e6');
-isa_ok($obj1, 'Gitalist::Git::Object');
+isa_ok($obj1, 'Gitalist::Git::Object::Tree');
my $hbp_sha1 = $proj->hash_by_path('36c6c6708b8360d7023e8a1649c45bcf9b3bd818', 'dir1/file2');
my $obj2 = $proj->get_object($hbp_sha1);
+isa_ok($obj2, 'Gitalist::Git::Object::Blob');
is($obj2->type, 'blob', 'hash_by_path obj is a file');
is($obj2->content, "foo\n", 'hash_by_path obj is a file');
+my $obj3 = $proj->get_object($proj->head_hash);
+isa_ok($obj3, 'Gitalist::Git::Object::Commit');
+
like($proj->head_hash('HEAD'), qr/^([0-9a-fA-F]{40})$/, 'head_hash');
{