#!/usr/bin/perl -W use HTTP::Request::Common; use Sys::Syslog; use LWP::UserAgent; use Sys::Hostname; use URI::URL; use HTTP::Cookies; use POSIX; # stdin: list of perl packages to check, for example: # DateTime # Convert-UUlib # This list can be generated with packageslist.sh from # the spec files my $currentperlpackage = ""; sub geturl { my $url = pop(@_); my $u = URI::URL->new($url, ""); my $ua = LWP::UserAgent->new; my $req = GET $url; my $retval = $ua->simple_request($req)->as_string; return $retval; } sub getfilecontents { my $filename = pop(@_); my $retval; open(INP, $filename) or die "could not open " . $filename; while () { $retval = $retval . $_; } close(INP); return $retval; } sub updatespec { my ($url,$urlcontents,$latestversion,$specfilename,$packagename) = @_; my $speccontents = getfilecontents($specfilename); my $currentversion = ""; if ($speccontents =~ /Version: (.*)\n/) { $currentversion = $1; } #print "latestversion: " . $latestversion . "\n"; #print "currentversion: " . $currentversion . "\n"; if (!($latestversion eq $currentversion)) { print "$packagename needs an update! current: " . $currentversion . ", latest: " . $latestversion . "\n"; } my $changelog = strftime("* %a %b %e %Y Dries Verachtert - ", localtime) . $latestversion . "-1\n- Updated to release " . $latestversion . ".\n\n"; $speccontents =~ s/Version: (.*)\n/Version: $latestversion\n/g; $speccontents =~ s/\%changelog\n/\%changelog\n$changelog/g; #print "nieuwe spec: " . $speccontents . "\n"; open (TMP, ">" . $specfilename . ".autoupdate") or die "could not write to " . $specfilename . ".autoupdate"; print TMP $speccontents; close(TMP); } sub getupstreamtag { my $urlcontents = pop(@_); # print $urlcontents; if ($urlcontents =~ /(.*?)<\/a>/) { $nameurl = "http://search.cpan.org/" . $1; $nameurlcontents = geturl($nameurl); $authorname = $2; if ($nameurlcontents =~ //) { $email = $1; $email =~ s|\.|,|g; $email =~ s|\@|\$|g; return $authorname . " <" . $email . ">"; } else { print "mailto not found"; } } else { print "first href not found"; } die $currentperlpackage . ": could not get the name + email"; } sub createspec { my ($url,$urlcontents,$latestversion,$specfilename,$packagename) = @_; # read the template and change it a bit $speccontents = getfilecontents("perltemplate.spec"); my $changelog = strftime("* %a %b %e %Y Dries Verachtert - ", localtime) . $latestversion . "-1\n- Initial package.\n\n"; $speccontents =~ s/Version: *\n/Version: $latestversion\n/g; $speccontents =~ s/\%changelog\n/\%changelog\n$changelog/g; $speccontents =~ s/NNAAMMEE/$packagename/g; my $dirname = $packagename; $dirname =~ s|\-|/|g; $speccontents =~ s|NAMEDIR|$dirname|g; my $upstreamtag = getupstreamtag($urlcontents); $speccontents =~ s|UPSTREAMTAG|$upstreamtag|g; if ($urlcontents =~ /README<\/a>
/) { $readmeurl = "http://search.cpan.org" . $1; $readmecontents = geturl($readmeurl); } #print $speccontents; mkdir("../../../rpms/newperlpackages/perl-$packagename"); open (TMP, ">" . $specfilename) or die "could not write to " . $specfilename; print TMP $speccontents; close(TMP); open (TMP, ">" . "../../../rpms/newperlpackages/perl-$packagename/perlpage.html") or die "perlpage.html"; print TMP $urlcontents; close (TMP); open (TMP, ">" . "../../../rpms/newperlpackages/perl-$packagename/README") or die "README"; print TMP $readmecontents; close (TMP); print "cd perl-$packagename; mv perl-$packagename.spec.autocreate perl-$packagename.spec; spectool perl-$packagename.spec;\n"; } sub checkspec { my $packagename = pop(@_); # print "packagename: " . $packagename . "\n"; my $url = "http://search.cpan.org/dist/" . $packagename . "/"; my $urlcontents = geturl($url); my $latestversion = ""; if ($urlcontents =~ /$packagename-(.*?)<\/td>/) { $latestversion = $1; } my $specfilename = "../../../rpms/newperlpackages/perl-$packagename/perl-$packagename.spec"; if ( -e $specfilename ) { updatespec($url,$urlcontents,$latestversion,$specfilename,$packagename); } else { createspec($url,$urlcontents,$latestversion,$specfilename,$packagename); } } # read the list from stdin while ($packagename = <>) { chomp $packagename; print "package: " . $packagename . "\n"; $currentperlpackage = $packagename; checkspec ($packagename); }