Merge branch 'upstream_master'
[catagits/Gitalist.git] / lib / Gitalist / URIStructure / Repository.pm
1 package Gitalist::URIStructure::Repository;
2 use MooseX::MethodAttributes::Role;
3 use Try::Tiny qw/try catch/;
4 use namespace::autoclean;
5
6 requires 'base';
7
8 with qw/
9     Gitalist::URIStructure::WithLog
10 /;
11
12 sub find : Chained('base') PathPart('') CaptureArgs(1) {
13     my ($self, $c, $repos_name) = @_;
14     # XXX FIXME - This should be in the repository fragment controller, and the repository
15     #             controller should just check has_repository
16     try {
17         my $repos = $c->model()->get_repository($repos_name);
18         $c->stash(
19             Repository => $repos,
20             HEAD => $repos->head_hash,
21         );
22     }
23     catch {
24         $c->detach('/error_404');
25     };
26 }
27
28 before 'log' => sub {
29     my ($self, $c) = @_;
30     $c->stash->{Commit} = $c->stash->{Repository}->get_object($c->stash->{Repository}->head_hash);
31 };
32
33 sub object : Chained('find') PathPart('') Args(1) {
34     my ($self, $c, $sha1) = @_;
35
36     my $repo = $c->stash->{Repository};
37     my $obj  = $c->stash->{Commit} = $repo->get_object($sha1);
38     my($act) = (ref($obj) || '') =~ /::(\w+)$/;
39
40     $c->res->redirect($c->uri_for_action("/ref/\L$act", [$repo->name, $obj->sha1]));
41     $c->res->status(301);
42
43 }
44
45 sub summary : Chained('find') PathPart('') Args(0) {}
46
47 sub heads : Chained('find') Args(0) {}
48
49 sub tags : Chained('find') Args(0) {}
50
51 1;