X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FGitalist.pm;h=edd35197c2c71d6debfa96727da686e32dd4c0af;hb=68068ba204d6ecfe6e5b56debcf2bb9fbaeffcfe;hp=9b48cb52b31aaf34ebc04fbd56621852398ad276;hpb=30e4d46d3ec8b7a731e84e3fe7ef375d33d78e61;p=catagits%2FGitalist.git diff --git a/lib/Gitalist.pm b/lib/Gitalist.pm index 9b48cb5..edd3519 100644 --- a/lib/Gitalist.pm +++ b/lib/Gitalist.pm @@ -6,7 +6,7 @@ use Catalyst::Runtime 5.80; extends 'Catalyst'; -use Catalyst qw/-Debug +use Catalyst qw/ ConfigLoader Static::Simple StackTrace/; @@ -19,17 +19,47 @@ use gitweb; __PACKAGE__->config( name => 'Gitalist', default_view => 'Default', + default_model => 'Git', # Yes, we are going to be changing this. + # Set to 1 to make your fcgi die the request after you push :) + exit_at_end_of_request_if_updated => 0, ); +{ + my $version; + my $get_version = sub { + my $gitdir = shift->path_to('.git'); + my $version = qx{cat "$gitdir/`cut -d' ' -f2 .git/HEAD`"}; + chomp $version; + return $version; + }; + + after setup_finalize => sub { + my $c = shift; + $version = $c->$get_version + if $c->config->{exit_at_end_of_request_if_updated}; + }; + after handle_request => sub { + my $c = shift; + if ($version) { + my $new = $c->$get_version; + exit 0 unless $new eq $version; + } + }; +} + + # Start the application __PACKAGE__->setup(); around uri_for => sub { my ($orig, $c) = (shift, shift); + my $project_name = $c->stash->{'Project'} && $c->stash->{'Project'}->name; + my $hash = ref($_[-1]) eq 'HASH' ? pop @_ : {}; my $params = Catalyst::Utils::merge_hashes( - { p => $c->model('Git')->project }, - ref($_[-1]) eq 'HASH' ? pop @_ : {} + { p => $hash->{p} || $project_name }, + $hash, ); + delete $params->{p} unless defined $params->{p} && length $params->{p}; (my $uri = $c->$orig(@_, $params)) =~ tr[&][;]; return $uri;