3 BEGIN { require 5.008006; }
4 use Catalyst::Runtime 5.80;
5 use namespace::autoclean;
17 our $VERSION = '0.002007';
18 $VERSION = eval $VERSION;
22 default_view => 'Default',
23 default_model => 'CollectionOfRepos',
24 use_request_uri_for_path => 1,
25 disable_component_resolution_regex_fallback => 1,
30 after prepare_path => sub {
32 if ($ctx->req->param('a')) {
33 $ctx->request->uri->path('/legacy' . $ctx->request->uri->path);
37 around uri_for => sub {
38 my ($orig, $c) = (shift, shift);
39 my $uri = $c->$orig(@_);
40 $$uri =~ tr[&][;] if defined $uri;
44 around uri_for_action => sub {
45 my ($orig, $c) = (shift, shift);
46 my $uri = $c->$orig(@_);
47 $$uri =~ s[/fragment\b][] if defined $uri;
52 my ($self, @args) = @_;
53 my $uri = $self->request->uri_with(@args);
55 $uri =~ s[/fragment\b][];
67 Gitalist - A modern git web viewer
71 perl script/gitalist_server.pl --repo_dir /home/me/code/git
75 As Gitalist follows the usual Perl module format the usual approach
76 for installation should work, e.g.:
87 You can also L<check Gitalist out from its git repository|/"GETTING GITALIST">
88 and run it, in this case you'll additionally need the author modules,
89 but no configuration will be needed as it will default to looking
90 for repositories the directory above the checkout.
94 Gitalist is a web frontend for git repositories based on
95 L<gitweb.cgi|https://git.wiki.kernel.org/index.php/Gitweb> and backed by
100 This project started off as an attempt to port I<gitweb.cgi> to a
101 Catalyst app in a piecemeal fashion. As it turns out, thanks largely
102 to Florian Ragwitz's earlier effort, it was easier to use I<gitweb.cgi>
103 as a template for building a new Catalyst application.
105 =head1 GETTING GITALIST
107 You can install Gitalist from CPAN in the usual way:
111 Alternatively, you can get Gitalist using git.
113 The canonical repository for the master branch is:
115 git://git.shadowcat.co.uk/catagits/Gitalist.git
117 Gitalist is also mirrored to GitHub at L<https://github.com/broquaint/Gitalist>,
118 and a number of people have active forks
119 with branches and/or new features in the master branch.
123 As of C<0.002001> Gitalist can now be bootstrapped to run out of its
124 own directory by installing its prerequisites locally with the help of
125 L<local::lib>. So instead of installing the prerequisites to the
126 system path with CPAN they are installed under the Gitalist directory.
128 To do this clone Gitalist from the L<Shadowcat repository mentioned
129 above|/"GETTING GITALIST"> or grab a snapshot from broquaint's GitHub repository:
131 https://github.com/broquaint/Gitalist/downloads
133 With the source acquired and unpacked run the following from within the
136 perl script/bootstrap.pl
138 This will install the necessary modules for the build process which in
139 turn installs the prerequisites locally.
141 B<NB:> The relevant bootstrap scripts aren't available in the CPAN dist
142 as the bootstrap scripts should not be installed.
144 =head1 INITIAL CONFIGURATION
146 Gitalist is configured using L<Catalyst::Plugin::Configloader>. The supplied sample
147 configuration is in L<Config::General> format, however it is possible to configure
148 Gitalist using other config file formats (such as YAML) if you prefer.
150 =head2 WHEN CHECKING GITALIST OUT OF GIT
152 Gitalist from git includes a minimal C<gitalist_local.conf>, which sets the repository
153 directory to one directory higher than the Gitalist repository.
155 This means that if you check Gitalist out next to your other git checkouts, then starting
156 the demo server needs no parameters at all:
158 Gitalist [master]$ perl script/gitalist_server.pl
159 You can connect to your server at http://localhost:3000
161 =head2 FOR CPAN INSTALLS
163 Gitalist can be supplied with a config file by setting the C<< GITALIST_CONFIG >>
164 environment variable to point to a configuration file.
166 If you install Gitalist from CPAN, a default configuration is installed along with gitalist,
167 which is complete except for a repository directory. You can get a copy of this configuration
170 cp `perl -Ilib -MGitalist -e'print Gitalist->path_to("gitalist.conf")'` gitalist.conf
172 You can then edit this configuration, adding a C<repo_dir> path and customising
173 other settings as desired.
175 You can then start the Gitalist demo server by setting C<< GITALIST_CONFIG >>. For example:
177 GITALIST_CONFIG=/usr/local/etc/gitalist.conf gitalist_server.pl
179 Alternatively, if you only want to set a repository directory and are otherwise happy with
180 the default configuration, then you can set the C<< GITALIST_REPO_DIR >> environment
181 variable, or pass the C<< --repo_dir >> flag to any of the scripts.
183 GITALIST_REPO_DIR=/home/myuser/code/git gitalist_server.pl
184 gitalist_server.pl --repo_dir home/myuser/code/git
186 The C<< GITALIST_REPO_DIR >> environment variable will override the repository directory set
187 in configuration, and will itself be overridden by he C<< --repo_dir >> flag.
191 Once you have followed the instructions above to install and configure Gitalist, you may want
192 to run it in a more production facing environment than using the single threaded developement
195 The recommended deployment method for Gitalist is FastCGI, although Gitalist can also be run
196 under L<mod_perl|https://perl.apache.org/> or as pure Perl with L<Catalyst::Engine::PreFork>.
198 Assuming that you have installed Gitalist's dependencies into a L<local::lib>, and you
199 are running from a git checkout, adding a trivial FCGI script as C<script/gitalist.fcgi>
200 (this file is specifically in C<.gitignore> so you can have your own copy):
203 exec /home/t0m/public_html/Gitalist/script/gitalist_fastcgi.pl
205 This example can be seen live here:
207 http://example.gitalist.com
211 Running Gitalist in FastCGI mode requires a webserver with FastCGI
212 support (such as apache with L<mod_fcgi|http://www.fastcgi.com/drupal/node/3>
213 or L<mod_fcgid|https://httpd.apache.org/mod_fcgid/>). Below is a sample
214 configuration using Apache2 with mod_fcgid in a dynamic configuration
215 (as opposed to static or standalone mode). More information on these modes and
216 their configuration can be found at L<Catalyst::Engine::FastCGI/"Standalone server mode">.
218 In Apache's F<mime.conf>, add C<AddHandler fcgid-script .fcgi>
219 (or C<AddHandler fastcgi-script .fcgi> for mod_fcgi).
221 And a quick VirtualHost configuration:
224 ServerName gitalist.yourdomain.com
225 DocumentRoot /path/to/gitalist.fcgi
226 <Directory "/path/to/gitalist.fcgi">
228 Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
233 # Tell Apache this is a FastCGI application
234 <Files gitalist.fcgi>
235 #change the below to fastcgi-script if using mod_fcgi
236 SetHandler fcgid-script
240 Now to access your Gitalist instance, you'll go to
241 C<gitalist.yourdomain.com/gitalist.fcgi/> (B<do not forget that trailing> C</>).
242 If you'd like a different URL, of course, you'll likely want to use
243 L<mod_rewrite|https://httpd.apache.org/docs/mod/mod_rewrite.html> or equivalent.
245 If you find the need to do some troubleshooting, you can call
246 C<http://url_to_gitalist.fcgi?dump_info=1> and/or add export C<GITALIST_DEBUG=1>
247 to the top of your F<gitalist.fcgi> file (just below the shebang line).
249 Also, note that Apache will refuse C<%2F> in Gitalist URLs
250 unless configured otherwise. Make sure C<AllowEncodedSlashes On>
251 is in your F<httpd.conf> file in order for this to run smoothly.
256 Patches are welcome, please feel free to fork on github and send pull requests, send patches
257 from git format-patch to the bug tracker, or host your own copy of gitalist somewhere and
258 ask us to pull from it.
262 Gitalist has an active irc community in C<#gitalist> on irc.perl.org, please feel free to stop
263 by and ask questions, report bugs or installation issues or generally for a chat about where
264 we plan to go with the project.
268 L<Gitalist::Controller::Root>
270 L<Gitalist::Git::Repository>
274 =head1 AUTHORS AND COPYRIGHT
276 Catalyst application:
277 © 2009 Venda Ltd and Dan Brook <broq@cpan.org>
278 © 2009, Tom Doran <bobtfish@bobtfish.net>
279 © 2009, Zac Stevens <zts@cryptocracy.com>
281 Original gitweb.cgi from which this was derived:
282 © 2005-2006, Kay Sievers <kay.sievers@vrfy.org>
283 © 2005, Christian Gierke
285 Model based on http://github.com/rafl/gitweb
286 © 2008, Florian Ragwitz
290 Licensed under GNU GPL v2