#!/usr/bin/perl use strict; use XML::FeedPP; my $base_dir = '/home/awwaiid/tlt/darcs-rss'; my $project_dir = '/home/awwaiid/projects'; my @darcs_dirs = `find $project_dir/ -name '_darcs'`; @darcs_dirs = grep { $_ !~ /projects\/work\// } @darcs_dirs; @darcs_dirs = map { chomp; s/\/_darcs$// ; tr/'//; $_ } @darcs_dirs; my @git_dirs = `find $project_dir/ -name '\.git'`; @git_dirs = grep { $_ !~ /projects\/work\// } @git_dirs; @git_dirs = map { chomp; s/\/\.git$// ; tr/'//; $_ } @git_dirs; my @darcs_projects = map { my $path = $_; s/$project_dir\///; my $url = $_; s/\//-/g; { path => $path, name => $_, url => $url, type => 'darcs' } } @darcs_dirs; my @git_projects = map { my $path = $_; s/$project_dir\///; my $url = $_; s/\//-/g; { path => $path, name => $_, url => $url, type => 'git' } } @git_dirs; my @projects = (@darcs_projects, @git_projects); my $all_feed = XML::FeedPP::RSS->new(); my @all_items; foreach my $project (@projects) { print "Processing $project->{name}\n"; `mkdir '$project->{name}'` unless -d $project->{name}; if($project->{type} eq 'darcs') { print "$base_dir/darcs2rss -f tlt -p '$project->{name}' -d '$project->{name}' -h 'http://thelackthereof.org/projects/$project->{url}' '$project->{path}' > '$base_dir/feed/$project->{name}.rss'\n"; print `$base_dir/darcs2rss -f tlt -p '$project->{name}' -d '$project->{name}' -h 'http://thelackthereof.org/projects/$project->{url}' '$project->{path}' > '$base_dir/feed/$project->{name}.rss'`; } if($project->{type} eq 'git') { chdir $project->{path}; print "$base_dir/git2rss --url 'http://thelackthereof.org/projects/$project->{url}' --title '$project->{name}' --description '$project->{name}' > '$base_dir/feed/$project->{name}.rss'\n"; print `$base_dir/git2rss --url 'http://thelackthereof.org/projects/$project->{url}' --title '$project->{name}' --description '$project->{name}' > '$base_dir/feed/$project->{name}.rss'`; } if(-s "$base_dir/feed/$project->{name}.rss") { my $feed; if($project->{type} eq 'darcs') { $feed = XML::FeedPP::RDF->new("$base_dir/feed/$project->{name}.rss"); } else { $feed = XML::FeedPP::RSS->new("$base_dir/feed/$project->{name}.rss"); } foreach my $item ( $feed->get_item() ) { $item->link( $feed->link() ); $item->title( $project->{name} . ': ' . $item->title ); $item->category( $project->{name} ); push @all_items, $item; } } } foreach my $item (@all_items) { print "URL: ", $item->link(), "\n"; print "Title: ", $item->title(), "\n"; $all_feed->add_item( $item ); } $all_feed->sort_item(); #$all_feed->{rss}->{channel}->{item} = [ reverse @{ $all_feed->{rss}->{channel}->{item} } ]; $all_feed->limit_item( 20 ); $all_feed->title("All of awwaiid's projects"); $all_feed->link("http://thelackthereof.org/Projects"); $all_feed->description("
This is a merged feed built up from all of the recent darcs patches recorded in my projects directory.
"); $all_feed->to_file("$base_dir/feed/ALL.rss");