Update of /cvsroot/fink/experimental/rangerrick/scripts
In directory sc8-pr-cvs1:/tmp/cvs-serv11522

Modified Files:
        remove-nonbase.sh 
Added Files:
        rss-newpackages.pl 
Log Message:
rss news generating script


--- NEW FILE: rss-newpackages.pl ---
#!/usr/bin/perl

use File::Find;
use XML::RSS;
use strict;

use vars qw(
        $CUTOFF
        $DAYS
        $NOW
        $PREFIX
        $SCP

        @FILES

        $STABLE_RSS
        $UNSTABLE_RSS
        %STABLE_PACKAGES
        %UNSTABLE_PACKAGES
);

$DAYS   = 7; # number of days to look back
$NOW    = time;
$CUTOFF = ($NOW - (60 * 60 * 24 * $DAYS));
$PREFIX = '/tmp/fink-rss';
$SCP    = 1;

print "- updating cvs repository... ";
system("mkdir -p $PREFIX");
system("cd $PREFIX; cvs -d :pserver:anonymous\@cvs.fink.sourceforge.net:/cvsroot/fink 
co dists packages >$PREFIX/cvs.log 2>&1");
print "done\n";

print "- searching for new info files... ";
find(\&find_infofiles, $PREFIX);
print "done\n";

print "- generating RSS... ";
make_rss(\%STABLE_PACKAGES, 'Stable');
make_rss(\%UNSTABLE_PACKAGES, 'Unstable');
print "done\n";

if ($SCP) {
        print "- copying feeds to the Fink website... ";
        system("scp @FILES 
rangerrick\@fink.sourceforge.net:/home/groups/f/fi/fink/htdocs/news/ >/dev/null 2>&1");
        system("ssh rangerrick\@fink.sourceforge.net 'cd 
/home/groups/f/fi/fink/htdocs; ./fix_perm.sh' >/dev/null 2>&1");
        print "done\n";
}

sub w3c_date {
        my @time = localtime(int(shift));
        $time[5] += 1900;
        $time[4] += 1;

        return sprintf('%04d-%02d-%02dT%02d:%02d:%02d-05:00', $time[5], $time[4], 
$time[3], $time[2], $time[1], $time[0]);
}

sub iso_date {
        my @time = localtime(int(shift));
        $time[5] += 1900;
        #$time[4] += 1;

        my @days   = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
        my @months = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 
'Oct', 'Nov', 'Dec');

        return sprintf('%s, %02d %s %04d %02d:%02d:%02d EST', $days[$time[6]], 
$time[3], $months[$time[4]], $time[5], $time[2], $time[1], $time[0]);
}

sub make_rss {
        my $packagehash = shift;
        my $tree        = shift;
        my $rss         = XML::RSS->new(version => '1.0');

        $rss->channel(
                title       => "New Fink Packages ($tree)",
                link        => 'http://fink.sourceforge.net/',
                description => "New Packages Released to the $tree Tree in the Last 
$DAYS Days.",
                dc          => {
                        date      => w3c_date(time),
                        subject   => 'Fink Software',
                        creator   => '[EMAIL PROTECTED]',
                        publisher => '[EMAIL PROTECTED]',
                        language  => 'en-us',
                },
                syn         => {
                        updatePeriod    => 'hourly',
                        updateFrequency => '1',
                        updateBase      => '2000-01-01T00:00:00-05:00',
                },
        );

        my $description;
        for my $package (sort { $packagehash->{$b}->{'date'} <=> 
$packagehash->{$a}->{'date'} } keys %{$packagehash}) {
                $package = $packagehash->{$package};
                if (not exists $package->{'descdetail'} or $package->{'descdetail'} =~ 
/^\s*$/gs) {
                        $description = $package->{'description'};
                } else {
                        $description = $package->{'descdetail'};
                }
                $description =~ s/[\s\n\r]+/ /gs; $description =~ s/^\s+//; 
$description =~ s/\s+$//;
                $description =~ s/</&lt;/gs;
                $description =~ s/>/&gt;/gs;
                $description =~ s/&/&amp;/gs;
                # $description = '(updated ' . w3c_date($package->{'date'}) . ') ' . 
$description;
                $rss->add_item(
                        title       => $package->{'package'} . ' ' . 
$package->{'version'} . ' (' . $package->{'description'} . ')',
                        description => $description,
                        link        => 'http://fink.sourceforge.net/pdb/package.php/' 
. $package->{'package'},
                        dc          => {
                                date => w3c_date($package->{'date'}),
                        },
                );
        }

        my $lctree = lc($tree);
        $rss->save("fink-$lctree.rdf") or die "can't save rss: $!\n";
        push(@FILES, "fink-$lctree.rdf");
}

sub find_infofiles {
        return unless (/\.info$/);

        my @stat = stat($File::Find::name) or die "can't stat $_: $!\n";
        return unless ($stat[9] >= $CUTOFF);

        my $text;
        open(FILEIN, $File::Find::name) or die "can't open $File::Find::name: $!\n";
        { local $/ = undef; $text = <FILEIN>; }
        my $hash = parse_keys($text);
        close(FILEIN);

        next unless (exists $hash->{'package'});
        $hash->{'date'} = $stat[9];

        if ($File::Find::name =~ m#/stable/#) {
                $STABLE_PACKAGES{$hash->{'package'}} = $hash;
        } else {
                $UNSTABLE_PACKAGES{$hash->{'package'}} = $hash;
        }
}

sub parse_keys {
        my $text    = shift;
        my $hash    = {};
        my $lastkey = "";
        my $heredoc = 0;

        for (split(/\r?\n/, $text)) {
                chomp;
                if ($heredoc > 0) {
                        if (/^\s*<<$/) {
                                $heredoc--;
                                $hash->{lc($lastkey)} .= $_."\n" if ($heredoc > 0);
                        } else {
                                $hash->{lc($lastkey)} .= $_."\n";
                                $heredoc++ if (/<<$/);
                        }
                } else {
                        next if /^\s*\#/;       # skip comments
                        if (/^\s*([0-9A-Za-z_.\-]+)\:\s*(\S.*?)\s*$/) {
                                $lastkey = lc($1);
                                if ($2 eq "<<") {
                                        $hash->{lc($lastkey)} = "";
                                        $heredoc = 1;
                                } else {
                                        $hash->{lc($lastkey)} = $2;
                                }
                        } elsif (/^\s+(\S.*?)\s*$/) {
                                $hash->{lc($lastkey)} .= "\n".$1;
                        }
                }
        }

        if ($heredoc > 0) {
                print "WARNING: End of file reached during here-document.\n";
        }

        return $hash;
}


Index: remove-nonbase.sh
===================================================================
RCS file: /cvsroot/fink/experimental/rangerrick/scripts/remove-nonbase.sh,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- remove-nonbase.sh   19 Nov 2002 20:30:49 -0000      1.2
+++ remove-nonbase.sh   5 Jan 2003 23:11:15 -0000       1.3
@@ -18,3 +18,21 @@
        awk '{ print $1 }' | \
        xargs sudo dpkg -r
 
+dpkg --get-selections | \
+       grep -E '[[:space:]]install$' | \
+       grep -v '^apt[[:space:]]' | \
+       grep -v '^apt-shlibs[[:space:]]' | \
+       grep -v '^base-files[[:space:]]' | \
+       grep -v '^bzip2[[:space:]]' | \
+       grep -v '^debianutils[[:space:]]' | \
+       grep -v '^dpkg[[:space:]]' | \
+       grep -v '^fink[[:space:]]' | \
+       grep -v '^gettext[[:space:]]' | \
+       grep -v '^gzip[[:space:]]' | \
+       grep -v '^libiconv[[:space:]]' | \
+       grep -v '^ncurses[[:space:]]' | \
+       grep -v '^storable-pm[[:space:]]' | \
+       grep -v '^tar[[:space:]]' | \
+       awk '{ print $1 }' | \
+       xargs sudo dpkg --purge
+



-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Fink-commits mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/fink-commits

Reply via email to