# This file is suppressed from the built dist by MANIFEST.SKIP, so you
# don't have this config if you install from CPAN.
repo_dir __path_to(../)__
+ # export_ok .export-ok
</Model::CollectionOfRepos>
use aliased 'Gitalist::Git::Repository';
has repositories => (
- is => 'ro',
- isa => ArrayRef['Gitalist::Git::Repository'],
- required => 1,
+ is => 'ro',
+ isa => ArrayRef['Gitalist::Git::Repository'],
+ required => 1,
lazy_build => 1,
);
+
+ has export_ok => (
+ is => 'ro',
+ isa => 'Str',
+ );
+
method get_repository (NonEmptySimpleStr $name) {
my $path = $self->_get_path_for_repository_name($name);
die "Couldn't get_repository '$name' - not a valid git repository."
# Determine whether a given directory is a git repo.
# http://www.kernel.org/pub/software/scm/git/docs/gitrepository-layout.html
method _is_git_repo ($dir) {
- return -f $dir->file('HEAD') || -f $dir->file('.git', 'HEAD');
+ my $has_head = -f $dir->file('HEAD') || -f $dir->file('.git', 'HEAD');
+ my $eok_file = $self->export_ok
+ or return $has_head;
+ my $is_visible = $eok_file
+ && (-f $dir->file($eok_file) || -f $dir->file('.git', $eok_file));
+
+ return $has_head && $is_visible;
}
requires qw/
_build_repositories
coerce => 1,
);
+has export_ok => (
+ is => 'ro',
+ isa => 'Str',
+);
+
sub _build_repo_dir {
my $self = shift;
$ENV{GITALIST_REPO_DIR} ?
sub build_per_context_instance {
my ($self, $app) = @_;
+
+ my %args = (export_ok => $self->export_ok || '');
+ my $class;
if ($self->_repos_count) {
- Gitalist::Git::CollectionOfRepositories::FromListOfDirectories->new(repos => $self->repos);
+ $class = 'Gitalist::Git::CollectionOfRepositories::FromListOfDirectories';
+ $args{repos} = $self->repos;
}
else {
- Gitalist::Git::CollectionOfRepositories::FromDirectoryRecursive->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;
my $repo2 = Gitalist::Git::CollectionOfRepositories::FromDirectory->new( repo_dir => $repo2_dir );
my $repo2_proj = $repo2->get_repository('repo1');
} 'relative repo_dir properly handled';
+
+my $repo_eok = Gitalist::Git::CollectionOfRepositories::FromDirectory->new(
+ repo_dir => $repo_dir,
+ export_ok => 'export-ok',
+);
+
+my @eok_repos = @{$repo_eok->repositories};
+
+is(1, @eok_repos, "Found the 1 export-ok repo");
+is('repo1', $eok_repos[0]->name, "Found repo1 export-ok repo");