1 package Gitalist::Model::CollectionOfRepos;
4 use MooseX::Types::Moose qw/Maybe ArrayRef/;
5 use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
6 use MooseX::Types::LoadableClass qw/ LoadableClass /;
7 use Moose::Util::TypeConstraints;
9 use namespace::autoclean;
11 extends 'Catalyst::Model';
13 with 'Catalyst::Component::ApplicationAttribute';
14 with 'Catalyst::Component::InstancePerContext';
16 my $repo_dir_t = subtype NonEmptySimpleStr,
18 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' };
20 my $arrayof_repos_dir_t = subtype ArrayRef[$repo_dir_t],
22 message { 'Cannot find repository directories listed in config - these are invalid directories: ' . join(', ', $_->flatten) };
24 coerce $arrayof_repos_dir_t,
25 from NonEmptySimpleStr,
28 has config_repo_dir => (
29 isa => NonEmptySimpleStr,
31 init_arg => 'repo_dir',
32 predicate => 'has_config_repo_dir',
42 isa => $arrayof_repos_dir_t,
44 default => sub { [] },
47 _repos_count => 'count',
56 builder => '_build_class',
62 if($self->whitelist && -f $self->whitelist) {
63 return 'Gitalist::Git::CollectionOfRepositories::FromDirectory::WhiteList';
64 } elsif ($self->_repos_count && !$self->search_recursively) {
65 return 'Gitalist::Git::CollectionOfRepositories::FromListOfDirectories';
66 } elsif($self->search_recursively) {
67 return 'Gitalist::Git::CollectionOfRepositories::FromDirectoryRecursive';
70 return 'Gitalist::Git::CollectionOfRepositories::FromDirectory';
76 default => sub { {} },
79 has search_recursively => (
97 my $repo_dir = $self->_application->run_options->{repo_dir};
101 : $self->has_config_repo_dir
102 ? $self->config_repo_dir
108 # Explode loudly at app startup time if there is no list of
109 # repositories or repos dir, rather than on first hit
110 $self->_repos_count || $self->repo_dir;
114 sub build_per_context_instance {
115 my ($self, $app) = @_;
118 export_ok => $self->export_ok || '',
119 $self->_has_whitelist ? (whitelist => $self->whistlist) : (),
120 $self->_has_repos ? (repos => $self->repos) : ()
121 $self->_has_repo_dir ? (repo_dir => $self->repo_dir) : ()
125 my $class = $self->class;
127 $app->log->debug("Using class '$class'");
129 return $class->new(%args);
132 __PACKAGE__->meta->make_immutable;
140 Gitalist::Model::CollectionOfRepos - Model::CollectionOfRepos module for Gitalist
144 This Model is a factory for an object implementing the L<Gitalist::Git::CollectionOfRepositories>
147 The simple options passed on the command line (like C<--repos_dir>), a class will by picked by default
148 L<Gitalist::Git::CollectionOfRepositories::FromDirectory>.
150 This can be overridden from config by explicitly passing in a class name and args for that class
153 <Model::CollectionOfRepos>
158 </Model::CollectionOfRepos>
162 See L<Gitalist> for authors.
166 See L<Gitalist> for the license.