3 role Gitalist::Git::CollectionOfRepositories with Gitalist::Git::Serializable {
4 use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
5 use MooseX::Types::Moose qw/ArrayRef/;
7 use aliased 'Gitalist::Git::Repository';
9 requires 'debug_string';
13 isa => ArrayRef['Gitalist::Git::Repository'],
23 method get_repository (NonEmptySimpleStr $name) {
24 my $repo = $self->_get_repo_from_name($name);
25 confess("Couldn't get_repository '$name' - not a valid git repository.")
26 unless $self->_is_git_repo($repo->path);
30 # Determine whether a given directory is a git repo.
31 # http://www.kernel.org/pub/software/scm/git/docs/gitrepository-layout.html
32 method _is_git_repo ($dir) {
33 my $has_head = -f $dir->file('HEAD') || -f $dir->file('.git', 'HEAD');
34 my $eok_file = $self->export_ok
36 my $is_visible = $eok_file
37 && (-f $dir->file($eok_file) || -f $dir->file('.git', $eok_file));
39 return $has_head && $is_visible;
46 around _build_repositories {
47 [sort { $a->name cmp $b->name } $self->$orig->flatten];
55 Gitalist::Git::CollectionOfRepositories - Interface and partial implementation of a collection of git repositories
59 package My::Example::CollectionOfRepositories;
61 use namespace::autoclean;
63 with 'Gitalist::Git::CollectionOfRepositories';
65 sub _build_repositories {
67 [ $self->get_repository('Gitalist') ];
69 sub _get_path_for_repository_name {
70 my ($self, $name) = @_;
71 '/var/example/' . $name . '.git';
74 my $collection = My::Example::CollectionOfRepositories->new
75 my $repository_list = $collection->repositories;
76 my $only_repository = $repository_list->[0];
77 my $named_repository = $repo->get_repository('Gitalist');
81 This role provides an abstraction for a list of Repository directories.
87 An array of all L<Gitalist::Git::Repository>s.
91 =head2 get_repository (Str $name)
93 Returns a L<Gitalist::Git::Repository> for the given name.
94 If C<$name> is not a valid git repository an exception will be thrown.
98 L<Gitalist::Git::CollectionOfRepositories::FromListOfDirectories>,
99 L<Gitalist::Git::CollectionOfRepositories::FromDirectory>,
100 L<Gitalist::Git::Repository>.
104 See L<Gitalist> for authors.
108 See L<Gitalist> for the license.