1 package Gitalist::Model::CollectionOfRepos;
4 use MooseX::Types::Moose qw/Undef Maybe ArrayRef Str/;
5 use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
6 use MooseX::Types::LoadableClass qw/ LoadableClass /;
7 use Gitalist::Git::Types qw/ ArrayRefOfDirs Dir DirOrUndef /;
8 use Moose::Util::TypeConstraints;
10 use Path::Class qw/ dir /;
11 use namespace::autoclean;
14 extends 'Catalyst::Model';
21 builder => '_build_class',
27 if($self->whitelist && -f $self->whitelist) {
28 return 'Gitalist::Git::CollectionOfRepositories::FromDirectory::WhiteList';
30 elsif($self->search_recursively) {
31 return 'Gitalist::Git::CollectionOfRepositories::FromDirectoryRecursive';
33 elsif ($self->repos) {
34 return 'Gitalist::Git::CollectionOfRepositories::FromListOfDirectories';
36 elsif ($self->repo_dir) {
37 return 'Gitalist::Git::CollectionOfRepositories::FromDirectory';
40 croak "Don't know where to get repositores from. Try a --repo_dir option, or setting up config";
47 default => sub { {} },
50 has search_recursively => (
56 ## XX What is this for?
65 predicate => '_has_whitelist',
68 # Simple directory of repositories (for list)
73 builder => '_build_repo_dir',
77 # Directory containing list of one or more repositories
80 isa => ArrayRefOfDirs,
86 return $ENV{GITALIST_REPO_DIR};
94 if ($self->repo_dir) { $self->repo_dir->resolve }
98 my($class, $ctx, @args) = @_;
100 my $self = $class->new($ctx, @args);
103 export_ok => $self->export_ok || '',
104 repos => $self->repos,
105 repo_dir => $self->repo_dir,
106 $self->_has_whitelist ? (whitelist => $self->whitelist) : (),
110 my $model_class = $self->class;
112 $ctx->log->debug("Building $model_class with " . join(", ", map { $_ . " => " . (defined($args{$_}) ? "'" . $args{$_} . "'" : 'undef') } keys %args))
115 my $model = $model_class->new(\%args);
117 $ctx->log->debug("Using class '$model_class' " . $model->debug_string) if $ctx->debug;
122 __PACKAGE__->meta->make_immutable;
130 Gitalist::Model::CollectionOfRepos - Model::CollectionOfRepos module for Gitalist
134 This Model is a factory for an object implementing the L<Gitalist::Git::CollectionOfRepositories>
137 The simple options passed on the command line (like C<--repo_dir>), a class will by picked by default
138 L<Gitalist::Git::CollectionOfRepositories::FromDirectory>.
140 This can be overridden from config by explicitly passing in a class name and args for that class
143 <Model::CollectionOfRepos>
148 </Model::CollectionOfRepos>
152 See L<Gitalist> for authors.
156 See L<Gitalist> for the license.