mirror of
https://abf.rosa.ru/djam/urpm-tools.git
synced 2025-02-23 17:32:46 +00:00
Added URPM-repoclosure stuff
This commit is contained in:
parent
b505672f07
commit
f89a0333c4
2 changed files with 1305 additions and 154 deletions
File diff suppressed because it is too large
Load diff
197
stuff/urpm-repoclosure/weekly-report-2.0.pl
Normal file
197
stuff/urpm-repoclosure/weekly-report-2.0.pl
Normal file
|
@ -0,0 +1,197 @@
|
||||||
|
#!/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();
|
Loading…
Add table
Reference in a new issue