mirror of
https://abf.rosa.ru/djam/urpm-tools.git
synced 2025-02-23 09:22:47 +00:00
URPM-repoclosure 1.8: links to update repositories in the profile are not necessary now
This commit is contained in:
parent
2d05f43b01
commit
b505672f07
1 changed files with 73 additions and 58 deletions
|
@ -1,14 +1,14 @@
|
|||
#!/usr/bin/perl
|
||||
########################################################
|
||||
# URPM Repo Closure Checker 1.7.4 for Linux
|
||||
# URPM Repo Closure Checker 1.8 for Linux
|
||||
# A tool for checking closure of a set of RPM packages
|
||||
#
|
||||
# Copyright (C) 2011-2014 ROSA Lab
|
||||
# Copyright (C) 2011-2014 NTC IT ROSA
|
||||
# Written by Andrey Ponomarenko
|
||||
#
|
||||
# PLATFORMS
|
||||
# =========
|
||||
# Linux (ROSA, Mandriva, Mageia)
|
||||
# Linux (ROSA, OpenMandriva)
|
||||
#
|
||||
# REQUIREMENTS
|
||||
# ============
|
||||
|
@ -38,17 +38,17 @@ use File::Copy qw(copy move);
|
|||
use Data::Dumper;
|
||||
use strict;
|
||||
|
||||
my $TOOL_VERSION = "1.7.4";
|
||||
my $TOOL_VERSION = "1.8";
|
||||
my $CmdName = get_filename($0);
|
||||
|
||||
my ($Help, $ShowVersion, $RPMlist, $RPMdir, $StaticMode,
|
||||
$DynamicMode, $NoClean, $HDlist, $FileDeps, $ReportDir,
|
||||
$AddRPMs, $RTitle, $DepHDlists, $UpdateHDlists, $Profile,
|
||||
$Target, $ExtInfo, $UseCache);
|
||||
$AddRPMs, $RTitle, $DepHDlists, $Profile, $Target,
|
||||
$ExtInfo, $UseCache);
|
||||
|
||||
my $ShortUsage = "URPM Repo Closure Checker $TOOL_VERSION
|
||||
A tool for checking closure of a set of RPM packages
|
||||
Copyright (C) 2014 ROSA Lab
|
||||
Copyright (C) 2014 NTC IT ROSA
|
||||
License: GNU GPL
|
||||
|
||||
Usage: $CmdName [options]
|
||||
|
@ -74,7 +74,6 @@ GetOptions("h|help!" => \$Help,
|
|||
"report-dir=s" => \$ReportDir,
|
||||
"title=s" => \$RTitle,
|
||||
"dep-hdlists=s" => \$DepHDlists,
|
||||
"update-hdlists=s" => \$UpdateHDlists,
|
||||
"profile=s" => \$Profile,
|
||||
"cache!" => \$UseCache,
|
||||
"target=s" => \$Target,
|
||||
|
@ -96,7 +95,7 @@ USAGE:
|
|||
$CmdName --hdlist=http://mirror.yandex.ru/mandriva/.../synthesis.hdlist.cz
|
||||
$CmdName --dir=rpms/ --static --file-deps=file-deps.txt
|
||||
$CmdName --list=list.txt --dynamic
|
||||
$CmdName --profile=profile.xml
|
||||
$CmdName --profile=profile.xml --target=rosa2014.1/i586/main
|
||||
|
||||
OPTIONS:
|
||||
-h|-help
|
||||
|
@ -143,9 +142,6 @@ OPTIONS:
|
|||
The list of HDlists that will
|
||||
be used to resolve dependencies.
|
||||
|
||||
-update-hdlists <path>
|
||||
The list of HDlists from update repositories.
|
||||
|
||||
-profile <path>
|
||||
Profile of the test run.
|
||||
|
||||
|
@ -181,18 +177,12 @@ PROFILE FORMAT:
|
|||
http://abf.rosalinux.ru/downloads/rosa2012lts/repository/i586/contrib/release/media_info/synthesis.hdlist.cz
|
||||
</hdlist>
|
||||
|
||||
<updates>
|
||||
http://abf.rosalinux.ru/downloads/rosa2012lts/repository/i586/contrib/updates/media_info/synthesis.hdlist.cz
|
||||
</updates>
|
||||
|
||||
<deps>
|
||||
http://abf.rosalinux.ru/downloads/rosa2012lts/repository/i586/main/release/media_info/synthesis.hdlist.cz
|
||||
http://abf.rosalinux.ru/downloads/rosa2012lts/repository/i586/main/updates/media_info/synthesis.hdlist.cz
|
||||
</deps>
|
||||
|
||||
<info>
|
||||
http://abf.rosalinux.ru/downloads/rosa2012lts/repository/i586/contrib/release/media_info/info.xml.lzma
|
||||
http://abf.rosalinux.ru/downloads/rosa2012lts/repository/i586/contrib/updates/media_info/info.xml.lzma
|
||||
</info>
|
||||
</repos>
|
||||
|
||||
|
@ -336,7 +326,9 @@ sub installPackage($)
|
|||
$Cmd .= " --root=\"$TMP_DIR/root\"";
|
||||
$Cmd .= " --noclean --auto --force";
|
||||
$Cmd .= " $Package";
|
||||
|
||||
print "Running $Cmd\n";
|
||||
|
||||
my $LogPath = $TMP_DIR."/ilog.txt";
|
||||
system($Cmd." >$LogPath 2>&1");
|
||||
my $Log = readFile($LogPath);
|
||||
|
@ -562,7 +554,7 @@ sub readRPMlist($$)
|
|||
my ($Path, $Type) = @_;
|
||||
if(not -f $Path)
|
||||
{
|
||||
print STDERR "ERROR: cannot access \'$Path\'\n";
|
||||
print STDERR "ERROR: can't access \'$Path\'\n";
|
||||
exit(1);
|
||||
}
|
||||
my @RPMs = split(/\s+/, readFile($Path));
|
||||
|
@ -581,7 +573,7 @@ sub readRPMlist($$)
|
|||
}
|
||||
elsif(not -f $P)
|
||||
{
|
||||
print STDERR "ERROR: cannot access \'$P\'\n";
|
||||
print STDERR "ERROR: can't access \'$P\'\n";
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
@ -603,7 +595,7 @@ sub dynamicCheck()
|
|||
{ # --dir option
|
||||
if(not -d $RPMdir)
|
||||
{
|
||||
print STDERR "ERROR: cannot access \'$RPMdir\'\n";
|
||||
print STDERR "ERROR: can't access \'$RPMdir\'\n";
|
||||
exit(1);
|
||||
}
|
||||
@RPMs = searchRPMs($RPMdir);
|
||||
|
@ -782,9 +774,9 @@ sub getCachedFile($)
|
|||
return undef;
|
||||
}
|
||||
|
||||
sub downloadFile($)
|
||||
sub downloadFile($$)
|
||||
{
|
||||
my $Url = $_[0];
|
||||
my ($Url, $Kind) = @_;
|
||||
|
||||
if($UseCache)
|
||||
{
|
||||
|
@ -801,8 +793,11 @@ sub downloadFile($)
|
|||
if(not -f $DownloadTo
|
||||
or not -s $DownloadTo)
|
||||
{
|
||||
print STDERR "ERROR: cannot access \'$Url\'\n";
|
||||
exit(1);
|
||||
if($Kind ne "Update") {
|
||||
print STDERR "ERROR: can't access \'$Url\'\n";
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
my %Extract = (
|
||||
|
@ -819,7 +814,7 @@ sub downloadFile($)
|
|||
my @Files = cmd_find($Dir, "f", "", "");
|
||||
if(not @Files)
|
||||
{
|
||||
print STDERR "ERROR: cannot extract \'$Url\'\n";
|
||||
print STDERR "ERROR: can't extract \'$Url\'\n";
|
||||
exit(1);
|
||||
}
|
||||
unlink($DownloadTo);
|
||||
|
@ -834,20 +829,29 @@ sub downloadFile($)
|
|||
return $DownloadTo;
|
||||
}
|
||||
|
||||
sub readInfo($$)
|
||||
sub readInfo($$$)
|
||||
{
|
||||
my ($Path, $Info) = @_;
|
||||
my ($Path, $Info, $Kind) = @_;
|
||||
|
||||
if($Kind eq "Update") {
|
||||
$Path=~s#/release/#/updates/#g;
|
||||
}
|
||||
|
||||
my $Content = "";
|
||||
if($Path=~/(http|https|ftp):\/\//)
|
||||
{
|
||||
print "Downloading Info ...\n";
|
||||
$Path = downloadFile($Path);
|
||||
print "Downloading $Kind Info ...\n";
|
||||
$Path = downloadFile($Path, $Kind);
|
||||
|
||||
if(not $Path) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(not -f $Path)
|
||||
{
|
||||
print STDERR "ERROR: cannot access \'$Path\'\n";
|
||||
print STDERR "ERROR: can't access \'$Path\'\n";
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
@ -869,7 +873,7 @@ sub readInfo($$)
|
|||
{
|
||||
if(index($_, "sourcerpm=")!=-1)
|
||||
{
|
||||
if(/sourcerpm=\'(.+?)\'/)
|
||||
if(/sourcerpm=[\'\"](.+?)[\'\"]/)
|
||||
{
|
||||
my $SRPM = $1;
|
||||
$SRPM=~s/\.src\.rpm//g;
|
||||
|
@ -890,11 +894,26 @@ sub readHDlist($$$$$)
|
|||
{
|
||||
my ($Path, $Dep, $RPMdep, $Registered, $Kind) = @_;
|
||||
|
||||
if($Kind eq "Update") {
|
||||
$Path=~s#/release/#/updates/#g;
|
||||
}
|
||||
|
||||
my $Content = "";
|
||||
if($Path=~/(http|https|ftp):\/\//)
|
||||
{
|
||||
print "Downloading $Kind HDlist ...\n";
|
||||
my $DownloadTo = downloadFile($Path);
|
||||
my $DownloadTo = downloadFile($Path, $Kind);
|
||||
|
||||
if(not $DownloadTo)
|
||||
{
|
||||
if($Kind eq "Update") {
|
||||
return "";
|
||||
}
|
||||
else {
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
if(my $Line = readLineNum($DownloadTo, 1))
|
||||
{
|
||||
if($Line!~/\A\@\w+\@/)
|
||||
|
@ -909,7 +928,7 @@ sub readHDlist($$$$$)
|
|||
{
|
||||
if(not -f $Path)
|
||||
{
|
||||
print STDERR "ERROR: cannot access \'$Path\'\n";
|
||||
print STDERR "ERROR: can't access \'$Path\'\n";
|
||||
exit(1);
|
||||
}
|
||||
$Content = readFile($Path);
|
||||
|
@ -987,7 +1006,11 @@ sub staticCheck()
|
|||
if($ExtInfo)
|
||||
{
|
||||
foreach my $Url (split(/\s+/, readFile($ExtInfo))) {
|
||||
readInfo($Url, \%AddInfo);
|
||||
readInfo($Url, \%AddInfo, "Update");
|
||||
}
|
||||
|
||||
foreach my $Url (split(/\s+/, readFile($ExtInfo))) {
|
||||
readInfo($Url, \%AddInfo, "Target");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -997,7 +1020,7 @@ sub staticCheck()
|
|||
{
|
||||
if(not -d $AddRPMs)
|
||||
{
|
||||
print STDERR "ERROR: cannot access \'$AddRPMs\'\n";
|
||||
print STDERR "ERROR: can't access \'$AddRPMs\'\n";
|
||||
exit(1);
|
||||
}
|
||||
if(my @AddedRPMs = searchRPMs($AddRPMs))
|
||||
|
@ -1011,18 +1034,6 @@ sub staticCheck()
|
|||
}
|
||||
}
|
||||
}
|
||||
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";
|
||||
|
@ -1031,7 +1042,7 @@ sub staticCheck()
|
|||
{
|
||||
if(not -d $RPMdir)
|
||||
{
|
||||
print STDERR "ERROR: cannot access \'$RPMdir\'\n";
|
||||
print STDERR "ERROR: can't access \'$RPMdir\'\n";
|
||||
exit(1);
|
||||
}
|
||||
@RPMs = searchRPMs($RPMdir);
|
||||
|
@ -1051,7 +1062,9 @@ sub staticCheck()
|
|||
readDeps($Path, \%Dep, \%RPMdep);
|
||||
}
|
||||
}
|
||||
elsif($HDlist) {
|
||||
elsif($HDlist)
|
||||
{
|
||||
readHDlist($HDlist, \%Dep, \%RPMdep, \%Registered, "Update");
|
||||
readHDlist($HDlist, \%Dep, \%RPMdep, \%Registered, "Target");
|
||||
}
|
||||
|
||||
|
@ -1059,9 +1072,14 @@ sub staticCheck()
|
|||
{
|
||||
if(not -f $DepHDlists)
|
||||
{
|
||||
print STDERR "ERROR: cannot access \'$DepHDlists\'\n";
|
||||
print STDERR "ERROR: can't access \'$DepHDlists\'\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
foreach my $Url (split(/\s+/, readFile($DepHDlists))) {
|
||||
readHDlist($Url, \%Dep_D, \%RPMdep_D, \%Registered, "Update");
|
||||
}
|
||||
|
||||
foreach my $Url (split(/\s+/, readFile($DepHDlists))) {
|
||||
readHDlist($Url, \%Dep_D, \%RPMdep_D, \%Registered, "Dep");
|
||||
}
|
||||
|
@ -1072,7 +1090,7 @@ sub staticCheck()
|
|||
{
|
||||
if(not -f $FileDeps)
|
||||
{
|
||||
print STDERR "ERROR: cannot access \'$FileDeps\'\n";
|
||||
print STDERR "ERROR: can't access \'$FileDeps\'\n";
|
||||
exit(1);
|
||||
}
|
||||
%IgnoreDeps = map {$_=>1} split(/\s+/, readFile($FileDeps));
|
||||
|
@ -1538,7 +1556,7 @@ sub checkProfile()
|
|||
while(my $Repos = parseTag(\$Content, "repos"))
|
||||
{
|
||||
my %Info = ();
|
||||
foreach my $Tag ("distr", "name", "arch", "section", "hdlist", "updates", "deps", "info") {
|
||||
foreach my $Tag ("distr", "name", "arch", "section", "hdlist", "deps", "info") {
|
||||
$Info{$Tag} = parseTag(\$Repos, $Tag);
|
||||
}
|
||||
|
||||
|
@ -1549,7 +1567,6 @@ sub checkProfile()
|
|||
}
|
||||
|
||||
writeFile("dep.hdlists", $Info{"deps"});
|
||||
writeFile("update.hdlists", $Info{"updates"});
|
||||
writeFile("info.hdlists", $Info{"info"});
|
||||
|
||||
my $Cmd = "perl $0";
|
||||
|
@ -1563,9 +1580,6 @@ sub checkProfile()
|
|||
if($Info{"deps"}) {
|
||||
$Cmd .= " --dep-hdlists=dep.hdlists";
|
||||
}
|
||||
if($Info{"updates"}) {
|
||||
$Cmd .= " --update-hdlists=update.hdlists";
|
||||
}
|
||||
if($Info{"info"} and $Info{"arch"} ne "SRPMS") {
|
||||
$Cmd .= " --info=info.hdlists";
|
||||
}
|
||||
|
@ -1587,6 +1601,7 @@ sub checkProfile()
|
|||
}
|
||||
unlink("dep.hdlists");
|
||||
unlink("update.hdlists");
|
||||
unlink("info.hdlists");
|
||||
|
||||
my $Content = readFile($Info{"TXT"});
|
||||
|
||||
|
@ -1722,7 +1737,7 @@ sub scenario()
|
|||
}
|
||||
if($ShowVersion)
|
||||
{
|
||||
print "URPM Repo Closure Checker $TOOL_VERSION\nCopyright (C) 2014 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";
|
||||
print "URPM Repo Closure Checker $TOOL_VERSION\nCopyright (C) 2014 NTC IT ROSA\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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue