Make diff action work nicely
[catagits/Gitalist.git] / lib / Gitalist / Controller / Fragment / Commit.pm
1 package Gitalist::Controller::Fragment::Commit;
2 use Moose;
3 use namespace::autoclean;
4
5 BEGIN { extends 'Catalyst::Controller' }
6 with 'Gitalist::URIStructure::Commit';
7
8 sub base : Chained('/fragment/repository/find') PathPart('') CaptureArgs(0) {}
9
10 after diff => sub {
11     my ($self, $c) = @_;
12     my $commit = $c->stash->{Commit};
13     my($tree, $patch) = $c->stash->{Repository}->diff(
14         commit => $commit,
15         parent => $c->req->param('hp') || undef,
16         patch  => 1,
17     );
18     $c->stash(
19       diff_tree => $tree,
20       diff      => $patch,
21       # XXX Hack hack hack, see View::SyntaxHighlight
22       blobs     => [map $_->{diff}, @$patch],
23       language  => 'Diff',
24     );
25
26     $c->forward('View::SyntaxHighlight')
27       unless $c->stash->{plain};
28 };
29
30 __PACKAGE__->meta->make_immutable;