use SVN::SVNLook 0.02; use XML::RSS; use strict; my $repo = $ARGV[0]; my $revision = $ARGV[1]; my $title = $ARGV[2]; my $url = $ARGV[3]; my $num_rev = $ARGV[4]; my $output = $ARGV[5]; # init SVNLook my $svnlook = SVN::SVNLook->new( repo => $repo, cmd => 'svnlook' ); # init RSS my $rss = new XML::RSS( version => '1.0', encoding => 'Shift_JIS' ); $rss->channel( title => $title, link => $url ); for (my $i = $revision; $i > 0 && $i > $revision - $num_rev; $i--) { my ($author, $date, $logmessage) = $svnlook->info($i); my ($adds, $dels, $mods) = $svnlook->fileschanged($i); my $rssdate = &svndate_to_dcdate($date); &add_svnitem($rss, $i, $author, $rssdate, $logmessage, "Added", @{$adds}); &add_svnitem($rss, $i, $author, $rssdate, $logmessage, "Deleted", @{$dels}); &add_svnitem($rss, $i, $author, $rssdate, $logmessage, "Modified", @{$mods}); } sub add_svnitem { my ($rss, $revision, $author, $rssdate, $logmessage, $prefix, @changes) = @_; $prefix = "$author $prefix" if ($author ne ''); foreach my $path (@changes) { $rss->add_item( title => "$prefix \@$revision: $path", link => "$url!svn/bc/$revision/$path", description => "$logmessage", dc => { date => $rssdate, }, ); } } open(FH, ">$output") or die; print FH $rss->as_string; close(FH); sub svndate_to_dcdate { my ($date) = @_; $date =~ /^(\d\d\d\d-\d\d-\d\d) (\d\d:\d\d:\d\d) ([+-]\d\d)(\d\d)/; "$1T$2$3:$4" }