Added head_hash method to Project, and some test cleanups.
Zachary Stevens [Sun, 1 Nov 2009 14:45:37 +0000 (14:45 +0000)]
lib/Gitalist/Git/Project.pm
t/git/project.t
t/git/repo.t
t/git/util.t

index d5671b6..3fdce70 100644 (file)
@@ -7,6 +7,8 @@ class Gitalist::Git::Project {
     use Path::Class;
     use Gitalist::Git::Util;
 
+    our $SHA1RE = qr/[0-9a-fA-F]{40}/;
+    
     has name => ( isa => NonEmptySimpleStr,
                   is => 'ro' );
     has path => ( isa => "Path::Class::Dir",
@@ -63,6 +65,20 @@ class Gitalist::Git::Project {
         return $last_change;
     }
 
+=head2 head_hash
+
+Find the hash of a given head (defaults to HEAD).
+
+=cut
+
+    method head_hash (Str $head?) {
+        my $output = $self->run_cmd(qw/rev-parse --verify/, $head || 'HEAD' );
+        return unless defined $output;
+
+        my($sha1) = $output =~ /^($SHA1RE)$/;
+        return $sha1;
+    }
+
     method project_dir (Path::Class::Dir $project) {
         my $dir = $project->stringify;
         $dir .= '/.git'
index c4c581d..ed6ebcb 100644 (file)
@@ -8,15 +8,17 @@ use Data::Dumper;
 BEGIN { use_ok 'Gitalist::Git::Project' }
 
 use Path::Class;
+my $gitdir = dir("$Bin/../lib/repositories/repo1");
+
 my $proj = Gitalist::Git::Project->new(
-    path => dir("$Bin/../lib/repositories/repo1"),
+    path => $gitdir,
     name => "repo1",
 );
 isa_ok($proj, 'Gitalist::Git::Project');
 
-like($proj->path, qr#/repositories/repo1#, 'repository path is set');
+is($proj->path, $gitdir, 'repository path is set');
 is($proj->name, qw/repo1/, 'repository name is set');
 is($proj->description, qq/some test repository/, 'repository description loaded');
 isa_ok($proj->last_change, 'DateTime', 'last_change');
 
-
+is($proj->head_hash, qw/36c6c6708b8360d7023e8a1649c45bcf9b3bd818/, 'head_hash for HEAD is correct');
index 155827b..a46cf8e 100644 (file)
@@ -7,11 +7,11 @@ use Data::Dumper;
 
 BEGIN { use_ok 'Gitalist::Git::Repo' }
 
-my $repo = Gitalist::Git::Repo->new( repo_dir => "$Bin/../lib/repositories" );
+my $repo_dir = "$Bin/../lib/repositories";
+my $repo = Gitalist::Git::Repo->new( repo_dir => $repo_dir );
 isa_ok($repo, 'Gitalist::Git::Repo');
 
-is($repo->repo_dir, "$Bin/../lib/repositories", "repo->repo_dir is correct" );
+is($repo->repo_dir, $repo_dir, "repo->repo_dir is correct" );
 
 my $project_list = $repo->list_projects;
-warn(Dumper($project_list));
 isa_ok(@$project_list[0], 'Gitalist::Git::Project');
index 35c6fea..dcc55a1 100644 (file)
@@ -8,14 +8,16 @@ use Data::Dumper;
 BEGIN { use_ok 'Gitalist::Git::Util' }
 
 use Path::Class;
+my $gitdir = dir("$Bin/../lib/repositories/repo1");
+
 my $proj = Gitalist::Git::Util->new(
-    gitdir => dir("$Bin/../lib/repositories/repo1"),
+    gitdir => $gitdir,
 );
 isa_ok($proj, 'Gitalist::Git::Util');
 
 like( $proj->_git, qr#/git$#, 'git binary found');
 isa_ok($proj->_gpp, 'Git::PurePerl', 'gpp instance created');
-like($proj->gitdir, qr#/repositories/repo1#, 'repository path is set');
+is($proj->gitdir, $gitdir, 'repository path is set');