lazy_build => 1,
);
+ method BUILD {
+ # Make sure repo_dir is an absolute path so that
+ # ->contains() works correctly.
+ $self->repo_dir->resolve;
+ }
+
## Public methods
- method project (NonEmptySimpleStr $project) {
- my $path = $self->repo_dir->subdir($project)->resolve;
- $self->repo_dir->resolve; # FIXME - This needs to be called, or if repo_dir contains .., it'll explode below!
- # This is a Path::Class::Dir bug, right?
- die "Directory traversal prohibited" unless $self->repo_dir->contains($path);
- die "Not a valid Project" unless $self->_is_git_repo($path);
- return Project->new( $self->repo_dir->subdir($project) );
+ method get_project (NonEmptySimpleStr $name) {
+ my $path = $self->repo_dir->subdir($name)->resolve;
+ die "Directory traversal prohibited"
+ unless $self->repo_dir->contains($path);
+ die "Not a valid Project"
+ unless $self->_is_git_repo($path);
+ return Project->new( $path );
}
## Builders
next unless -d $obj;
next unless $self->_is_git_repo($obj);
- push @ret, $self->project($file);
+ push @ret, $self->get_project($file);
}
return [sort { $a->name cmp $b->name } @ret];
my $repo = Gitalist::Git::Repo->new( repo_dir => $Dir );
my $project_list = $repo->projects;
my $first_project = @$project_list[0];
- my $named_project = $repo->project('Gitalist');
+ my $named_project = $repo->get_project('Gitalist');
=head1 DESCRIPTION
=head1 METHODS
-=head2 project (Str $project)
+=head2 get_project (Str $name)
Returns a L<Gitalist::Git::Project> for the specified project
name.
is($project_list->[0]->{name}, 'bare.git', 'list_projects has correct name for "bare.git" repo' );
dies_ok {
- my $project = $repo->project('NoSuchProject');
+ my $project = $repo->get_project('NoSuchProject');
} 'throws exception for invalid project';
dies_ok {
- my $project = $repo->project();
+ my $project = $repo->get_project();
} 'throws exception for no project';
dies_ok {
- my $project = $repo->project('../../../');
+ my $project = $repo->get_project('../../../');
} 'throws exception for directory traversal';
-my $project = $repo->project('repo1');
+my $project = $repo->get_project('repo1');
isa_ok($project, 'Gitalist::Git::Project');
+
+
+# check for bug where get_project blew up if repo_dir
+# was a relative path
+lives_ok {
+ my $repo2_dir = "$Bin/lib/../lib/repositories";
+ my $repo2 = Gitalist::Git::Repo->new( repo_dir => $repo2_dir );
+ my $repo2_proj = $repo2->get_project('repo1');
+} 'relative repo_dir properly handled';