Allow enabling recursive repo search in config.
Dan Brook [Sun, 6 Mar 2011 15:27:14 +0000 (15:27 +0000)]
Seemed a shame to have a feature that was only enabled given a
particular directory configuration.

gitalist_local.conf
lib/Gitalist/Model/CollectionOfRepos.pm
t/model_collectionofrepos.t

index 0540379..5a445f7 100644 (file)
@@ -4,6 +4,7 @@
     # 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(../)__
+    # search_recursively 1
     # export_ok .export-ok
     # whitelist __path_to(../project.list)__
 </Model::CollectionOfRepos>
index 6c2d9a1..f631815 100644 (file)
@@ -50,6 +50,13 @@ has repos => (
     coerce => 1,
 );
 
+
+has search_recursively => (
+    is      => 'ro',
+    isa     => 'Bool',
+    default => 0,
+);
+
 has export_ok => (
     is  => 'ro',
     isa => 'Str',
@@ -60,7 +67,6 @@ has whitelist => (
     isa => 'Str',
 );
 
-
 sub _build_repo_dir {
     my $self = shift;
     $ENV{GITALIST_REPO_DIR} ?
@@ -86,11 +92,10 @@ sub build_per_context_instance {
         $class = 'Gitalist::Git::CollectionOfRepositories::FromDirectory::WhiteList';
         $args{repo_dir}  = $self->repo_dir;
         $args{whitelist} = $self->whitelist;
-    } elsif ($self->_repos_count) {
+    } elsif ($self->_repos_count && !$self->search_recursively) {
         $class = 'Gitalist::Git::CollectionOfRepositories::FromListOfDirectories';
         $args{repos} = $self->repos;
-    }
-    else {
+    } else {
         $class = 'Gitalist::Git::CollectionOfRepositories::FromDirectoryRecursive';
         $args{repo_dir} = $self->repo_dir;
     }
index 1151b65..2acb3ff 100644 (file)
@@ -99,6 +99,18 @@ throws_ok { Gitalist::Model::CollectionOfRepos->COMPONENT($ctx_gen->(), { repos
 }
 
 {
+    my $i = test_with_config({ repo_dir => "$FindBin::Bin/lib"});
+    is scalar($i->repositories->flatten), 5, 'Found 5 repos recursively';
+    isa_ok $i, 'Gitalist::Git::CollectionOfRepositories::FromDirectoryRecursive';
+}
+
+{
+    my $i = test_with_config({ repo_dir => "$FindBin::Bin/lib/repositories", search_recursively => 1 });
+    is scalar($i->repositories->flatten), 5, 'Found 5 repos recursively using config';
+    isa_ok $i, 'Gitalist::Git::CollectionOfRepositories::FromDirectoryRecursive';
+}
+
+{
     my $i = test_with_config({ repos => [
         "$FindBin::Bin/lib/repositories/bare.git",
         "$FindBin::Bin/lib/repositories/repo1",