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 {
47 my($repo, $object) = @{$c->{stash}}{qw(Repository Commit)};
49 my $h = $object->isa('Gitalist::Git::Object::Commit')
50 ? $repo->hash_by_path($object->sha1, $c->stash->{filename})
51 : $object->isa('Gitalist::Git::Object::Blob')
53 : die "Unknown object type for '${\$object->sha1}'";
54 die "No file or sha1 provided."
56 $c->stash(blob => $repo->get_object($h)->content);
59 sub blob : Chained('find') Does('FilenameArgs') Args() {
61 $c->forward('find_blob');
64 sub blame : Chained('find') Does('FilenameArgs') Args() {}
66 sub history : Chained('find') Does('FilenameArgs') Args() {}