URPM-repoclosure 1.4.3: added --update-hdlists option.

This commit is contained in:
Andrey Ponomarenko 2012-09-14 15:26:55 +04:00
parent 303ac24bc4
commit d780478b03

View file

@ -1,6 +1,6 @@
#!/usr/bin/perl
########################################################
# URPM Repo Closure Checker 1.4.2 for Linux
# URPM Repo Closure Checker 1.4.3 for Linux
# A tool for checking closure of a set of RPM packages
#
# Copyright (C) 2011-2012 ROSA Laboratory
@ -38,12 +38,12 @@ use File::Copy qw(copy move);
use Data::Dumper;
use strict;
my $TOOL_VERSION = "1.4.2";
my $TOOL_VERSION = "1.4.3";
my $CmdName = get_filename($0);
my ($Help, $ShowVersion, $RPMlist, $RPMdir, $StaticMode,
$DynamicMode, $NoClean, $HDlist, $FileDeps, $ReportDir,
$AddRPMs, $RTitle, $DepHDlists);
$AddRPMs, $RTitle, $DepHDlists, $UpdateHDlists);
my $ShortUsage = "URPM Repo Closure Checker $TOOL_VERSION
A tool for checking closure of a set of RPM packages
@ -72,7 +72,8 @@ GetOptions("h|help!" => \$Help,
"noclean!" => \$NoClean,
"report-dir=s" => \$ReportDir,
"title=s" => \$RTitle,
"dep-hdlists=s" => \$DepHDlists
"dep-hdlists=s" => \$DepHDlists,
"update-hdlists=s" => \$UpdateHDlists
) or ERR_MESSAGE();
my %EXIT_CODES = (
@ -135,6 +136,9 @@ OPTIONS:
-dep-hdlists <path>
The list of HDlists that will
be used to resolve dependencies.
-update-hdlists <path>
The list of HDlists from update repositories.
EXIT CODES:
0 - Suceess. The tool has run without any errors
@ -657,13 +661,14 @@ sub readDeps($$$)
}
}
sub readHDlist($$$$)
sub readHDlist($$$$$)
{
my ($Path, $Dep, $RPMdep, $AddedRPMs) = @_;
my ($Path, $Dep, $RPMdep, $Registered, $Kind) = @_;
my $Content = "";
if($Path=~/(http|https|ftp):\/\//)
{
print "Downloading HDlist ...\n";
print "Downloading $Kind HDlist ...\n";
my $DownloadTo = $TMP_DIR."/extract/".get_filename($Path);
$DownloadTo=~s/\.cz/\.gz/g; # cz == gz
my $Dir = get_dirname($DownloadTo);
@ -716,7 +721,14 @@ sub readHDlist($$$$)
}
$Content = readFile($Path);
}
print "Checking HDlist ...\n";
print "Reading $Kind HDlist ...\n";
my $TKind = $Kind;
if($TKind eq "Update") {
$TKind = "Target";
}
my %PkgName = ();
my $Name = "";
foreach (reverse(split(/\n/, $Content)))
{
@ -725,19 +737,28 @@ sub readHDlist($$$$)
my $Type = shift(@Parts);
if($Type eq "info")
{
if($Kind eq "Update")
{
if($Name)
{ # register previous
$Registered->{$TKind}{$PkgName{$Name}} = 1;
}
}
$Name = $Parts[0];
next;
}
if($AddRPMs)
if(my $PName = parse_RPMname($Name))
{
if(my $PName = parse_RPMname($Name))
$PkgName{$Name} = $PName;
if($Kind eq "Target")
{
if($AddedRPMs->{$PName})
if($Registered->{$TKind}{$PName})
{ # already added
next;
}
}
}
if($Type=~/\A(requires|provides|suggests)\Z/)
{
foreach my $D (@Parts)
@ -749,6 +770,13 @@ sub readHDlist($$$$)
}
}
}
if($Kind eq "Update")
{
if($Name)
{ # register last
$Registered->{$TKind}{$PkgName{$Name}} = 1;
}
}
}
sub staticCheck()
@ -758,7 +786,7 @@ sub staticCheck()
print STDERR "ERROR: --hdlist, --dir or --list option should be specified\n";
exit(1);
}
my (%Dep, %RPMdep, %AddedRPMs) = ();
my (%Dep, %RPMdep, %Registered) = ();
my (%Dep_D, %RPMdep_D) = ();
if($AddRPMs)
{
@ -773,11 +801,23 @@ sub staticCheck()
{
readDeps($Path, \%Dep, \%RPMdep);
if(my $Name = get_RPMname($Path)) {
$AddedRPMs{$Name}=1;
$Registered{$Name} = 1;
}
}
}
}
if($UpdateHDlists)
{
if(not -f $UpdateHDlists)
{
print STDERR "ERROR: cannot access \'$UpdateHDlists\'\n";
exit(1);
}
foreach my $Url (split(/\s+/, readFile($UpdateHDlists))) {
readHDlist($Url, \%Dep, \%RPMdep, \%Registered, "Update");
}
}
if($RPMdir or $RPMlist)
{
print "Checking RPMs ...\n";
@ -796,21 +836,18 @@ sub staticCheck()
}
foreach my $Path (@RPMs)
{
if($AddRPMs)
if(my $Name = get_RPMname($Path))
{
if(my $Name = get_RPMname($Path))
{
if($AddedRPMs{$Name})
{ # already added
next;
}
if($Registered{$Name})
{ # already added
next;
}
}
readDeps($Path, \%Dep, \%RPMdep);
}
}
elsif($HDlist) {
readHDlist($HDlist, \%Dep, \%RPMdep, \%AddedRPMs);
readHDlist($HDlist, \%Dep, \%RPMdep, \%Registered, "Target");
}
if($DepHDlists)
@ -821,7 +858,7 @@ sub staticCheck()
exit(1);
}
foreach my $Url (split(/\s+/, readFile($DepHDlists))) {
readHDlist($Url, \%Dep_D, \%RPMdep_D, \%AddedRPMs);
readHDlist($Url, \%Dep_D, \%RPMdep_D, \%Registered, "Dep");
}
}
@ -1045,6 +1082,7 @@ table.report th {
}
table.report td {
text-align:left;
padding-right:15px;
}";
my $Footer = "<hr/><div style='width:99%;font-size:11px;' align='right'><i>Generated on ".(localtime time);