Merge and fix some bugs
[catagits/Gitalist.git] / lib / Gitalist.pm
index 7538376..085456c 100644 (file)
@@ -1,44 +1,69 @@
 package Gitalist;
-
-use strict;
-use warnings;
+use Moose;
+use namespace::autoclean;
 
 use Catalyst::Runtime 5.80;
 
-# Set flags and add plugins for the application
-#
-#         -Debug: activates the debug mode for very useful log messages
-#   ConfigLoader: will load the configuration from a Config::General file in the
-#                 application's home directory
-# Static::Simple: will serve static files from the application's root
-#                 directory
+extends 'Catalyst';
 
-use parent qw/Catalyst/;
-use Catalyst qw/-Debug
+use Catalyst qw/
                 ConfigLoader
-                Static::Simple/;
+                Static::Simple
+                StackTrace/;
+
 our $VERSION = '0.01';
 
 # Bring in the libified gitweb.cgi.
 use gitweb;
 
-# Configure the application.
-#
-# Note that settings in gitalist.conf (or other external
-# configuration file that you set up manually) take precedence
-# over this when using ConfigLoader. Thus configuration
-# details given here can function as a default configuration,
-# with an external configuration file acting as an override for
-# local deployment.
-
 __PACKAGE__->config(
-       name => 'Gitalist',
-       default_view => 'Default',
+    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);
+  local $c->stash->{current_model}; # FIXME - for zts..
+  my $hash = ref($_[-1]) eq 'HASH' ? pop @_ : {};
+  my $params = Catalyst::Utils::merge_hashes(
+    { p => $hash->{p} || $c->model()->project },
+    $hash,
+  );
+  (my $uri = $c->$orig(@_, $params))
+    =~ tr[&][;];
+  return $uri;
+};
+
 =head1 NAME
 
 Gitalist - Catalyst based application
@@ -55,12 +80,19 @@ Gitalist - Catalyst based application
 
 L<Gitalist::Controller::Root>, L<Catalyst>
 
-=head1 AUTHOR
+=head1 AUTHORS AND COPYRIGHT
 
-Dan Brook,,,
+  Catalyst application:
+    (C) 2009 Venda Ltd and Dan Brook <dbrook@venda.com>
+
+  Original gitweb.cgi from which this was derived:
+    (C) 2005-2006, Kay Sievers <kay.sievers@vrfy.org>
+    (C) 2005, Christian Gierke
 
 =head1 LICENSE
 
+FIXME - Is this going to be GPLv2 as per gitweb? If so this is broken..
+
 This library is free software. You can redistribute it and/or modify
 it under the same terms as Perl itself.