This file documents the revision history for Perl extension Gitalist.
+ - Fix so that invalid repository directory will be detected at application
+ startup and a helpful error message will be displayed.
+ - Add --repos_dir command line parameter to all of the scripts which can
+ be used to force the repository directory, overriding config and
+ environment.
+ - Add GITALIST_REPOS_DIR environment variable which will determine the
+ repository path (overriding normal config) if set.
- Change so that no default repos path is in the config when installed from
CPAN (when checked out of git, behavior of browsing AppDir/../ is
maintained).
use Moose;
use Gitalist::Git::Repo;
use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
+use Moose::Util::TypeConstraints;
use namespace::autoclean;
extends 'Catalyst::Model';
with 'Catalyst::Component::InstancePerContext';
-has repo_dir => (
+my $repo_dir_t = subtype NonEmptySimpleStr,
+ where { -d $_ },
+ message { 'Cannot find repository dir: "' . $_ . '", please set up gitalist.conf, or set GITALIST_REPO_DIR environment or pass the --repo_dir parameter when starting the application' };
+
+has config_repo_dir => (
isa => NonEmptySimpleStr,
is => 'ro',
- required => 1,
+ init_arg => 'repo_dir',
+ predicate => 'has_config_repo_dir',
);
+has repo_dir => (
+ isa => $repo_dir_t,
+ is => 'ro',
+ lazy_build => 1
+);
+
+sub _build_repo_dir {
+ my $self = shift;
+ $ENV{GITALIST_REPO_DIR} ?
+ $ENV{GITALIST_REPO_DIR}
+ : $self->has_config_repo_dir
+ ? $self->config_repo_dir
+ : '';
+}
+
+after BUILD => sub {
+ my $self = shift;
+ $self->repo_dir; # Explode loudly at app startup time if there is no repos
+ # dir, rather than on first hit
+};
+
sub build_per_context_instance {
my ($self, $app) = @_;
--- /dev/null
+package Gitalist::Script::CGI;
+use Moose;
+use namespace::autoclean;
+
+extends 'Catalyst::Script::CGI';
+with 'Gitalist::ScriptRole';
+
+__PACKAGE__->meta->make_immutable;
+
use namespace::autoclean;
extends 'Catalyst::Script::FastCGI';
+with 'Gitalist::ScriptRole';
# Only exists so that this horrible hack can happen..
# This should be in FCGI.pm, see:
--- /dev/null
+package Gitalist::Script::Server;
+use Moose;
+use namespace::autoclean;
+
+extends 'Catalyst::Script::Server';
+with 'Gitalist::ScriptRole';
+
+__PACKAGE__->meta->make_immutable;
+
--- /dev/null
+package Gitalist::ScriptRole;
+use Moose::Role;
+use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
+use namespace::autoclean;
+
+has repo_dir => (
+ isa => NonEmptySimpleStr, is => 'ro',
+ predicate => 'has_repo_dir'
+);
+
+before 'run' => sub {
+ my $self = shift;
+ if ($self->has_repo_dir) {
+ # FIXME - This seems gross. I should be able to pass things through
+ # to the app instance, but the params are sent to the engine
+ # and not actually used to construct the app.. Not that
+ # $ENV{GITLIST_REPO_DIR} is a bad move, just that that being
+ # the mechanism by which this works that is non optimum.
+ $ENV{GITALIST_REPO_DIR} = $self->repo_dir;
+ }
+};
+
+1;
+
BEGIN {
$ENV{GITALIST_CONFIG} = $Bin;
+ $ENV{GITALIST_REPO_DIR} = undef;
use_ok 'Catalyst::Test', 'Gitalist'
}
BEGIN {
$ENV{GITALIST_CONFIG} = $Bin;
+ $ENV{GITALIST_REPO_DIR} = undef;
use_ok 'Catalyst::Test', 'Gitalist'
}
--- /dev/null
+use strict;
+use warnings;
+use Test::More;
+
+use_ok('Gitalist::Script::CGI');
+use_ok('Gitalist::Script::Server');
+use_ok('Gitalist::Script::FastCGI');
+
+# FIXME - Test the script role.
+
+done_testing;
+