#!/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);