head 1.1; access; symbols; locks; strict; comment @# @; 1.1 date 2005.02.24.19.06.48; author rse; state Exp; branches; next ; desc @@ 1.1 log @add news generator to website CVS @ text @#!/v/openpkg/sw/bin/perl require 5; use IO::File; use Data::Dumper; my $file_txt = "/v/openpkg/web/news.txt"; my $file_db = "/v/openpkg/web/news.db"; my $dir_srpms = "/v/openpkg/ftp/current/SRC"; # 08-Feb-2004: Upgraded package: P # 08-Feb-2004: Upgraded package: P # 08-Feb-2004: Upgraded package: P # 08-Feb-2004: Upgraded package: P # 08-Feb-2004: Upgraded package: P # scan currently available source RPMs my $db_now = {}; foreach my $srpm (glob("$dir_srpms/*.src.rpm"), glob("$dir_srpms/*.nosrc.rpm")) { my ($filename, $name, $version, $release) = ($srpm =~ m/^.+?\/(([^\/]+)-([^-]+)-([^-]+)\.(no)?src\.rpm)$/); my $mtime = (stat($srpm))[9]; $db_now->{$name} = { -filename => $filename, -version => $version, -release => $release, -mtime => $mtime}; } # read previously available source RPMs my $db_last = {}; if (-f $file_db) { my $tmp = ''; my $io = new IO::File "<$file_db" or die; $tmp .= $_ while (<$io>); $io->close(); eval "$tmp"; } # determine date my $date = `date '+%d-%b-%Y'`; $date =~ s/\n+$//s; # determine changes my $txt = ''; foreach my $name (sort { $db_now->{$b}->{-mtime} cmp $db_now->{$a}->{-mtime} } keys(%{$db_now})) { my $pkg = $name."-".$db_now->{$name}->{-version}."-".$db_now->{$name}->{-release}; if (not defined($db_last->{$name})) { $txt .= "$date: New package: P<$pkg>\n"; } elsif ($db_last->{$name}->{-version} ne $db_now->{$name}->{-version}) { $txt .= "$date: Upgraded package: P<$pkg>\n"; } elsif ($db_last->{$name}->{-release} ne $db_now->{$name}->{-release}) { $txt .= "$date: Updated package: P<$pkg>\n"; } } foreach my $name (sort { $db_last->{$b}->{-mtime} cmp $db_last->{$a}->{-mtime} } keys(%{$db_last})) { my $pkg = $name."-".$db_last->{$name}->{-version}."-".$db_last->{$name}->{-release}; if (not defined($db_now->{$name})) { $txt .= "$date: Deleted package: P<$pkg>\n"; } } # remember now available source RPMs my $io = new IO::File ">$file_db" or die; $io->print(Data::Dumper->Dump([$db_now], [qw(db_last)]). "\n1;\n"); $io->close(); # prepend results to news.txt if ($txt ne '') { my $io = new IO::File "<$file_txt" or die; my $x = ''; $x .= $_ while (<$io>); $io->close(); $x = $txt . $x; $io = new IO::File ">$file_txt" or die; $io->print($x); $io->close(); } @