Search a list of potential template directories, including the current project base.
masto [Wed, 6 Jan 2010 16:52:53 +0000 (11:52 -0500)]
lib/Catalyst/Helper.pm

index d201df8..86ba60f 100644 (file)
@@ -34,19 +34,28 @@ Catalyst::Helper - Bootstrap a Catalyst application
 
 sub get_sharedir_file {
     my ($self, @filename) = @_;
-    my $dist_dir;
+
+    my @try_dirs;
+    if (exists $self->{base}) {
+        push @try_dirs, $self->{base};
+    }
     if (exists $ENV{CATALYST_DEVEL_SHAREDIR}) {
-        $dist_dir = $ENV{CATALYST_DEVEL_SHAREDIR};
+        push @try_dirs, $ENV{CATALYST_DEVEL_SHAREDIR}
     }
-    elsif (-d "inc/.author" && -f "lib/Catalyst/Helper.pm"
+    if (-d "inc/.author" && -f "lib/Catalyst/Helper.pm"
             ) { # Can't use sharedir if we're in a checkout
                 # this feels horrible, better ideas?
-        $dist_dir = 'share';
+        push @try_dirs, 'share';
     }
     else {
-        $dist_dir = dist_dir('Catalyst-Devel');
+        push @try_dirs, dist_dir('Catalyst-Devel');
+    }
+
+    my $file;
+    foreach my $dist_dir (@try_dirs) {
+      $file = file( $dist_dir, @filename);
+      last if -r $file;
     }
-    my $file = file( $dist_dir, @filename);
     Carp::confess("Cannot find $file") unless -r $file;
     my $contents = $file->slurp;
     return $contents;