Add the ability to provide a whitelist of repos.
[catagits/Gitalist.git] / lib / Gitalist / Model / CollectionOfRepos.pm
index 2820b53..6c2d9a1 100644 (file)
@@ -1,8 +1,9 @@
 package Gitalist::Model::CollectionOfRepos;
 
 use Moose;
-use Gitalist::Git::CollectionOfRepositories::FromDirectory;
+use Gitalist::Git::CollectionOfRepositories::FromDirectoryRecursive;
 use Gitalist::Git::CollectionOfRepositories::FromListOfDirectories;
+use Gitalist::Git::CollectionOfRepositories::FromDirectory::WhiteList;
 use MooseX::Types::Moose qw/Maybe ArrayRef/;
 use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
 use Moose::Util::TypeConstraints;
@@ -49,6 +50,17 @@ has repos => (
     coerce => 1,
 );
 
+has export_ok => (
+    is  => 'ro',
+    isa => 'Str',
+);
+
+has whitelist => (
+    is  => 'ro',
+    isa => 'Str',
+);
+
+
 sub _build_repo_dir {
     my $self = shift;
     $ENV{GITALIST_REPO_DIR} ?
@@ -67,12 +79,23 @@ after BUILD => sub {
 
 sub build_per_context_instance {
     my ($self, $app) = @_;
-    if ($self->_repos_count) {
-        Gitalist::Git::CollectionOfRepositories::FromListOfDirectories->new(repos => $self->repos);
+
+    my %args = (export_ok => $self->export_ok || '');
+    my $class;
+    if($self->whitelist && -f $self->whitelist) {
+        $class = 'Gitalist::Git::CollectionOfRepositories::FromDirectory::WhiteList';
+        $args{repo_dir}  = $self->repo_dir;
+        $args{whitelist} = $self->whitelist;
+    } elsif ($self->_repos_count) {
+        $class = 'Gitalist::Git::CollectionOfRepositories::FromListOfDirectories';
+        $args{repos} = $self->repos;
     }
     else {
-        Gitalist::Git::CollectionOfRepositories::FromDirectory->new(repo_dir => $self->repo_dir);
+        $class = 'Gitalist::Git::CollectionOfRepositories::FromDirectoryRecursive';
+        $args{repo_dir} = $self->repo_dir;
     }
+
+    return $class->new(%args);
 }
 
 __PACKAGE__->meta->make_immutable;