mirror of
https://abf.rosa.ru/djam/urpm-tools.git
synced 2025-02-23 09:22:47 +00:00
URPM-repoclosure 1.7.1: added -cache option, removed false positives.
This commit is contained in:
parent
8f413829b6
commit
e2cab254a9
2 changed files with 74 additions and 18 deletions
|
@ -1,9 +1,9 @@
|
||||||
#!/usr/bin/perl
|
#!/usr/bin/perl
|
||||||
########################################################
|
########################################################
|
||||||
# URPM Repo Closure Checker 1.6.1 for Linux
|
# URPM Repo Closure Checker 1.7.1 for Linux
|
||||||
# A tool for checking closure of a set of RPM packages
|
# A tool for checking closure of a set of RPM packages
|
||||||
#
|
#
|
||||||
# Copyright (C) 2011-2012 ROSA Laboratory
|
# Copyright (C) 2011-2012 ROSA Lab
|
||||||
# Written by Andrey Ponomarenko
|
# Written by Andrey Ponomarenko
|
||||||
#
|
#
|
||||||
# PLATFORMS
|
# PLATFORMS
|
||||||
|
@ -38,17 +38,17 @@ use File::Copy qw(copy move);
|
||||||
use Data::Dumper;
|
use Data::Dumper;
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
my $TOOL_VERSION = "1.6.1";
|
my $TOOL_VERSION = "1.7.1";
|
||||||
my $CmdName = get_filename($0);
|
my $CmdName = get_filename($0);
|
||||||
|
|
||||||
my ($Help, $ShowVersion, $RPMlist, $RPMdir, $StaticMode,
|
my ($Help, $ShowVersion, $RPMlist, $RPMdir, $StaticMode,
|
||||||
$DynamicMode, $NoClean, $HDlist, $FileDeps, $ReportDir,
|
$DynamicMode, $NoClean, $HDlist, $FileDeps, $ReportDir,
|
||||||
$AddRPMs, $RTitle, $DepHDlists, $UpdateHDlists, $Profile,
|
$AddRPMs, $RTitle, $DepHDlists, $UpdateHDlists, $Profile,
|
||||||
$Target, $ExtInfo);
|
$Target, $ExtInfo, $UseCache);
|
||||||
|
|
||||||
my $ShortUsage = "URPM Repo Closure Checker $TOOL_VERSION
|
my $ShortUsage = "URPM Repo Closure Checker $TOOL_VERSION
|
||||||
A tool for checking closure of a set of RPM packages
|
A tool for checking closure of a set of RPM packages
|
||||||
Copyright (C) 2012 ROSA Laboratory
|
Copyright (C) 2012 ROSA Lab
|
||||||
License: GNU GPL
|
License: GNU GPL
|
||||||
|
|
||||||
Usage: $CmdName [options]
|
Usage: $CmdName [options]
|
||||||
|
@ -76,6 +76,7 @@ GetOptions("h|help!" => \$Help,
|
||||||
"dep-hdlists=s" => \$DepHDlists,
|
"dep-hdlists=s" => \$DepHDlists,
|
||||||
"update-hdlists=s" => \$UpdateHDlists,
|
"update-hdlists=s" => \$UpdateHDlists,
|
||||||
"profile=s" => \$Profile,
|
"profile=s" => \$Profile,
|
||||||
|
"cache!" => \$UseCache,
|
||||||
"target=s" => \$Target,
|
"target=s" => \$Target,
|
||||||
"info=s" => \$ExtInfo
|
"info=s" => \$ExtInfo
|
||||||
) or ERR_MESSAGE();
|
) or ERR_MESSAGE();
|
||||||
|
@ -148,6 +149,9 @@ OPTIONS:
|
||||||
-profile <path>
|
-profile <path>
|
||||||
Profile of the test run.
|
Profile of the test run.
|
||||||
|
|
||||||
|
-cache
|
||||||
|
Cache downloaded files.
|
||||||
|
|
||||||
-target <name>
|
-target <name>
|
||||||
Run particular test described in the profile.
|
Run particular test described in the profile.
|
||||||
|
|
||||||
|
@ -216,6 +220,7 @@ sub ERR_MESSAGE()
|
||||||
}
|
}
|
||||||
|
|
||||||
my %Cache;
|
my %Cache;
|
||||||
|
|
||||||
my $RPM_CACHE = "/var/cache/urpmi/rpms";
|
my $RPM_CACHE = "/var/cache/urpmi/rpms";
|
||||||
my $TMP_DIR = tempdir(CLEANUP=>1);
|
my $TMP_DIR = tempdir(CLEANUP=>1);
|
||||||
my %InstalledPackage;
|
my %InstalledPackage;
|
||||||
|
@ -224,6 +229,7 @@ my %Packages;
|
||||||
my %BrokenSignature;
|
my %BrokenSignature;
|
||||||
my %InstallFailed;
|
my %InstallFailed;
|
||||||
my $RESULTS_DIR = "repoclosure_reports";
|
my $RESULTS_DIR = "repoclosure_reports";
|
||||||
|
my $CACHE_DIR = "cache";
|
||||||
|
|
||||||
sub parseTag(@)
|
sub parseTag(@)
|
||||||
{
|
{
|
||||||
|
@ -750,18 +756,52 @@ sub readDeps($$$)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub cachePath($)
|
||||||
|
{
|
||||||
|
my $Url = $_[0];
|
||||||
|
$Url=~s/\A\w+:\/\///g;
|
||||||
|
$Url=~s/\.(cz|gz|lzma|xz)\Z//g;
|
||||||
|
return $Url;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub cacheFile($$)
|
||||||
|
{
|
||||||
|
my ($Url, $Path) = @_;
|
||||||
|
my $To = $CACHE_DIR."/".cachePath($Url);
|
||||||
|
mkpath(get_dirname($To));
|
||||||
|
copy($Path, $To);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub getCachedFile($)
|
||||||
|
{
|
||||||
|
my $Url = $_[0];
|
||||||
|
my $Path = $CACHE_DIR."/".cachePath($Url);
|
||||||
|
if(-f $Path) {
|
||||||
|
return $Path;
|
||||||
|
}
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
sub downloadFile($)
|
sub downloadFile($)
|
||||||
{
|
{
|
||||||
my $Path = $_[0];
|
my $Url = $_[0];
|
||||||
my $DownloadTo = $TMP_DIR."/extract/".get_filename($Path);
|
|
||||||
|
if($UseCache)
|
||||||
|
{
|
||||||
|
if(my $CPath = getCachedFile($Url)) {
|
||||||
|
return $CPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
my $DownloadTo = $TMP_DIR."/extract/".get_filename($Url);
|
||||||
$DownloadTo=~s/\.cz/\.gz/g; # cz == gz
|
$DownloadTo=~s/\.cz/\.gz/g; # cz == gz
|
||||||
my $Dir = get_dirname($DownloadTo);
|
my $Dir = get_dirname($DownloadTo);
|
||||||
mkdir($Dir);
|
mkdir($Dir);
|
||||||
system("wget -U '' --no-check-certificate \"$Path\" --connect-timeout=5 --tries=1 --output-document=\"$DownloadTo\" >/dev/null 2>&1");
|
system("wget -U '' --no-check-certificate \"$Url\" --connect-timeout=5 --tries=1 --output-document=\"$DownloadTo\" >/dev/null 2>&1");
|
||||||
if(not -f $DownloadTo
|
if(not -f $DownloadTo
|
||||||
or not -s $DownloadTo)
|
or not -s $DownloadTo)
|
||||||
{
|
{
|
||||||
print STDERR "ERROR: cannot access \'$Path\'\n";
|
print STDERR "ERROR: cannot access \'$Url\'\n";
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -779,12 +819,18 @@ sub downloadFile($)
|
||||||
my @Files = cmd_find($Dir, "f", "", "");
|
my @Files = cmd_find($Dir, "f", "", "");
|
||||||
if(not @Files)
|
if(not @Files)
|
||||||
{
|
{
|
||||||
print STDERR "ERROR: cannot extract \'$Path\'\n";
|
print STDERR "ERROR: cannot extract \'$Url\'\n";
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
unlink($DownloadTo);
|
unlink($DownloadTo);
|
||||||
$DownloadTo = $Files[0];
|
$DownloadTo = $Files[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($UseCache)
|
||||||
|
{
|
||||||
|
cacheFile($Url, $DownloadTo);
|
||||||
|
}
|
||||||
|
|
||||||
return $DownloadTo;
|
return $DownloadTo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -879,7 +925,7 @@ sub readHDlist($$$$$)
|
||||||
my $Name = "";
|
my $Name = "";
|
||||||
foreach (reverse(split(/\n/, $Content)))
|
foreach (reverse(split(/\n/, $Content)))
|
||||||
{
|
{
|
||||||
$_=~s/\A\@//g;
|
s/\A\@//g;
|
||||||
my @Parts = split("\@", $_);
|
my @Parts = split("\@", $_);
|
||||||
my $Type = shift(@Parts);
|
my $Type = shift(@Parts);
|
||||||
if($Type eq "info")
|
if($Type eq "info")
|
||||||
|
@ -899,7 +945,8 @@ sub readHDlist($$$$$)
|
||||||
$PkgName{$Name} = $PName;
|
$PkgName{$Name} = $PName;
|
||||||
if($Kind eq "Target")
|
if($Kind eq "Target")
|
||||||
{
|
{
|
||||||
if($Registered->{$TKind}{$PName})
|
if($Registered->{$TKind}{$PName}
|
||||||
|
and $Type eq "requires")
|
||||||
{ # already added
|
{ # already added
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
@ -1101,7 +1148,7 @@ sub staticCheck()
|
||||||
|
|
||||||
if(my @Pkgs = sort {lc($a) cmp lc($b)} keys(%Unresolved))
|
if(my @Pkgs = sort {lc($a) cmp lc($b)} keys(%Unresolved))
|
||||||
{
|
{
|
||||||
my $Title = "Broken Packages (".($#Pkgs+1).")";
|
my $Title = "Broken Dependency (".($#Pkgs+1).")";
|
||||||
$Report .= "\n$Title:\n\n";
|
$Report .= "\n$Title:\n\n";
|
||||||
|
|
||||||
$VReport .= "<a name='Unresolved'></a>\n";
|
$VReport .= "<a name='Unresolved'></a>\n";
|
||||||
|
@ -1111,7 +1158,7 @@ sub staticCheck()
|
||||||
if($ExtInfo) {
|
if($ExtInfo) {
|
||||||
$VReport .= "<th onclick=\"sort(this)\">SRPM</th>\n";
|
$VReport .= "<th onclick=\"sort(this)\">SRPM</th>\n";
|
||||||
}
|
}
|
||||||
$VReport .= "<th onclick=\"sort(this)\">Dependency</th>\n";
|
$VReport .= "<th onclick=\"sort(this)\">Broken Dependency</th>\n";
|
||||||
$VReport .= "</tr>\n";
|
$VReport .= "</tr>\n";
|
||||||
|
|
||||||
my $Num = 1;
|
my $Num = 1;
|
||||||
|
@ -1471,6 +1518,12 @@ sub checkProfile()
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
my $Content = readFile($Profile);
|
my $Content = readFile($Profile);
|
||||||
|
|
||||||
|
if($UseCache)
|
||||||
|
{ # empty cache
|
||||||
|
rmtree($CACHE_DIR);
|
||||||
|
}
|
||||||
|
|
||||||
my %Index = ();
|
my %Index = ();
|
||||||
my (%Order, %Order_S) = ();
|
my (%Order, %Order_S) = ();
|
||||||
my $Num = 0;
|
my $Num = 0;
|
||||||
|
@ -1491,7 +1544,10 @@ sub checkProfile()
|
||||||
writeFile("update.hdlists", $Info{"updates"});
|
writeFile("update.hdlists", $Info{"updates"});
|
||||||
writeFile("info.hdlists", $Info{"info"});
|
writeFile("info.hdlists", $Info{"info"});
|
||||||
|
|
||||||
my $Cmd = "perl urpm-repoclosure.pl";
|
my $Cmd = "perl $0";
|
||||||
|
if($UseCache) {
|
||||||
|
$Cmd .= " -cache";
|
||||||
|
}
|
||||||
$Cmd .= " --hdlist=".$Info{"hdlist"};
|
$Cmd .= " --hdlist=".$Info{"hdlist"};
|
||||||
if($Info{"name"}) {
|
if($Info{"name"}) {
|
||||||
$Cmd .= " --title=\"".$Info{"name"}."/".$Info{"arch"}."-".$Info{"section"}."\"";
|
$Cmd .= " --title=\"".$Info{"name"}."/".$Info{"arch"}."-".$Info{"section"}."\"";
|
||||||
|
@ -1618,7 +1674,7 @@ sub checkProfile()
|
||||||
foreach my $Section (sort {$Order_S{$Name}{$a}<=>$Order_S{$Name}{$b}} keys(%{$Index{$Name}{$Arch}}))
|
foreach my $Section (sort {$Order_S{$Name}{$a}<=>$Order_S{$Name}{$b}} keys(%{$Index{$Name}{$Arch}}))
|
||||||
{
|
{
|
||||||
my %Info = %{$Index{$Name}{$Arch}{$Section}};
|
my %Info = %{$Index{$Name}{$Arch}{$Section}};
|
||||||
$INDEX .= "<td><a href=\'".$Info{"HTML"}."\'>Report</a> (<a href=\'".$Info{"TXT"}."\'>txt</a>)</td>\n"; # (<a href=\'".$Info{"TXT"}."\'>txt</a>)
|
$INDEX .= "<td><a href=\'".$Info{"HTML"}."\'>Report</a> (<a href=\'".$Info{"TXT"}."\'>txt</a>)</td>\n";
|
||||||
}
|
}
|
||||||
$INDEX .= "</tr>\n";
|
$INDEX .= "</tr>\n";
|
||||||
}
|
}
|
||||||
|
@ -1649,7 +1705,7 @@ sub scenario()
|
||||||
}
|
}
|
||||||
if($ShowVersion)
|
if($ShowVersion)
|
||||||
{
|
{
|
||||||
print "URPM Repo Closure Checker $TOOL_VERSION\nCopyright (C) 2012 ROSA Laboratory\nLicense: GPL <http://www.gnu.org/licenses/>\nThis program is free software: you can redistribute it and/or modify it.\n\nWritten by Andrey Ponomarenko.\n";
|
print "URPM Repo Closure Checker $TOOL_VERSION\nCopyright (C) 2012 ROSA Lab\nLicense: GPL <http://www.gnu.org/licenses/>\nThis program is free software: you can redistribute it and/or modify it.\n\nWritten by Andrey Ponomarenko.\n";
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
Name: urpm-tools
|
Name: urpm-tools
|
||||||
Version: 2.2.2
|
Version: 2.2.3
|
||||||
Release: 1
|
Release: 1
|
||||||
Summary: Utilities that help to work with URPM-based repositories
|
Summary: Utilities that help to work with URPM-based repositories
|
||||||
Group: System/Configuration/Packaging
|
Group: System/Configuration/Packaging
|
||||||
|
|
Loading…
Add table
Reference in a new issue