X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FGitalist%2FGit%2FProject.pm;h=cf3ac4cc723a7c0496ef557ff1e7b0ab3da8ad92;hb=84f31a446a0a59d8ced5686c1a0fe0beb63fa676;hp=e11da8e5cc6f397460b452cc93172524c3e59d2b;hpb=f9466a6caf7d2ff0785275dafeb36edea3bc0c0d;p=catagits%2FGitalist.git diff --git a/lib/Gitalist/Git/Project.pm b/lib/Gitalist/Git/Project.pm index e11da8e..cf3ac4c 100644 --- a/lib/Gitalist/Git/Project.pm +++ b/lib/Gitalist/Git/Project.pm @@ -3,9 +3,9 @@ use MooseX::Declare; class Gitalist::Git::Project { # FIXME, use Types::Path::Class and coerce use MooseX::Types::Common::String qw/NonEmptySimpleStr/; - use MooseX::Types::Moose qw/Str Maybe/; + use MooseX::Types::Moose qw/Str Maybe Bool/; use DateTime; - use Path::Class; + use MooseX::Types::Path::Class qw/Dir/; use Gitalist::Git::Util; use aliased 'Gitalist::Git::Object'; @@ -13,7 +13,7 @@ class Gitalist::Git::Project { has name => ( isa => NonEmptySimpleStr, is => 'ro', required => 1 ); - has path => ( isa => "Path::Class::Dir", + has path => ( isa => Dir, is => 'ro', required => 1); has description => ( isa => Str, @@ -34,6 +34,31 @@ class Gitalist::Git::Project { handles => [ 'run_cmd' ], ); + has project_dir => ( isa => Dir, + is => 'ro', + lazy => 1, + default => sub { + my $self = shift; + $self->is_bare + ? $self->path + : $self->path->subdir('.git') + }, + ); + has is_bare => ( + isa => Bool, + is => 'ro', + lazy => 1, + default => sub { + my $self = shift; + -f $self->path->file('.git', 'HEAD') + ? 0 + : -f $self->path->file('HEAD') + ? 1 + : confess("Cannot find " . $self->path . "/.git/HEAD or " + . $self->path . "/HEAD"); + }, + ); + method BUILD { $self->$_() for qw/_util last_change owner description/; # Ensure to build early. } @@ -46,21 +71,21 @@ class Gitalist::Git::Project { method _build__util { Gitalist::Git::Util->new( - gitdir => $self->_project_dir($self->path), + project => $self, ); } method _build_description { my $description = ""; eval { - $description = $self->path->file('description')->slurp; + $description = $self->project_dir->file('description')->slurp; chomp $description; }; return $description; } method _build_owner { - my ($gecos, $name) = (getpwuid $self->path->stat->uid)[6,0]; + my ($gecos, $name) = (getpwuid $self->project_dir->stat->uid)[6,0]; $gecos =~ s/,+$//; return length($gecos) ? $gecos : $name; }