e730524c274b42d5d1c33574c4614613579ae045
[catagits/Gitalist.git] / lib / Gitalist.pm
1 package Gitalist;
2 use Moose;
3 BEGIN { require 5.008006; }
4 use Catalyst::Runtime 5.80;
5 use namespace::autoclean;
6
7 extends 'Catalyst';
8
9 use Catalyst qw/
10                 ConfigLoader
11                 Unicode::Encoding
12                 Static::Simple
13                 StackTrace
14                 SubRequest
15 /;
16
17 our $VERSION = '0.001001';
18 $VERSION = eval $VERSION;
19
20 __PACKAGE__->config(
21     name => 'Gitalist',
22     default_view => 'Default',
23     default_model => 'CollectionOfRepos',
24 );
25
26 __PACKAGE__->setup();
27
28 after prepare_path => sub {
29     my ($ctx) = @_;
30     if ($ctx->req->param('a')) {
31         $ctx->request->uri->path('/legacy' . $ctx->request->uri->path);
32     }
33 };
34
35 around uri_for => sub {
36   my ($orig, $c) = (shift, shift);
37   my $uri = $c->$orig(@_);
38   $$uri =~ tr[&][;] if defined $uri;
39   return $uri;
40 };
41
42 around uri_for_action => sub {
43   my ($orig, $c) = (shift, shift);
44   my $uri = $c->$orig(@_);
45   $$uri =~ s[/fragment\b][] if defined $uri;
46   return $uri;
47 };
48
49 sub uri_with {
50   my ($self, @args) = @_;
51   my $uri = $self->request->uri_with(@args);
52   # Wow this awful.
53   $uri =~ s[/fragment\b][];
54   return $uri;  
55 }
56
57 1;
58
59 __END__
60
61 =head1 NAME
62
63 Gitalist - A modern git web viewer
64
65 =head1 SYNOPSIS
66
67     script/gitalist_server.pl --repo_dir /home/me/code/git
68
69 =head1 INSTALL
70
71 As Gitalist follows the usual Perl module format the usual approach
72 for installation should work e.g.
73
74   perl Makefile.PL
75   make
76   make test
77   make install
78
79 or
80
81   cpan -i Gitalist
82
83 You can also check gitalist out from git and run it, in this case you'll additionally
84 need the author modules, but no configuration will be needed as it will default to looking
85 for repositories the directory above the checkout.
86
87 =head1 DESCRIPTION
88
89 Gitalist is a web frontend for git repositories based on gitweb.cgi
90 and backed by Catalyst.
91
92 =head2 History
93
94 This project started off as an attempt to port gitweb.cgi to a
95 Catalyst app in a piecemeal fashion. As it turns out, thanks largely
96 to Florian Ragwitz's earlier effort, it was easier to use gitweb.cgi
97 as a template for building a new Catalyst application.
98
99 =head1 GETTING GITALIST
100
101 You can install Gitalist from CPAN in the usual way:
102
103     cpan -i Gitalist
104
105 Alternatively, you can get Gitalist using git.
106
107 The canonical repository for the master branch is:
108
109     git://git.shadowcat.co.uk/catagits/Gitalist.git
110
111 Gitalist is also mirrored to github, and a number of people have active forks
112 with branches and/or new features in the master branch.
113
114 =head1 INITIAL CONFIGURATION
115
116 Gitalist is configured using L<Catalyst::Plugin::Configloader>. The supplied sample
117 configuration is in L<Config::General> format, however it is possible to configure
118 Gitalist using other config file formats (such as YAML) if you prefer.
119
120 =head2 WHEN CHECKING GITALIST OUT OF GIT
121
122 Gitalist from git includes a minimal C<gitalist_local.conf>, which sets the repository
123 directory to one directory higher than the Gitalist repository.
124
125 This means that if you check Gitalist out next to your other git checkouts, then starting
126 the demo server needs no parameters at all:
127
128     Gitalist [master]$ ./script/gitalist_server.pl
129     You can connect to your server at http://localhost:3000
130
131 =head2 FOR CPAN INSTALLS
132
133 Gitalist can be supplied with a config file by setting the C<< GITALIST_CONFIG >>
134 environment variable to point to a configuration file.
135
136 If you install Gitalist from CPAN, a default configuration is installed along with gitalist,
137 which is complete except for a repository directory. You can get a copy of this configuration
138 by running:
139
140   cp `perl -Ilib -MGitalist -e'print Gitalist->path_to("gitalist.conf")'` gitalist.conf
141
142 You can then edit this confg, adding a repo_dir path and customising other settings as desired.
143
144 You can then start the Gitalist demo server by setting C<< GITALIST_CONFIG >>. For example:
145
146     GITALIST_CONFIG=/usr/local/etc/gitalist.conf gitalist_server.pl
147
148 Alternatively, if you only want to set a repository directory and are otherwise happy with
149 the default configuration, then you can set the C<< GITALIST_REPO_DIR >> environment
150 variable, or pass the C<< --repo_dir >> flag to any of the scripts.
151
152     GITALIST_REPO_DIR=/home/myuser/code/git gitalist_server.pl
153     gitalist_server.pl --repo_dir home/myuser/code/git
154
155 The C<< GITALIST_REPO_DIR >> environment variable will override the repository directory set
156 in configuration, and will itself be overridden by he C<< --repo_dir >> flag.
157
158 =head1 RUNNING
159
160 Once you have followed the instructions above to install and configure Gitalist, you may want
161 to run it in a more production facing environment than using the single threaded developement
162 server.
163
164 The recommended deployment method for Gitalist is FastCGI, although Gitalist can also be run
165 under mod_perl or as pure perl with L<Catalyst::Engine::PreFork>.
166
167 Assuming that you have installed Gitalist's dependencies into a L<local::lib>, and you
168 are running from a git checkout, adding a trivial FCGI script as C<script/gitalist.fcgi>
169 (this file is specifically in C<.gitignore> so you can have your own copy):
170
171     #!/bin/sh
172     export PERL5LIB=/home/t0m/public_html/Gitalist/lib:/home/t0m/perl5/lib/perl5:$PERL5LIB
173     exec /home/t0m/public_html/Gitalist/script/gitalist_fastcgi.pl
174
175 This example can be seen live here:
176
177     http://goatse.co.uk/~bobtfish/Gitalist/script/gitalist.fcgi/
178
179 =head1 CONTRIBUTING
180
181 Patches are welcome, please feel free to fork on github and send pull requests, send patches
182 from git format-patch to the bug tracker, or host your own copy of gitalist somewhere and
183 ask us to pull from it.
184
185 =head1 SUPPORT
186
187 Gitalist has an active irc community in C<#gitalist> on irc.perl.org, please feel free to stop
188 by and ask questions, report bugs or installation issues or generally for a chat about where
189 we plan to go with the project.
190
191 =head1 SEE ALSO
192
193 L<Gitalist::Controller::Root>
194
195 L<Gitalist::Git::Repository>
196
197 L<Catalyst>
198
199 =head1 AUTHORS AND COPYRIGHT
200
201   Catalyst application:
202     (C) 2009 Venda Ltd and Dan Brook <broq@cpan.org>
203     (C) 2009, Tom Doran <bobtfish@bobtfish.net>
204     (C) 2009, Zac Stevens <zts@cryptocracy.com>
205
206   Original gitweb.cgi from which this was derived:
207     (C) 2005-2006, Kay Sievers <kay.sievers@vrfy.org>
208     (C) 2005, Christian Gierke
209
210   Model based on http://github.com/rafl/gitweb
211     (C) 2008, Florian Ragwitz
212
213 =head1 LICENSE
214
215 Licensed under GNU GPL v2
216
217 =cut