1 package Gitalist::URIStructure::Ref;
2 use MooseX::MethodAttributes::Role;
4 use namespace::autoclean;
9 Gitalist::URIStructure::WithLog
14 confess("No repository in the stash")
15 unless $c->stash->{Repository};
18 sub find : Chained('base') PathPart('') CaptureArgs(1) {
19 my ($self, $c, $sha1part) = @_;
20 # FIXME - Should not be here!
21 $c->stash->{Commit} = $c->stash->{Repository}->get_object_or_head($sha1part)
22 or $c->detach('/error404', "Couldn't find a object for '$sha1part' in XXXX!");
25 sub diff : Chained('find') CaptureArgs(0) {}
27 sub diff_fancy : Chained('diff') PathPart('') Args() {
28 my($self, $c, $comparison, @rest) = @_;
29 # FIXME - This ain't pretty
30 $c->stash->{parent} = $comparison
32 $c->stash->{filename} = $rest[0]
36 sub diff_plain : Chained('diff') PathPart('plain') Args(0) {
38 $c->stash->{no_wrapper} = 1;
41 sub commit : Chained('find') PathPart('commit') Args(0) {}
43 sub tree : Chained('find') Does('FilenameArgs') Args() {}
45 sub find_blob : Action {
48 my $h = $c->stash->{Repository}->hash_by_path($c->stash->{Commit}->sha1, $c->stash->{filename})
49 || die "No file or sha1 provided.";
50 $c->stash(blob => $c->stash->{Repository}->get_object($h)->content);
53 sub blob : Chained('find') Does('FilenameArgs') Args() {
55 $c->forward('find_blob');
58 sub blame : Chained('find') Does('FilenameArgs') Args() {}
60 sub history : Chained('find') Does('FilenameArgs') Args() {}