#!/usr/bin/perl # $Id$ # # TODO # - real config file # - add some logging and debug stuff # - do something with summary # based on code from pascal terjan ( mainly all rss stuff ) $config{RSS_TITLE}="Mandrakelinux changelog"; $config{RSS_LINK}="http://www.mandrakelinux.com/"; $config{MAX_SIZE}=20; $config{RSS_FILE}="/home/projects/urpmi/www/changelog.rss"; $config{RSS_DESCRIPTION}="Mandrakelinux cooker packages"; $config{DEFAULT_URL}="http://cvs.mandrakesoft.com"; $config{LOCK}="$ENV{HOME}/tmp/lock.rss"; $config{LOCK_TIMEOUT}=60; #$config{MESSAGE_TITLE}=''; #$config{MESSAGE_DESC}='I ploped'; while (<>) { last if m/-=-=-=-/ ; } while (<>) { if ( m/Description\s*:\s(\S*)/ ) { while (<>) { last if m/^\S*\s*:\s\S*/ or m/-=-=-=-/; $description=$description.$_; } }; $name=$1 if m/Name\s*:\s(\S*)/; $version=$1 if m/Version\s*:\s(\S*)/; $release=$1 if m/Release\s*:\s(\S*)/; $url=$1 if m/URL\s*:\s(\S*)/; last if m/^-=-=-=-/ ; } my $title = "$name-$version-$release"; while (<>) { last if m/^-=-=-=-/ ; $changelog= $changelog . $_; } exit 0 if not $name; $url = $config{DEFAULT_URL} if not $url; use XML::RSS; use CGI; my $desc = <escapeHTML($title); $desc = $cgi->escapeHTML($desc); $desc =~ s/$/
/mg; $desc = $cgi->escapeHTML($desc); my $counter=0; while ( -f $config{LOCK} and $counter < $config{LOCK_TIMEOUT} ) { sleep 1; $counter++; }; die "Cannot grab lock " if -f $config{LOCK}; `touch $config{LOCK}`; my $rss = new XML::RSS(encoding=>"UTF-8"); if( -e $config{RSS_FILE}) { $rss->parsefile($config{RSS_FILE}); pop(@{$rss->{'items'}}) if (@{$rss->{'items'}} == $config{MAX_SIZE}); shift(@{$rss->{'items'}}) if $config{MESSAGE_TITLE}; } else { $rss->channel( title => $config{RSS_TITLE}, link => $config{RSS_LINK}, description => $config{RSS_DESCRIPTION}, language => "en" ); } $rss->add_item(title => $title, description => $desc, link => $url, mode => 'insert' ); $rss->add_item(title => $config{MESSAGE_TITLE}, description => $config{MESSAGE_DESC}, link => '', mode => 'insert' ) if $config{MESSAGE_TITLE}; $rss->save($config{RSS_FILE}); unlink($config{LOCK});