more checks

This commit is contained in:
Stephan Kulow 2013-03-26 16:57:16 +01:00
parent f20dd91f33
commit 3721b2b00f
2 changed files with 76 additions and 18 deletions

View File

@ -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;
$filesc{$f} ||= [ $files{$f} ]; push @implicit_conflicts, $f;
push @{$filesc{$f}}, "implicit_directory 0 0 noarch pkg/0"; }
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} ];
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
if (($modes_type[$m] != 0100000 && $modes_type[$m] != 0120000) || $modes_ghost[$m] == 0100) { for my $m (keys %allm) {
$info = ' [mode mismatch: '.join(', ', map {beautify_mode($_)} @pp).']'; if (($modes_type[$m] != 0100000 && $modes_type[$m] != 0120000) || $modes_ghost[$m] == 0100) {
$info = ' [mode mismatch: '.join(', ', map {beautify_mode($_)} @pp).']';
last;
}
} }
} }
# got one! # got one!

View File

@ -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 $_; $ret = 1;
exit(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);