From: Jose Luis Martinez Date: Wed, 9 Mar 2011 16:46:05 +0000 (+0100) Subject: Make get_repository expect already instanced repo X-Git-Tag: 0.003001~8 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FGitalist.git;a=commitdiff_plain;h=52d3a5d0790ea86a5daae4af833738c024970bcb Make get_repository expect already instanced repo Refactor subclasses to have the _get_repo_from_name as the mandatory method. --- diff --git a/lib/Gitalist/Git/CollectionOfRepositories.pm b/lib/Gitalist/Git/CollectionOfRepositories.pm index 62ed906..8e3c309 100644 --- a/lib/Gitalist/Git/CollectionOfRepositories.pm +++ b/lib/Gitalist/Git/CollectionOfRepositories.pm @@ -19,11 +19,12 @@ role Gitalist::Git::CollectionOfRepositories { ); method get_repository (NonEmptySimpleStr $name) { - my $path = $self->_get_path_for_repository_name($name); + my $repo = $self->_get_repo_from_name($name); die "Couldn't get_repository '$name' - not a valid git repository." - unless $self->_is_git_repo($path); - return Repository->new( $path ); + unless $self->_is_git_repo($repo->path); + return $repo; } + # Determine whether a given directory is a git repo. # http://www.kernel.org/pub/software/scm/git/docs/gitrepository-layout.html method _is_git_repo ($dir) { @@ -37,7 +38,7 @@ role Gitalist::Git::CollectionOfRepositories { } requires qw/ _build_repositories - _get_path_for_repository_name + _get_repo_from_name /; around _build_repositories { diff --git a/lib/Gitalist/Git/CollectionOfRepositories/FromDirectory.pm b/lib/Gitalist/Git/CollectionOfRepositories/FromDirectory.pm index 57fdc8c..86ac402 100644 --- a/lib/Gitalist/Git/CollectionOfRepositories/FromDirectory.pm +++ b/lib/Gitalist/Git/CollectionOfRepositories/FromDirectory.pm @@ -25,6 +25,10 @@ class Gitalist::Git::CollectionOfRepositories::FromDirectory return $path; } + method _get_repo_from_name (NonEmptySimpleStr $name) { + return Gitalist::Git::Repository->new($self->_get_path_for_repository_name($name)); + } + ## Builders method _build_repositories { my $dh = $self->repo_dir->open || die "Could not open repo_dir"; diff --git a/lib/Gitalist/Git/CollectionOfRepositories/FromDirectoryRecursive.pm b/lib/Gitalist/Git/CollectionOfRepositories/FromDirectoryRecursive.pm index fc17eed..08ba2d7 100644 --- a/lib/Gitalist/Git/CollectionOfRepositories/FromDirectoryRecursive.pm +++ b/lib/Gitalist/Git/CollectionOfRepositories/FromDirectoryRecursive.pm @@ -27,15 +27,15 @@ class Gitalist::Git::CollectionOfRepositories::FromDirectoryRecursive } grep $_->is_dir, $dir->children; } - method _get_path_for_repository_name (NonEmptySimpleStr $name) { + method _get_repo_from_name (NonEmptySimpleStr $name) { my $repo = first { $_->name eq $name } $self->repositories->flatten or return; - return $repo->path; + return $repo; } method _get_repo_name (NonEmptySimpleStr $name) { # strip off the repo_dir part from a path - return Path::Class::Dir->new($name)->relative($self->repo_dir)->stringify; + return Path::Class::Dir->new($name)->relative($self->repo_dir)->stringify; } ## Builders diff --git a/lib/Gitalist/Git/CollectionOfRepositories/FromListOfDirectories.pm b/lib/Gitalist/Git/CollectionOfRepositories/FromListOfDirectories.pm index a1a54c6..0a80615 100644 --- a/lib/Gitalist/Git/CollectionOfRepositories/FromListOfDirectories.pm +++ b/lib/Gitalist/Git/CollectionOfRepositories/FromListOfDirectories.pm @@ -27,6 +27,10 @@ class Gitalist::Git::CollectionOfRepositories::FromListOfDirectories with Gitali +{ map { basename($_) => dir($_) } $self->repos->flatten }; } + method _get_repo_from_name (NonEmptySimpleStr $name) { + return Gitalist::Git::Repository->new($self->_get_path_for_repository_name($name)); + } + ## Builders method _build_repositories { [ map { $self->get_repository(basename($_)) } $self->repos->flatten ];