Implement auto restart when the app is updated
[catagits/Gitalist.git] / lib / Gitalist.pm
1 package Gitalist;
2 use Moose;
3 use namespace::autoclean;
4
5 use Catalyst::Runtime 5.80;
6
7 extends 'Catalyst';
8
9 use Catalyst qw/
10                 ConfigLoader
11                 Static::Simple
12                 StackTrace/;
13
14 our $VERSION = '0.01';
15
16 # Bring in the libified gitweb.cgi.
17 use gitweb;
18
19 __PACKAGE__->config(
20     name => 'Gitalist',
21     default_view => 'Default',
22     default_model => 'Git', # Yes, we are going to be changing this.
23     # Set to 1 to make your fcgi die the request after you push :)
24     exit_at_end_of_request_if_updated => 0,
25 );
26
27 {
28     my $version;
29     my $get_version = sub {
30         my $gitdir = shift->path_to('.git');
31         my $version = qx{cat "$gitdir/`cut -d' ' -f2 .git/HEAD`"};
32         chomp $version;
33         return $version;
34     };
35
36     after setup_finalize => sub {
37         my $c = shift;
38         $version = $c->$get_version
39             if $c->config->{exit_at_end_of_request_if_updated};
40     };
41     after handle_request => sub {
42         my $c = shift;
43         if ($version) {
44             my $new = $c->$get_version;
45             exit 0 unless $new eq $version;
46         }
47     };
48 }
49
50
51 # Start the application
52 __PACKAGE__->setup();
53
54 around uri_for => sub {
55   my ($orig, $c) = (shift, shift);
56   my $params = Catalyst::Utils::merge_hashes(
57     { p => $c->model('Git')->project },
58     ref($_[-1]) eq 'HASH' ? pop @_ : {}
59   );
60   (my $uri = $c->$orig(@_, $params))
61     =~ tr[&][;];
62   return $uri;
63 };
64
65 =head1 NAME
66
67 Gitalist - Catalyst based application
68
69 =head1 SYNOPSIS
70
71     script/gitalist_server.pl
72
73 =head1 DESCRIPTION
74
75 [enter your description here]
76
77 =head1 SEE ALSO
78
79 L<Gitalist::Controller::Root>, L<Catalyst>
80
81 =head1 AUTHORS AND COPYRIGHT
82
83   Catalyst application:
84     (C) 2009 Venda Ltd and Dan Brook <dbrook@venda.com>
85
86   Original gitweb.cgi from which this was derived:
87     (C) 2005-2006, Kay Sievers <kay.sievers@vrfy.org>
88     (C) 2005, Christian Gierke
89
90 =head1 LICENSE
91
92 FIXME - Is this going to be GPLv2 as per gitweb? If so this is broken..
93
94 This library is free software. You can redistribute it and/or modify
95 it under the same terms as Perl itself.
96
97 =cut
98
99 1;