1 package Gitalist::Model::GitRepos;
4 use Gitalist::Git::Repo;
5 use Gitalist::Git::CollectionOfProjects::FromListOfDirectories;
6 use MooseX::Types::Moose qw/Maybe ArrayRef/;
7 use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
8 use Moose::Util::TypeConstraints;
9 use namespace::autoclean;
11 extends 'Catalyst::Model';
13 with 'Catalyst::Component::InstancePerContext';
15 my $repo_dir_t = subtype NonEmptySimpleStr,
17 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' };
19 has config_repo_dir => (
20 isa => NonEmptySimpleStr,
22 init_arg => 'repo_dir',
23 predicate => 'has_config_repo_dir',
27 isa => Maybe[$repo_dir_t],
33 isa => ArrayRef[$repo_dir_t],
35 default => sub { [] },
38 _repos_count => 'count',
44 $ENV{GITALIST_REPO_DIR} ?
45 $ENV{GITALIST_REPO_DIR}
46 : $self->has_config_repo_dir
47 ? $self->config_repo_dir
53 # Explode loudly at app startup time if there is no list of
54 # projects or repos dir, rather than on first hit
55 $self->_repos_count || $self->repo_dir;
58 sub build_per_context_instance {
59 my ($self, $app) = @_;
60 if ($self->_repos_count) {
61 Gitalist::Git::CollectionOfProjects::FromListOfDirectories->new(repos => $self->repos);
64 Gitalist::Git::Repo->new(repo_dir => $self->repo_dir);
68 __PACKAGE__->meta->make_immutable;
74 See L<Gitalist> for authors.
78 See L<Gitalist> for the license.