1 package Gitalist::Model::CollectionOfRepos;
4 use Gitalist::Git::CollectionOfRepositories::FromDirectoryRecursive;
5 use Gitalist::Git::CollectionOfRepositories::FromListOfDirectories;
6 use Gitalist::Git::CollectionOfRepositories::FromDirectory::WhiteList;
7 use MooseX::Types::Moose qw/Maybe ArrayRef/;
8 use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
9 use Moose::Util::TypeConstraints;
11 use namespace::autoclean;
13 extends 'Catalyst::Model';
15 with 'Catalyst::Component::InstancePerContext';
17 my $repo_dir_t = subtype NonEmptySimpleStr,
19 message { 'Cannot find repository dir: "' . $_ . '", please set up gitalist.conf, or set GITALIST_REPO_DIR environment or pass the --repo_dir parameter when starting the application' };
21 my $arrayof_repos_dir_t = subtype ArrayRef[$repo_dir_t],
23 message { 'Cannot find repository directories listed in config - these are invalid directories: ' . join(', ', $_->flatten) };
25 coerce $arrayof_repos_dir_t,
26 from NonEmptySimpleStr,
29 has config_repo_dir => (
30 isa => NonEmptySimpleStr,
32 init_arg => 'repo_dir',
33 predicate => 'has_config_repo_dir',
43 isa => $arrayof_repos_dir_t,
45 default => sub { [] },
48 _repos_count => 'count',
54 has search_recursively => (
72 $ENV{GITALIST_REPO_DIR} ?
73 $ENV{GITALIST_REPO_DIR}
74 : $self->has_config_repo_dir
75 ? $self->config_repo_dir
81 # Explode loudly at app startup time if there is no list of
82 # repositories or repos dir, rather than on first hit
83 $self->_repos_count || $self->repo_dir;
86 sub build_per_context_instance {
87 my ($self, $app) = @_;
89 my %args = (export_ok => $self->export_ok || '');
91 if($self->whitelist && -f $self->whitelist) {
92 $class = 'Gitalist::Git::CollectionOfRepositories::FromDirectory::WhiteList';
93 $args{repo_dir} = $self->repo_dir;
94 $args{whitelist} = $self->whitelist;
95 } elsif ($self->_repos_count && !$self->search_recursively) {
96 $class = 'Gitalist::Git::CollectionOfRepositories::FromListOfDirectories';
97 $args{repos} = $self->repos;
98 } elsif($self->search_recursively) {
99 $class = 'Gitalist::Git::CollectionOfRepositories::FromDirectoryRecursive';
100 $args{repo_dir} = $self->repo_dir;
102 $class = 'Gitalist::Git::CollectionOfRepositories::FromDirectory';
103 $args{repo_dir} = $self->repo_dir;
106 return $class->new(%args);
109 __PACKAGE__->meta->make_immutable;
117 Gitalist::Model::CollectionOfRepos - Model::CollectionOfRepos module for Gitalist
121 See L<Gitalist> for authors.
125 See L<Gitalist> for the license.