From: Zachary Stevens Date: Mon, 16 Nov 2009 23:53:43 +0000 (+0000) Subject: Add ::Tag and ::Tree. X-Git-Tag: 0.000000_01~27^2~3 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=467fa7d9d37631fa2a08b1cf371b24e221ab8b7c;p=catagits%2FGitalist.git Add ::Tag and ::Tree. --- diff --git a/lib/Gitalist/Git/Object/Tag.pm b/lib/Gitalist/Git/Object/Tag.pm new file mode 100644 index 0000000..f2ff652 --- /dev/null +++ b/lib/Gitalist/Git/Object/Tag.pm @@ -0,0 +1,12 @@ +package Gitalist::Git::Object::Tag; +use MooseX::Declare; + +class Gitalist::Git::Object::Tag extends Gitalist::Git::Object { + has '+_gpp_obj' => ( handles => [ 'object', + 'tag', + 'tagger', + 'tagged_time', + ], + ); + +} diff --git a/lib/Gitalist/Git/Object/Tree.pm b/lib/Gitalist/Git/Object/Tree.pm new file mode 100644 index 0000000..ee02d62 --- /dev/null +++ b/lib/Gitalist/Git/Object/Tree.pm @@ -0,0 +1,8 @@ +package Gitalist::Git::Object::Tree; +use MooseX::Declare; + +class Gitalist::Git::Object::Tree extends Gitalist::Git::Object { + has '+_gpp_obj' => ( handles => [ 'directory_entries', + ], + ); +} diff --git a/lib/Gitalist/Git/Project.pm b/lib/Gitalist/Git/Project.pm index 57d46bb..5129f12 100644 --- a/lib/Gitalist/Git/Project.pm +++ b/lib/Gitalist/Git/Project.pm @@ -26,9 +26,10 @@ class Gitalist::Git::Project with Gitalist::Git::HasUtils { use MooseX::Types::Moose qw/Str Maybe Bool HashRef ArrayRef/; use List::MoreUtils qw/any zip/; use DateTime; - use Gitalist::Git::Object::Commit; use Gitalist::Git::Object::Blob; - use aliased 'Gitalist::Git::Object'; + use Gitalist::Git::Object::Tree; + use Gitalist::Git::Object::Commit; + use Gitalist::Git::Object::Tag; our $SHA1RE = qr/[0-9a-fA-F]{40}/; @@ -159,7 +160,7 @@ Each item is a L. =head2 get_object ($sha1) -Return a L for the given sha1. +Return an appropriate subclass of L for the given sha1. =cut method get_object (NonEmptySimpleStr $sha1) { @@ -168,12 +169,8 @@ Return a L for the given sha1. } my $type = $self->run_cmd('cat-file', '-t', $sha1); chomp($type); - my $class = 'Gitalist::Git::Object'; - use Moose::Autobox; - if ($type eq ['commit', 'blob']->any) { - $class .= '::' . ucfirst($type); - }; - return $class->new( + my $class = 'Gitalist::Git::Object::' . ucfirst($type); + $class->new( project => $self, sha1 => $sha1, type => $type, diff --git a/t/02git_object.t b/t/02git_object.t index bc1a544..479a890 100644 --- a/t/02git_object.t +++ b/t/02git_object.t @@ -11,16 +11,21 @@ my $project = Gitalist::Git::Project->new( dir("$Bin/lib/repositories/repo1"), ); -BEGIN { use_ok 'Gitalist::Git::Object' } +BEGIN { + use_ok 'Gitalist::Git::Object::Tree'; + use_ok 'Gitalist::Git::Object::Blob'; + use_ok 'Gitalist::Git::Object::Commit'; + use_ok 'Gitalist::Git::Object::Tag'; + } -my $object = Gitalist::Git::Object->new( +my $object = Gitalist::Git::Object::Tree->new( project => $project, sha1 => '729a7c3f6ba5453b42d16a43692205f67fb23bc1', type => 'tree', file => 'dir1', mode => 16384, ); -isa_ok($object, 'Gitalist::Git::Object'); +isa_ok($object, 'Gitalist::Git::Object::Tree', 'tree object'); is($object->sha1,'729a7c3f6ba5453b42d16a43692205f67fb23bc1', 'sha1 is correct'); is($object->type, 'tree', 'type is correct'); is($object->file, 'dir1', 'file is correct'); @@ -29,11 +34,11 @@ is($object->modestr, 'd---------', "modestr is correct" ); is($object->size, 33, "size is correct"); # Create object from sha1. -my $obj2 = Gitalist::Git::Object->new( +my $obj2 = Gitalist::Git::Object::Blob->new( project => $project, sha1 => '5716ca5987cbf97d6bb54920bea6adde242d87e6', ); -isa_ok($obj2, 'Gitalist::Git::Object'); +isa_ok($obj2, 'Gitalist::Git::Object::Blob', 'blob object'); is($obj2->sha1,'5716ca5987cbf97d6bb54920bea6adde242d87e6', 'sha1 is correct'); is($obj2->type, 'blob', 'type is correct'); is($obj2->mode, 0, 'mode is correct'); @@ -47,11 +52,11 @@ dies_ok { print $obj2->comment; } 'comment is an empty string'; -my $commit_obj = Gitalist::Git::Object->new( +my $commit_obj = Gitalist::Git::Object::Commit->new( project => $project, sha1 => '3f7567c7bdf7e7ebf410926493b92d398333116e', ); -isa_ok($commit_obj, 'Gitalist::Git::Object', "commit object type correct"); +isa_ok($commit_obj, 'Gitalist::Git::Object::Commit', "commit object"); my ($tree, $patch) = $commit_obj->diff( parent => undef, file => undef, diff --git a/t/02git_project.t b/t/02git_project.t index 540c80e..c59b77e 100644 --- a/t/02git_project.t +++ b/t/02git_project.t @@ -39,7 +39,7 @@ is(scalar $proj->list_tree, 2, 'expected number of entries in tree'); isa_ok(($proj->list_tree)[1], 'Gitalist::Git::Object'); # Return an ::Object from a sha1 -my $obj1 = $proj->get_object('5716ca5987cbf97d6bb54920bea6adde242d87e6'); +my $obj1 = $proj->get_object('729a7c3f6ba5453b42d16a43692205f67fb23bc1'); isa_ok($obj1, 'Gitalist::Git::Object::Tree'); my $hbp_sha1 = $proj->hash_by_path('36c6c6708b8360d7023e8a1649c45bcf9b3bd818', 'dir1/file2');