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