#!/usr/bin/perl
use XML::RSS;
use XML::DOM;
use Date::Manip qw(ParseDate UnixDate);
use CGI qw(escapeHTML);
$SVN="/home/lodewijk/svn/bin/svn";
$SVNLOOK="/home/lodewijk/svn/bin/svnlook";
$PATH_TO_REPO_FS="/data3/subversion/repos";
$PATH_TO_REPO_URL="http://localhost:8080/svn/";
$PATH_TO_SVN_RDF="/home/lodewijk/apache2/htdocs/svn.rdf";
$rss = new XML::RSS (version => '2.0');
$rss->channel(
title => "WLeiden SVN Repository",
link => "http://www.wirelessleiden.nl/",
description => "WirelessLeiden SVN Repository Commit Feed",
copyright => "Copyright 2004, Stichting WirelessLeiden",
webMaster => "lodewijk\@wirelessleiden.nl"
);
$rss->image(
url => "http://www.wirelessleiden.nl/_images/logo.png",
title => "Logo",
link => "http://www.wirelessleiden.nl/",
width => 130,
height => 82
);
sub get_text {
my ($n, $tn) = @_;
$t = $n->getElementsByTagName($tn)->item(0)->getFirstChild;
return defined($t) ? $t->getNodeValue : '';
}
if (`$SVNLOOK youngest $PATH_TO_REPO_FS` =~ /([0-9]+)/) {
$youngest = $1;
$ten_ago = $youngest - 10;
$xmllog = `$SVN log --xml -v -r $ten_ago:$youngest $PATH_TO_REPO_URL`;
$parser = new XML::DOM::Parser;
$doc = $parser->parse($xmllog);
$entries = $doc->getElementsByTagName ("logentry");
$n = $entries->getLength;
for (my $i = $n - 1; $i >= 0; $i--) {
$logentry = $entries->item ($i);
$revno = $logentry->getAttributeNode("revision")->getValue;
$author = get_text($logentry, "author");
$date = ParseDate(get_text($logentry, "date"));
$date = UnixDate($date, "%a, %d %b %Y %H:%M:%S %z");
$p = "";
$paths = $logentry->getElementsByTagName("path");
$n2 = $paths->getLength;
for (my $j = 0; $j < $n2; $j++) {
$path = $paths->item($j);
$p .= $path->getAttributeNode("action")->getValue;
$p .= " " . $path->getFirstChild->getNodeValue . "
";
}
$desc = "$author:
" .
get_text($logentry, "msg") . "
".
$p;
$rss->add_item(
title => "Revision $revno ($author)",
author => "$author\@wirelessleiden.nl",
description => escapeHTML($desc),
guid => "wleiden_rev_$revno",
pubDate => $date,
);
}
}
$rss->save($PATH_TO_SVN_RDF);