Commit | Line | Data |
28d48c6e |
1 | package Gitalist::Controller::Repository; |
28d48c6e |
2 | use Moose; |
b132dce6 |
3 | use XML::Atom::Feed; |
4 | use XML::Atom::Entry; |
5 | use XML::RSS; |
6 | use Sys::Hostname qw/hostname/; |
28d48c6e |
7 | use namespace::autoclean; |
8 | |
b6ec181b |
9 | BEGIN { extends 'Gitalist::Controller' } |
ecb0ebe7 |
10 | with 'Gitalist::URIStructure::Repository'; |
28d48c6e |
11 | |
066e9aa4 |
12 | sub base : Chained('/base') PathPart('') CaptureArgs(0) {} |
f6a72048 |
13 | |
8fd20a28 |
14 | =head2 search |
15 | |
16 | The action for the search form. |
17 | |
18 | =cut |
19 | |
39724fd5 |
20 | sub search : Chained('find') Args(0) { |
8fd20a28 |
21 | my($self, $c) = @_; |
22 | my $repository = $c->stash->{Repository}; |
23 | # Lifted from /shortlog. |
24 | my %logargs = ( |
a349e797 |
25 | sha1 => $repository->head_hash, |
8fd20a28 |
26 | # count => Gitalist->config->{paging}{log}, |
27 | # ($c->req->param('f') ? (file => $c->req->param('f')) : ()), |
28 | search => { |
29 | type => $c->req->param('type'), |
30 | text => $c->req->param('text'), |
31 | regexp => $c->req->param('regexp') || 0, |
32 | }, |
33 | ); |
34 | |
35 | $c->stash( |
36 | # commit => $commit, |
37 | results => [$repository->list_revs(%logargs)], |
38 | # This could be added - page => $page, |
39 | ); |
40 | } |
41 | |
42 | =head2 reflog |
43 | |
44 | Expose the local reflog. This may go away. |
45 | |
46 | =cut |
47 | |
39724fd5 |
48 | sub reflog : Chained('find') Args(0) { |
8fd20a28 |
49 | my ( $self, $c ) = @_; |
50 | my @log = $c->stash->{Repository}->reflog( |
51 | '--since=yesterday' |
52 | ); |
53 | |
54 | $c->stash( |
55 | log => \@log, |
56 | ); |
57 | } |
58 | |
b132dce6 |
59 | =head2 atom |
60 | |
61 | Provides an atom feed for a given repository. |
62 | |
63 | =cut |
64 | |
65 | sub atom : Chained('find') Args(0) { |
66 | my($self, $c) = @_; |
67 | |
68 | my $feed = XML::Atom::Feed->new; |
69 | |
70 | my $host = lc hostname(); |
71 | $feed->title($host . ' - ' . Gitalist->config->{name}); |
72 | $feed->updated(~~DateTime->now); |
73 | |
74 | my $repository = $c->stash->{Repository}; |
75 | my %logargs = ( |
76 | sha1 => $repository->head_hash, |
77 | count => Gitalist->config->{paging}{log} || 25, |
78 | ); |
79 | |
80 | my $mk_title = $c->stash->{short_cmt}; |
81 | for my $commit ($repository->list_revs(%logargs)) { |
82 | my $entry = XML::Atom::Entry->new; |
83 | $entry->title( $mk_title->($commit->comment) ); |
65afba8d |
84 | $entry->id($c->uri_for_action('/ref/commit', [$repository->name, $commit->sha1])); |
b132dce6 |
85 | # XXX FIXME Needs work ... |
86 | $entry->content($commit->comment); |
87 | $feed->add_entry($entry); |
88 | } |
89 | |
90 | $c->response->body($feed->as_xml); |
91 | $c->response->content_type('application/atom+xml'); |
92 | } |
93 | |
94 | =head2 rss |
95 | |
96 | Provides an RSS feed for a given repository. |
97 | |
98 | =cut |
99 | |
100 | sub rss : Chained('find') Args(0) { |
101 | my ($self, $c) = @_; |
102 | |
103 | my $repository = $c->stash->{Repository}; |
104 | |
105 | my $rss = XML::RSS->new(version => '2.0'); |
106 | $rss->channel( |
107 | title => lc(Sys::Hostname::hostname()) . ' - ' . Gitalist->config->{name}, |
840edca5 |
108 | link => $c->uri_for_action('/repository/summary', [$repository->name]), |
b132dce6 |
109 | language => 'en', |
110 | description => $repository->description, |
111 | pubDate => DateTime->now, |
112 | lastBuildDate => DateTime->now, |
113 | ); |
114 | |
115 | my %logargs = ( |
116 | sha1 => $repository->head_hash, |
117 | count => Gitalist->config->{paging}{log} || 25, |
118 | # ($c->req->param('f') ? (file => $c->req->param('f')) : ()) |
119 | ); |
120 | my $mk_title = $c->stash->{short_cmt}; |
121 | for my $commit ($repository->list_revs(%logargs)) { |
122 | # XXX FIXME Needs work .... |
123 | $rss->add_item( |
124 | title => $mk_title->($commit->comment), |
65afba8d |
125 | permaLink => $c->uri_for_action('/ref/commit', [$repository->name, $commit->sha1]), |
b132dce6 |
126 | description => $commit->comment, |
127 | ); |
128 | } |
129 | |
130 | $c->response->body($rss->as_string); |
131 | $c->response->content_type('application/rss+xml'); |
132 | } |
133 | |
28d48c6e |
134 | __PACKAGE__->meta->make_immutable; |