more checks
This commit is contained in:
parent
f20dd91f33
commit
3721b2b00f
@ -142,8 +142,9 @@ close(FL) || die("close failed\n");
|
|||||||
|
|
||||||
# connect dirs and add all dirs as files
|
# connect dirs and add all dirs as files
|
||||||
print "connecting ".@dirs." directories\n";
|
print "connecting ".@dirs." directories\n";
|
||||||
|
my @implicit_conflicts;
|
||||||
for (@dirs) {
|
for (@dirs) {
|
||||||
next unless /^(.*\/)(.*?)$/;
|
next unless /^(.*\/)(.*?)\/$/;
|
||||||
my $n = $dirs{$1};
|
my $n = $dirs{$1};
|
||||||
if (!defined $n) {
|
if (!defined $n) {
|
||||||
$n = @dirs;
|
$n = @dirs;
|
||||||
@ -162,8 +163,61 @@ for (@dirs) {
|
|||||||
$have_dir = 1 if $modes_type[$m] == 040000;
|
$have_dir = 1 if $modes_type[$m] == 040000;
|
||||||
}
|
}
|
||||||
next if $have_dir;
|
next if $have_dir;
|
||||||
|
push @implicit_conflicts, $f;
|
||||||
|
}
|
||||||
|
print "now ".@dirs." directories\n";
|
||||||
|
|
||||||
|
# the old and fast way
|
||||||
|
#
|
||||||
|
#for my $f (@implicit_conflicts) {
|
||||||
|
# $filesc{$f} ||= [ $files{$f} ];
|
||||||
|
# push @{$filesc{$f}}, "implicit_directory 0 0 noarch pkg/0";
|
||||||
|
#}
|
||||||
|
|
||||||
|
if (@implicit_conflicts) {
|
||||||
|
print "have implicit conflicts, calculating dir owners\n";
|
||||||
|
my @pdirs; # parent dirs
|
||||||
|
for (@dirs) {
|
||||||
|
next unless /^(.*\/)(.*?)\/$/;
|
||||||
|
$pdirs[$dirs{$_}] = $dirs{$1};
|
||||||
|
}
|
||||||
|
my %baddir;
|
||||||
|
for (@implicit_conflicts) {
|
||||||
|
my ($n, $x) = split('/', $_, 2);
|
||||||
|
$baddir{$dirs{"$dirs[$n]$x/"}} = $_;
|
||||||
|
}
|
||||||
|
my $done;
|
||||||
|
while (!$done) {
|
||||||
|
$done = 1;
|
||||||
|
my $i = -1;
|
||||||
|
for (@pdirs) {
|
||||||
|
$i++;
|
||||||
|
next unless defined $_;
|
||||||
|
next unless $baddir{$_} && !$baddir{$i};
|
||||||
|
$baddir{$i} ||= $baddir{$_};
|
||||||
|
undef $done;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
undef @pdirs;
|
||||||
|
# this is not cheap, sorry
|
||||||
|
my %baddir_pkgs;
|
||||||
|
for my $ff (keys %files) {
|
||||||
|
my ($n, undef) = split('/', $ff, 2);
|
||||||
|
next unless $baddir{$n};
|
||||||
|
if (!$filesc{$ff}) {
|
||||||
|
my ($pkg, undef) = split('/', $files{$ff}, 2);
|
||||||
|
$baddir_pkgs{$baddir{$n}}->{"$pkg/0"} = 1;
|
||||||
|
} else {
|
||||||
|
for (@{$filesc{$ff} || []}) {
|
||||||
|
my ($pkg, undef) = split('/', $_, 2);
|
||||||
|
$baddir_pkgs{$baddir{$n}}->{"$pkg/0"} = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for my $f (sort keys %baddir_pkgs) {
|
||||||
$filesc{$f} ||= [ $files{$f} ];
|
$filesc{$f} ||= [ $files{$f} ];
|
||||||
push @{$filesc{$f}}, "implicit_directory 0 0 noarch pkg/0";
|
push @{$filesc{$f}}, sort keys %{$baddir_pkgs{$f}};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
%files = (); # free mem
|
%files = (); # free mem
|
||||||
@ -250,10 +304,12 @@ for my $tc (sort keys %tocheck) {
|
|||||||
# no conflict if all dirs or all ghosts
|
# no conflict if all dirs or all ghosts
|
||||||
next if $modes_type[$m] == 040000 || $modes_ghost[$m] == 0100;
|
next if $modes_type[$m] == 040000 || $modes_ghost[$m] == 0100;
|
||||||
} else {
|
} else {
|
||||||
my $m = (keys(%allm))[0];
|
|
||||||
# don't report mode mismatches for files/symlinks that are not ghosts
|
# don't report mode mismatches for files/symlinks that are not ghosts
|
||||||
|
for my $m (keys %allm) {
|
||||||
if (($modes_type[$m] != 0100000 && $modes_type[$m] != 0120000) || $modes_ghost[$m] == 0100) {
|
if (($modes_type[$m] != 0100000 && $modes_type[$m] != 0120000) || $modes_ghost[$m] == 0100) {
|
||||||
$info = ' [mode mismatch: '.join(', ', map {beautify_mode($_)} @pp).']';
|
$info = ' [mode mismatch: '.join(', ', map {beautify_mode($_)} @pp).']';
|
||||||
|
last;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
# got one!
|
# got one!
|
||||||
|
@ -13,6 +13,7 @@ use Rpm;
|
|||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
|
my $ret = 0;
|
||||||
my $dir = $ARGV[0];
|
my $dir = $ARGV[0];
|
||||||
my %toignore;
|
my %toignore;
|
||||||
foreach my $name (split(/,/, $ARGV[1])) {
|
foreach my $name (split(/,/, $ARGV[1])) {
|
||||||
@ -21,14 +22,14 @@ foreach my $name (split(/,/, $ARGV[1])) {
|
|||||||
|
|
||||||
if (! -f "$dir/rpmlint.log") {
|
if (! -f "$dir/rpmlint.log") {
|
||||||
print "Couldn't find a rpmlint.log in the build results. This is mandatory\n";
|
print "Couldn't find a rpmlint.log in the build results. This is mandatory\n";
|
||||||
exit(1);
|
$ret = 1;
|
||||||
}
|
} else {
|
||||||
|
open(GREP, "grep 'W:.*invalid-lcense ' $dir/rpmlint.log |");
|
||||||
open(GREP, "grep 'W:.*invalid-lcense ' $dir/rpmlint.log |");
|
while ( <GREP> ) {
|
||||||
while ( <GREP> ) {
|
|
||||||
print "Found rpmlint warning: ";
|
print "Found rpmlint warning: ";
|
||||||
print $_;
|
print $_;
|
||||||
exit(1);
|
$ret = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
my %targets;
|
my %targets;
|
||||||
@ -179,8 +180,8 @@ while ( <INSTALL> ) {
|
|||||||
last if (m/^can't install /);
|
last if (m/^can't install /);
|
||||||
print "$_";
|
print "$_";
|
||||||
}
|
}
|
||||||
close(INSTALL);
|
$ret = 1;
|
||||||
exit(1);
|
last;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -194,10 +195,11 @@ while ( <INSTALL> ) {
|
|||||||
if ($_ =~ m/found conflict of (\S+) .* with (\S+) /) {
|
if ($_ =~ m/found conflict of (\S+) .* with (\S+) /) {
|
||||||
if (defined $targets{$1} || defined $targets{$2}) {
|
if (defined $targets{$1} || defined $targets{$2}) {
|
||||||
print "FC $1 $2\n";
|
print "FC $1 $2\n";
|
||||||
exit(1);
|
$ret = 1;
|
||||||
|
last;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
close(INSTALL);
|
close(INSTALL);
|
||||||
|
|
||||||
exit(0);
|
exit($ret);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user