mirror of
https://abf.rosa.ru/djam/urpm-tools.git
synced 2025-02-23 17:32:46 +00:00
197 lines
4.7 KiB
Perl
197 lines
4.7 KiB
Perl
#!/usr/bin/perl
|
|
# Send mail about repoclosure results to ROSA-Devel
|
|
|
|
use File::Path qw(mkpath rmtree);
|
|
use strict;
|
|
|
|
my $ADDR = "rosa-devel\@lists.rosalab.ru";
|
|
# my $ADDR = "aponomarenko\@rosalab.ru";
|
|
|
|
my ($Count_Cur, $Pkg_Dep_Cur);
|
|
my ($Count_Old, $Pkg_Dep_Old);
|
|
|
|
sub writeFile($$)
|
|
{
|
|
my ($Path, $Content) = @_;
|
|
return if(not $Path);
|
|
open (FILE, ">".$Path) || die "can't open file \'$Path\': $!\n";
|
|
print FILE $Content;
|
|
close(FILE);
|
|
}
|
|
|
|
sub readFile($)
|
|
{
|
|
my $Path = $_[0];
|
|
open (FILE, $Path);
|
|
local $/ = undef;
|
|
my $Content = <FILE>;
|
|
close(FILE);
|
|
return $Content;
|
|
}
|
|
|
|
sub showTable($)
|
|
{
|
|
my $R = $_[0];
|
|
|
|
my $Table = "";
|
|
|
|
if($Count_Cur->{$R})
|
|
{
|
|
$Table .= "\n[".uc($R)."]\n";
|
|
|
|
foreach my $P (sort {lc($a) cmp lc($b)} keys(%{$Pkg_Dep_Cur->{$R}}))
|
|
{
|
|
foreach my $D (sort {lc($a) cmp lc($b)} keys(%{$Pkg_Dep_Cur->{$R}{$P}}))
|
|
{
|
|
$Table .= $P.": \"".$D."\"\n";
|
|
}
|
|
}
|
|
}
|
|
|
|
return $Table;
|
|
}
|
|
|
|
sub readReports($)
|
|
{
|
|
my $Dir = $_[0];
|
|
|
|
if(not -d $Dir) {
|
|
return ();
|
|
}
|
|
|
|
my (%Count, %Pkg_Dep) = @_;
|
|
|
|
foreach my $R ("main", "contrib", "non-free", "restricted")
|
|
{
|
|
my $Content = readFile($Dir."/i586/$R/report.txt");
|
|
|
|
if($Content=~s/Broken Dependency\s\((\d+)\)//i) {
|
|
$Count{$R} = $1;
|
|
}
|
|
|
|
while($Content=~s/(.+) \(required by ([^()]+)//) {
|
|
$Pkg_Dep{$R}{$2}{$1} = 1;
|
|
}
|
|
}
|
|
|
|
return (\%Count, \%Pkg_Dep);
|
|
}
|
|
|
|
sub scenario()
|
|
{
|
|
my $REPORTS_CUR = "rosa2014.1";
|
|
|
|
mkpath("prev");
|
|
|
|
($Count_Cur, $Pkg_Dep_Cur) = readReports($REPORTS_CUR);
|
|
($Count_Old, $Pkg_Dep_Old) = readReports("prev/".$REPORTS_CUR);
|
|
|
|
my (%Fixed, %New) = ();
|
|
my ($Fixed_C, $New_C) = (0, 0);
|
|
|
|
foreach my $R ("main", "contrib", "non-free", "restricted")
|
|
{
|
|
foreach my $P (keys(%{$Pkg_Dep_Old->{$R}}))
|
|
{
|
|
foreach my $D (keys(%{$Pkg_Dep_Old->{$R}{$P}}))
|
|
{
|
|
if(not defined $Pkg_Dep_Cur->{$R}{$P}{$D})
|
|
{
|
|
$Fixed{$R}{$P}{$D} = 1;
|
|
$Fixed_C+=1;
|
|
}
|
|
}
|
|
}
|
|
foreach my $P (keys(%{$Pkg_Dep_Cur->{$R}}))
|
|
{
|
|
foreach my $D (keys(%{$Pkg_Dep_Cur->{$R}{$P}}))
|
|
{
|
|
if(not defined $Pkg_Dep_Old->{$R}{$P}{$D})
|
|
{
|
|
$New{$R}{$P}{$D} = 1;
|
|
$New_C+=1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
my $Broken = $Count_Cur->{"main"}+$Count_Cur->{"non-free"}+$Count_Cur->{"restricted"}+$Count_Cur->{"contrib"};
|
|
|
|
my $MAIL = "Subject: [FBA] Weekly repoclosure status of ROSA Fresh: $Broken broken ";
|
|
|
|
if($Broken==1) {
|
|
$MAIL .= "package";
|
|
}
|
|
else {
|
|
$MAIL .= "packages";
|
|
}
|
|
|
|
$MAIL .= "\nTo: ROSA Developers <$ADDR>";
|
|
|
|
if($Broken==1) {
|
|
$MAIL .= "\nThere is $Broken broken package";
|
|
}
|
|
else {
|
|
$MAIL .= "\nThere are $Broken broken packages";
|
|
}
|
|
$MAIL .= " in the repositories of ROSA Fresh on i586.\n";
|
|
$MAIL .= "\nPlease see detailed report here: http://upstream-tracker.org/repoclosure_reports/\n";
|
|
|
|
$MAIL .= "\nFixed this week";
|
|
if($Fixed_C)
|
|
{
|
|
$MAIL .= " (".$Fixed_C."):\n";
|
|
foreach my $R ("main", "contrib", "non-free", "restricted")
|
|
{
|
|
foreach my $P (sort {lc($a) cmp lc($b)} keys(%{$Fixed{$R}}))
|
|
{
|
|
foreach my $D (sort {lc($a) cmp lc($b)} keys(%{$Fixed{$R}{$P}}))
|
|
{
|
|
$MAIL .= "$P: \"$D\" [".uc($R)."]\n";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
$MAIL .= ": 0\n";
|
|
}
|
|
|
|
$MAIL .= "\nNew this week";
|
|
if($New_C)
|
|
{
|
|
$MAIL .= " (".$New_C."):\n";
|
|
foreach my $R ("main", "contrib", "non-free", "restricted")
|
|
{
|
|
foreach my $P (sort {lc($a) cmp lc($b)} keys(%{$New{$R}}))
|
|
{
|
|
foreach my $D (sort {lc($a) cmp lc($b)} keys(%{$New{$R}{$P}}))
|
|
{
|
|
$MAIL .= "$P: \"$D\" [".uc($R)."]\n";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
$MAIL .= ": 0\n";
|
|
}
|
|
|
|
$MAIL .= "\nHere is the list of all broken packages in the format \"package: broken dependency\":\n";
|
|
|
|
$MAIL .= showTable("main");
|
|
$MAIL .= showTable("non-free");
|
|
$MAIL .= showTable("restricted");
|
|
$MAIL .= showTable("contrib");
|
|
|
|
$MAIL .= "\n";
|
|
|
|
writeFile("mail", $MAIL);
|
|
|
|
system("/usr/sbin/sendmail $ADDR < mail");
|
|
|
|
unlink("mail");
|
|
|
|
# save old reports
|
|
system("cp -fr $REPORTS_CUR prev/");
|
|
}
|
|
|
|
scenario();
|