Provide option to disable gravatars.
[catagits/Gitalist.git] / lib / Gitalist.pm
CommitLineData
89de6a33 1package Gitalist;
42fe5d11 2use Moose;
775e96e0 3BEGIN { require 5.008006; }
89de6a33 4use Catalyst::Runtime 5.80;
775e96e0 5use namespace::autoclean;
89de6a33 6
42fe5d11 7extends 'Catalyst';
89de6a33 8
43d4a724 9use Catalyst qw/
89de6a33 10 ConfigLoader
fac828e0 11 Unicode::Encoding
d5cc37a4 12 Static::Simple
fac828e0 13 StackTrace
16bdb8df 14 SubRequest
fac828e0 15/;
61b56ed6 16
4c6b2fdb 17our $VERSION = '0.003004';
775e96e0 18$VERSION = eval $VERSION;
89de6a33 19
d3feefcf 20__PACKAGE__->config(
61b56ed6 21 name => 'Gitalist',
22 default_view => 'Default',
7bf1a6f5 23 default_model => 'CollectionOfRepos',
e77519b1 24 use_request_uri_for_path => 1,
25 disable_component_resolution_regex_fallback => 1,
d3feefcf 26);
89de6a33 27
89de6a33 28__PACKAGE__->setup();
29
319537bf 30after prepare_path => sub {
31 my ($ctx) = @_;
f41fc741 32 my $path = $ctx->req->uri->path;
319537bf 33 if ($ctx->req->param('a')) {
f41fc741 34 $ctx->req->uri->path("/legacy$path");
35 }
36
37 if($path =~ s/[.]json$// && $ctx->req->content_type eq 'application/json') {
38 $ctx->req->uri->path($path);
319537bf 39 }
40};
41
4df2f62f 42around uri_for => sub {
43 my ($orig, $c) = (shift, shift);
df49ca46 44 my $uri = $c->$orig(@_);
74d26472 45 $$uri =~ tr[&][;] if defined $uri;
4df2f62f 46 return $uri;
47};
61b56ed6 48
906a2dd2 49sub 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
775e96e0 571;
58
59__END__
60
8004a936 61=encoding UTF-8
62
89de6a33 63=head1 NAME
64
775e96e0 65Gitalist - A modern git web viewer
89de6a33 66
67=head1 SYNOPSIS
68
3a7cd273 69 perl script/gitalist_server.pl --repo_dir /home/me/code/git
89de6a33 70
b6d010e1 71=head1 INSTALL
72
73As Gitalist follows the usual Perl module format the usual approach
8004a936 74for installation should work, e.g.:
b6d010e1 75
3a7cd273 76 perl Makefile.PL
77 make
78 make test
79 make install
b6d010e1 80
63f34424 81or
82
3a7cd273 83 cpan -i Gitalist
63f34424 84
8004a936 85You can also L<check Gitalist out from its git repository|/"GETTING GITALIST">
86and run it, in this case you'll additionally need the author modules,
87but no configuration will be needed as it will default to looking
63f34424 88for repositories the directory above the checkout.
b6d010e1 89
89de6a33 90=head1 DESCRIPTION
91
8004a936 92Gitalist is a web frontend for git repositories based on
93L<gitweb.cgi|https://git.wiki.kernel.org/index.php/Gitweb> and backed by
94L<Catalyst>.
b6d010e1 95
96=head2 History
97
8004a936 98This project started off as an attempt to port I<gitweb.cgi> to a
b6d010e1 99Catalyst app in a piecemeal fashion. As it turns out, thanks largely
8004a936 100to Florian Ragwitz's earlier effort, it was easier to use I<gitweb.cgi>
b6d010e1 101as a template for building a new Catalyst application.
89de6a33 102
69175e49 103=head1 GETTING GITALIST
104
105You can install Gitalist from CPAN in the usual way:
106
107 cpan -i Gitalist
108
109Alternatively, you can get Gitalist using git.
110
111The canonical repository for the master branch is:
112
1d46f550 113 git://git.shadowcat.co.uk/catagits/Gitalist.git
69175e49 114
8004a936 115Gitalist is also mirrored to GitHub at L<https://github.com/broquaint/Gitalist>,
116and a number of people have active forks
69175e49 117with branches and/or new features in the master branch.
118
ccb79ac8 119=head1 BOOTSTRAPPING
120
121As of C<0.002001> Gitalist can now be bootstrapped to run out of its
122own directory by installing its prerequisites locally with the help of
123L<local::lib>. So instead of installing the prerequisites to the
124system path with CPAN they are installed under the Gitalist directory.
125
8004a936 126To do this clone Gitalist from the L<Shadowcat repository mentioned
127above|/"GETTING GITALIST"> or grab a snapshot from broquaint's GitHub repository:
ccb79ac8 128
8004a936 129 https://github.com/broquaint/Gitalist/downloads
ccb79ac8 130
131With the source acquired and unpacked run the following from within the
132Gitalist directory:
133
e2c6e7c1 134 perl script/bootstrap.pl
ccb79ac8 135
136This will install the necessary modules for the build process which in
137turn installs the prerequisites locally.
138
8004a936 139B<NB:> The relevant bootstrap scripts aren't available in the CPAN dist
e2c6e7c1 140as the bootstrap scripts should not be installed.
141
69175e49 142=head1 INITIAL CONFIGURATION
143
144Gitalist is configured using L<Catalyst::Plugin::Configloader>. The supplied sample
145configuration is in L<Config::General> format, however it is possible to configure
146Gitalist using other config file formats (such as YAML) if you prefer.
147
148=head2 WHEN CHECKING GITALIST OUT OF GIT
149
150Gitalist from git includes a minimal C<gitalist_local.conf>, which sets the repository
151directory to one directory higher than the Gitalist repository.
152
153This means that if you check Gitalist out next to your other git checkouts, then starting
154the demo server needs no parameters at all:
155
3a7cd273 156 Gitalist [master]$ perl script/gitalist_server.pl
69175e49 157 You can connect to your server at http://localhost:3000
158
159=head2 FOR CPAN INSTALLS
63f34424 160
161Gitalist can be supplied with a config file by setting the C<< GITALIST_CONFIG >>
162environment variable to point to a configuration file.
163
69175e49 164If you install Gitalist from CPAN, a default configuration is installed along with gitalist,
165which is complete except for a repository directory. You can get a copy of this configuration
166by running:
63f34424 167
168 cp `perl -Ilib -MGitalist -e'print Gitalist->path_to("gitalist.conf")'` gitalist.conf
169
8004a936 170You can then edit this configuration, adding a C<repo_dir> path and customising
171other settings as desired.
69175e49 172
173You can then start the Gitalist demo server by setting C<< GITALIST_CONFIG >>. For example:
174
175 GITALIST_CONFIG=/usr/local/etc/gitalist.conf gitalist_server.pl
63f34424 176
177Alternatively, if you only want to set a repository directory and are otherwise happy with
1d46f550 178the default configuration, then you can set the C<< GITALIST_REPO_DIR >> environment
3d0e045e 179variable, or pass the C<< --repo_dir >> flag to any of the scripts.
63f34424 180
1d46f550 181 GITALIST_REPO_DIR=/home/myuser/code/git gitalist_server.pl
3d0e045e 182 gitalist_server.pl --repo_dir home/myuser/code/git
69175e49 183
1d46f550 184The C<< GITALIST_REPO_DIR >> environment variable will override the repository directory set
3d0e045e 185in configuration, and will itself be overridden by he C<< --repo_dir >> flag.
63f34424 186
69175e49 187=head1 RUNNING
188
189Once you have followed the instructions above to install and configure Gitalist, you may want
190to run it in a more production facing environment than using the single threaded developement
191server.
192
193The recommended deployment method for Gitalist is FastCGI, although Gitalist can also be run
8004a936 194under L<mod_perl|https://perl.apache.org/> or as pure Perl with L<Catalyst::Engine::PreFork>.
69175e49 195
196Assuming that you have installed Gitalist's dependencies into a L<local::lib>, and you
197are running from a git checkout, adding a trivial FCGI script as C<script/gitalist.fcgi>
198(this file is specifically in C<.gitignore> so you can have your own copy):
199
200 #!/bin/sh
69175e49 201 exec /home/t0m/public_html/Gitalist/script/gitalist_fastcgi.pl
202
203This example can be seen live here:
204
f9d6e4f1 205 http://example.gitalist.com
8004a936 206
cc02cf5a 207=head2 Plack
208
209If you would like to run Gitalist under L<Plack> then one need only
210make use of L<plackup|search.cpan.org/perldoc?plackup> and the
211C<.psgi> found under C<scripts/>:
212
213 plackup script/gitalist_app.psgi
214
5111a8ab 215=head1 CONFIGURATION
216
217The Gitalist config is loaded with L<Catalyst::Plugin::ConfigLoader>
218and the available config options are:
219
225bd36d 220=over
221
222=item no_gravatars
223
224If true don't display gravatars. May be desirable if you are worried about
225leaking repo names via the browser referer headers.
226
227=back
228
5111a8ab 229=head2 Model::CollectionOfRepos
230
231=over
232
233=item git
234
235Path to the C<git> binary.
236
237=item repo_dir
238
239A directory containing the directories to show.
240
07ee9dc1 241=item repos
242
243A list of directories containing repositories to show.
5111a8ab 244
245=item search_recursively
246
247A boolean indicating whether to always search recursively for
248repositories within C<repo_dir>.
249
250=item whitelist
251
252Path a file containing a list of repositories that can be shown. Each
253line in the file will represent the name of a repo to show e.g
254
255 Gitalist
256 some-bare-repo.git
257
258This is compatible with C<gitweb>'s C<projects.list>.
259
260=item export_ok
261
262If provided every must contain a file of the same name to be
263visible. This is similar to C<gitweb>'s functionality.
264
265=back
266
267=head2 paging
268
269=over
270
271=item log
272
07ee9dc1 273The number of commits to show in the summary, shortlog and longlog views.
5111a8ab 274
275=back
276
321b3fbf 277=head2 FASTCGI
8004a936 278
279Running Gitalist in FastCGI mode requires a webserver with FastCGI
280support (such as apache with L<mod_fcgi|http://www.fastcgi.com/drupal/node/3>
281or L<mod_fcgid|https://httpd.apache.org/mod_fcgid/>). Below is a sample
282configuration using Apache2 with mod_fcgid in a dynamic configuration
283(as opposed to static or standalone mode). More information on these modes and
284their configuration can be found at L<Catalyst::Engine::FastCGI/"Standalone server mode">.
285
286In Apache's F<mime.conf>, add C<AddHandler fcgid-script .fcgi>
287(or C<AddHandler fastcgi-script .fcgi> for mod_fcgi).
288
289And a quick VirtualHost configuration:
290
291 <VirtualHost *:80>
292 ServerName gitalist.yourdomain.com
293 DocumentRoot /path/to/gitalist.fcgi
294 <Directory "/path/to/gitalist.fcgi">
57f9f654 295 AllowOverride all
296 Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
297 Order allow,deny
298 Allow from all
8004a936 299 </Directory>
321b3fbf 300
301 # Tell Apache this is a FastCGI application
302 <Files gitalist.fcgi>
57f9f654 303 #change the below to fastcgi-script if using mod_fcgi
321b3fbf 304 SetHandler fcgid-script
305 </Files>
8004a936 306 </VirtualHost>
307
308Now to access your Gitalist instance, you'll go to
309C<gitalist.yourdomain.com/gitalist.fcgi/> (B<do not forget that trailing> C</>).
310If you'd like a different URL, of course, you'll likely want to use
311L<mod_rewrite|https://httpd.apache.org/docs/mod/mod_rewrite.html> or equivalent.
312
313If you find the need to do some troubleshooting, you can call
314C<http://url_to_gitalist.fcgi?dump_info=1> and/or add export C<GITALIST_DEBUG=1>
315to the top of your F<gitalist.fcgi> file (just below the shebang line).
316
b7b5f98e 317=head2 Apache config
318
319Apache will refuse C<%2F> in Gitalist URLs unless configured otherwise. Make
320sure C<AllowEncodedSlashes On> is in your F<httpd.conf> file in order for
321this to run smoothly.
322
323To have the static content served statically by Apache, instead of
324Gitalist, then add something like following line to your F<httpd.conf>:
325
326 Alias /static /usr/local/share/perl/5.10.1/Gitalist/root/static
67388737 327
69175e49 328=head1 CONTRIBUTING
329
330Patches are welcome, please feel free to fork on github and send pull requests, send patches
331from git format-patch to the bug tracker, or host your own copy of gitalist somewhere and
332ask us to pull from it.
333
334=head1 SUPPORT
335
336Gitalist has an active irc community in C<#gitalist> on irc.perl.org, please feel free to stop
337by and ask questions, report bugs or installation issues or generally for a chat about where
338we plan to go with the project.
339
89de6a33 340=head1 SEE ALSO
341
b6d010e1 342L<Gitalist::Controller::Root>
343
44a9ed75 344L<Gitalist::Git::Repository>
b6d010e1 345
346L<Catalyst>
89de6a33 347
42fe5d11 348=head1 AUTHORS AND COPYRIGHT
89de6a33 349
42fe5d11 350 Catalyst application:
8004a936 351 © 2009 Venda Ltd and Dan Brook <broq@cpan.org>
352 © 2009, Tom Doran <bobtfish@bobtfish.net>
353 © 2009, Zac Stevens <zts@cryptocracy.com>
42fe5d11 354
355 Original gitweb.cgi from which this was derived:
8004a936 356 © 2005-2006, Kay Sievers <kay.sievers@vrfy.org>
357 © 2005, Christian Gierke
89de6a33 358
b6d010e1 359 Model based on http://github.com/rafl/gitweb
8004a936 360 © 2008, Florian Ragwitz
89de6a33 361
b6d010e1 362=head1 LICENSE
42fe5d11 363
b6d010e1 364Licensed under GNU GPL v2