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