# don't have this config if you install from CPAN.
repo_dir __path_to(../)__
# export_ok .export-ok
+ # whitelist __path_to(../project.list)__
</Model::CollectionOfRepos>
--- /dev/null
+use MooseX::Declare;
+
+class Gitalist::Git::CollectionOfRepositories::FromDirectory::WhiteList
+ extends Gitalist::Git::CollectionOfRepositories::FromDirectory {
+ use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
+ use MooseX::Types::Path::Class qw/File Dir/;
+
+ has whitelist => (
+ isa => File,
+ is => 'ro',
+ required => 1,
+ coerce => 1,
+ );
+
+ method _build_repositories {
+ return [
+ map Gitalist::Git::Repository->new($_),
+ grep -d $_,
+ map $self->repo_dir->subdir($_), $self->whitelist->slurp(chomp => 1)
+ ];
+ }
+}
+
+__END__
+=head1 NAME
+
+Gitalist::Git::CollectionOfRepositories::FromDirectory::WhiteList - Model of a repositories listed in a file in a given directory.
+
+=head1 SYNOPSIS
+
+ my $repo = Gitalist::Git::CollectionOfRepositories::FromDirectory::WhiteList->new(
+ repo_dir => $Dir,
+ whitelist => 'projects.list',
+ );
+ my $repository_list = $repo->repositories;
+ my $first_repository = $repository_list->[0];
+ my $named_repository = $repo->get_repository('Gitalist');
+
+=head1 DESCRIPTION
+
+This class provides a list of Repositories found in the given
+directory and specified in a given whitelist file.
+
+=head1 ATTRIBUTES
+
+=head2 whitelist (C<Path::Class::File>)
+
+The file containing the available repositories. Each line specifies a
+different repository within L</repo_dir>.
+
+=head1 SEE ALSO
+
+L<Gitalist::Git::CollectionOfRepositories>,
+L<Gitalist::Git::Repository>,
+L<Gitalist::Git::CollectionOfRepositories::FromDirectory>
+
+=head1 AUTHORS
+
+See L<Gitalist> for authors.
+
+=head1 LICENSE
+
+See L<Gitalist> for the license.
+
+=cut
use Moose;
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;
isa => 'Str',
);
+has whitelist => (
+ is => 'ro',
+ isa => 'Str',
+);
+
+
sub _build_repo_dir {
my $self = shift;
$ENV{GITALIST_REPO_DIR} ?
my %args = (export_ok => $self->export_ok || '');
my $class;
- if ($self->_repos_count) {
+ 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;
}
--- /dev/null
+use FindBin qw/$Bin/;
+BEGIN {
+ my $env = "$FindBin::Bin/../script/env";
+ if (-r $env) {
+ do $env or die $@;
+ }
+}
+
+use strict;
+use warnings;
+use Test::More qw/no_plan/;
+use Test::Exception;
+
+use Data::Dumper;
+
+BEGIN { use_ok 'Gitalist::Git::CollectionOfRepositories::FromDirectory::WhiteList' }
+
+my $repo_dir = "$Bin/lib/repositories";
+my $repo = Gitalist::Git::CollectionOfRepositories::FromDirectory::WhiteList->new(
+ repo_dir => $repo_dir,
+ whitelist => "$repo_dir/projects.list",
+);
+isa_ok($repo, 'Gitalist::Git::CollectionOfRepositories::FromDirectory::WhiteList');
+
+my @repos = @{$repo->repositories};
+is(scalar @repos, 2, 'Only 2 repos found' );
+is($repos[0]->name, 'bare.git', 'Found bare.git');
+is($repos[1]->name, 'repo1', 'Found repo1');
--- /dev/null
+bare.git
+repo1