requires 'Syntax::Highlight::Engine::Kate';
requires 'Sys::Hostname';
requires 'XML::Atom';
+requires 'XML::RSS';
author_requires 'Test::NoTabs';
author_requires 'Test::Pod' => '1.14';
__PACKAGE__->config->{namespace} = '';
use IO::Capture::Stdout;
+use Sys::Hostname ();
use XML::Atom::Feed;
use XML::Atom::Entry;
-use Sys::Hostname ();
+use XML::RSS;
=head1 NAME
$feed->add_entry($entry);
}
- $c->stash(
- feed => $feed->as_xml,
- no_wrapper => 1,
- );
+ $c->response->body($feed->as_xml);
$c->response->content_type('application/atom+xml')
+ $c->response->status(200);
}
sub rss : Local {
- # FIXME - implement rss
- Carp::croak "Not implemented.";
+ my ($self, $c) = @_;
+
+ my $project = $c->stash->{Project};
+
+ my $rss = XML::RSS->new(version => '2.0');
+ $rss->channel(
+ title => lc(Sys::Hostname::hostname()) . ' - ' . Gitalist->config->{name},
+ link => $c->uri_for('summary', {p=>$project->name}),
+ language => 'en',
+ description => $project->description,
+ pubDate => DateTime->now,
+ lastBuildDate => DateTime->now,
+ );
+
+ my %logargs = (
+ sha1 => $project->head_hash,
+ count => Gitalist->config->{paging}{log} || 25,
+ ($c->req->param('f') ? (file => $c->req->param('f')) : ())
+ );
+ my $mk_title = $c->stash->{short_cmt};
+ for my $commit ($project->list_revs(%logargs)) {
+ # XXX Needs work ....
+ $rss->add_item(
+ title => $mk_title->($commit->comment),
+ permaLink => $c->uri_for(commit => {h=>$commit->sha1}),
+ description => $commit->comment,
+ );
+ }
+
+ $c->response->body($rss->as_string);
+ $c->response->content_type('application/rss+xml');
+ $c->response->status(200);
}
sub patch : Local {
$c->response->body($patch);
$c->response->content_type('text/plain');
$c->response->status(200);
-
}
sub patches : Local {
<a href="[% c.uri_for('shortlog', {h=object.sha1}) %]">shortlog</a> •
<a href="[% c.uri_for('log', {h=object.sha1}) %]">log</a> •
<a href="[% c.uri_for('commit', {h=object.sha1}) %]">commit</a> •
- <a href="[% c.uri_for('commitdiff', {h=object.sha1}) %]">commitdiff</a> •
- [% IF object.type == 'commit' %]
+ <a href="[% c.uri_for('commitdiff', {h=object.sha1}) %]">commitdiff</a>
+ [% IF object.type == 'commit' %] •
<a href="[% c.uri_for('tree', {h=object.tree_sha1, hb=object.sha1}) %]">tree</a>
[% END %]
<div class='chroma-hash'>[% INCLUDE '_chroma_hash.tt2' sha1 = object.sha1 %]</div>
test('/', 'a=tree;hb=refs/heads/master');
-local $TODO = "Action: atom is not yet implemented.";
test('/', 'a=atom');
test('/', 'a=atom;f=dir1');
test('/', 'a=atom;f=dir1/file2');
test('/', 'a=atom;h=refs/heads/master;opt=--no-merges');
test('/', 'a=atom;opt=--no-merges');
-TODO: {
- local $TODO = "Action: rss is not yet implemented.";
- test('/', 'a=rss');
- test('/', 'a=rss;f=dir1');
- test('/', 'a=rss;f=dir1/file2');
- test('/', 'a=rss;f=dir1/file2;opt=--no-merges');
- test('/', 'a=rss;f=dir1;h=refs/heads/master');
- test('/', 'a=rss;f=dir1;h=refs/heads/master;opt=--no-merges');
- test('/', 'a=rss;f=dir1;opt=--no-merges');
- test('/', 'a=rss;f=file1');
- test('/', 'a=rss;f=file1;h=refs/heads/master');
- test('/', 'a=rss;f=file1;h=refs/heads/master;opt=--no-merges');
- test('/', 'a=rss;f=file1;opt=--no-merges');
- test('/', 'a=rss;h=refs/heads/master');
- test('/', 'a=rss;h=refs/heads/master;opt=--no-merges');
- test('/', 'a=rss;opt=--no-merges');
-}
+test('/', 'a=rss');
+test('/', 'a=rss;f=dir1');
+test('/', 'a=rss;f=dir1/file2');
+test('/', 'a=rss;f=dir1/file2;opt=--no-merges');
+test('/', 'a=rss;f=dir1;h=refs/heads/master');
+test('/', 'a=rss;f=dir1;h=refs/heads/master;opt=--no-merges');
+test('/', 'a=rss;f=dir1;opt=--no-merges');
+test('/', 'a=rss;f=file1');
+test('/', 'a=rss;f=file1;h=refs/heads/master');
+test('/', 'a=rss;f=file1;h=refs/heads/master;opt=--no-merges');
+test('/', 'a=rss;f=file1;opt=--no-merges');
+test('/', 'a=rss;h=refs/heads/master');
+test('/', 'a=rss;h=refs/heads/master;opt=--no-merges');
+test('/', 'a=rss;opt=--no-merges');
done_testing;