Bump version to 0.004001 and update Changes.
[catagits/Gitalist.git] / lib / Gitalist.pm
index d87e009..e200d1a 100644 (file)
@@ -1,7 +1,8 @@
 package Gitalist;
 use Moose;
 BEGIN { require 5.008006; }
-use Catalyst::Runtime 5.80;
+use Catalyst::Runtime 5.90006;
+use Gitalist::Git::Util;
 use namespace::autoclean;
 
 extends 'Catalyst';
@@ -14,7 +15,7 @@ use Catalyst qw/
                 SubRequest
 /;
 
-our $VERSION = '0.002006';
+our $VERSION = '0.004001';
 $VERSION = eval $VERSION;
 
 __PACKAGE__->config(
@@ -29,8 +30,13 @@ __PACKAGE__->setup();
 
 after prepare_path => sub {
     my ($ctx) = @_;
+    my $path = $ctx->req->uri->path;
     if ($ctx->req->param('a')) {
-        $ctx->request->uri->path('/legacy' . $ctx->request->uri->path);
+        $ctx->req->uri->path("/legacy$path");
+    }
+
+    if($path =~ s/[.]json$// && $ctx->req->content_type eq 'application/json') {
+        $ctx->req->uri->path($path);
     }
 };
 
@@ -41,21 +47,20 @@ around uri_for => sub {
   return $uri;
 };
 
-around uri_for_action => sub {
-  my ($orig, $c) = (shift, shift);
-  my $uri = $c->$orig(@_);
-  $$uri =~ s[/fragment\b][] if defined $uri;
-  return $uri;
-};
-
 sub uri_with {
   my ($self, @args) = @_;
   my $uri = $self->request->uri_with(@args);
   # Wow this awful.
   $uri =~ s[/fragment\b][];
-  return $uri;  
+  return $uri;
 }
 
+after setup_finalize => sub {
+    # At app startup, ensure we can find a git binary, rather than
+    # lazily breaking later at request time.
+    Gitalist::Git::Util->new->_git; # FIXME - should not be a private method
+};
+
 1;
 
 __END__
@@ -68,21 +73,21 @@ Gitalist - A modern git web viewer
 
 =head1 SYNOPSIS
 
-    script/gitalist_server.pl --repo_dir /home/me/code/git
+    perl script/gitalist_server.pl --repo_dir /home/me/code/git
 
 =head1 INSTALL
 
 As Gitalist follows the usual Perl module format the usual approach
 for installation should work, e.g.:
 
-  perl Makefile.PL
-  make
-  make test
-  make install
+    perl Makefile.PL
+    make
+    make test
+    make install
 
 or
 
-  cpan -i Gitalist
+    cpan -i Gitalist
 
 You can also L<check Gitalist out from its git repository|/"GETTING GITALIST">
 and run it, in this case you'll additionally need the author modules,
@@ -155,7 +160,7 @@ directory to one directory higher than the Gitalist repository.
 This means that if you check Gitalist out next to your other git checkouts, then starting
 the demo server needs no parameters at all:
 
-    Gitalist [master]$ ./script/gitalist_server.pl
+    Gitalist [master]$ perl script/gitalist_server.pl
     You can connect to your server at http://localhost:3000
 
 =head2 FOR CPAN INSTALLS
@@ -206,6 +211,84 @@ This example can be seen live here:
 
     http://example.gitalist.com
 
+=head2 Plack
+
+If you would like to run Gitalist under L<Plack> then one need only
+make use of L<plackup|search.cpan.org/perldoc?plackup> and the
+C<.psgi> found under C<scripts/>:
+
+    plackup script/gitalist_app.psgi
+
+=head1 CONFIGURATION
+
+The Gitalist config is loaded with L<Catalyst::Plugin::ConfigLoader>
+and the available config options are:
+
+=over
+
+=item no_gravatars
+
+If true don't display gravatars. May be desirable if you are worried about
+leaking repo names via the browser referer headers.
+
+=back
+
+=head2 Model::CollectionOfRepos
+
+=over
+
+=item repo_dir
+
+A directory containing the directories to show.
+
+=item repos
+
+A list of directories containing repositories to show.
+
+=item search_recursively
+
+A boolean indicating whether to always search recursively for
+repositories within C<repo_dir>.
+
+=item whitelist
+
+Path a file containing a list of repositories that can be shown. Each
+line in the file will represent the name of a repo to show e.g
+
+  Gitalist
+  some-bare-repo.git
+
+This is compatible with C<gitweb>'s C<projects.list>.
+
+=item export_ok
+
+If provided every must contain a file of the same name to be
+visible. This is similar to C<gitweb>'s functionality.
+
+=item class
+
+If you want a different way of surfacing repositories you can use your
+own model (i.e something that composes
+L<Gitalist::Git::CollectionOfRepositories>) and specify the class name with
+this config option.
+
+=item args
+
+Any additional arguments to be passed into the Model constructor, only
+of use when used in conjunction with C<class> (see above).
+
+=back
+
+=head2 paging
+
+=over
+
+=item log
+
+The number of commits to show in the summary, shortlog and longlog views.
+
+=back
+
 =head2 FASTCGI
 
 Running Gitalist in FastCGI mode requires a webserver with FastCGI
@@ -246,10 +329,16 @@ If you find the need to do some troubleshooting, you can call
 C<http://url_to_gitalist.fcgi?dump_info=1> and/or add export C<GITALIST_DEBUG=1>
 to the top of your F<gitalist.fcgi> file (just below the shebang line).
 
-Also, note that Apache will refuse C<%2F> in Gitalist URLs
-unless configured otherwise. Make sure C<AllowEncodedSlashes On>
-is in your F<httpd.conf> file in order for this to run smoothly.
+=head2 Apache config
+
+Apache will refuse C<%2F> in Gitalist URLs unless configured otherwise. Make
+sure C<AllowEncodedSlashes On> is in your F<httpd.conf> file in order for
+this to run smoothly.
+
+To have the static content served statically by Apache, instead of
+Gitalist, then add something like following line to your F<httpd.conf>:
 
+    Alias /static  /usr/local/share/perl/5.10.1/Gitalist/root/static
 
 =head1 CONTRIBUTING