package Gitalist::URIStructure::Repository;
use MooseX::MethodAttributes::Role;
use Try::Tiny qw/try catch/;
use namespace::autoclean;
requires 'base';
with qw/
Gitalist::URIStructure::WithLog
/;
sub find : Chained('base') PathPart('') CaptureArgs(1) {
my ($self, $c, $repos_name) = @_;
# XXX FIXME - This should be in the repository fragment controller, and the repository
# controller should just check has_repository
try {
my $repos = $c->model()->get_repository($repos_name);
$c->stash(
Repository => $repos,
HEAD => $repos->head_hash,
data => $repos,
);
}
catch {
$c->detach('/error_404');
};
}
before 'log' => sub {
my ($self, $c) = @_;
$c->stash->{Commit} = $c->stash->{Repository}->get_object($c->stash->{Repository}->head_hash);
};
sub object : Chained('find') PathPart('') Args(1) {
my ($self, $c, $sha1) = @_;
my $repo = $c->stash->{Repository};
my $obj = $c->stash->{Commit} = $repo->get_object($sha1);
my($act) = (ref($obj) || '') =~ /::(\w+)$/;
$c->res->redirect($c->uri_for_action("/ref/\L$act", [$repo->name, $obj->sha1]));
$c->res->status(301);
}
sub summary : Chained('find') PathPart('') Args() {}
sub heads : Chained('find') Args() {}
sub tags : Chained('find') Args() {}
1;