#!/usr/bin/perl

eval 'exec /usr/bin/perl  -S $0 ${1+"$@"}'
    if 0; # not running under some shell
#
# $Id: chkupload,v 1.4 2003/10/04 03:59:20 tvignaud Exp $
#
use strict;
use urpmchecker;


my (@rpms, @fatal, $conf);
my $arch;# = arch();
#$arch =~ /i.86/ and $arch = 'i586';

sub readconf {
    
}


local $_;
while ($_ = shift(@ARGV)) {
    m/^-c$/ and do { $conf = shift(@ARGV); next };
    if (m/^.*-[^\-]*-[^\.].*\.(.*)\.rpm$/) {
        $1 ne 'noarch' && $1 ne 'src' and $arch = $1;
        push @rpms, $_;
    }
}

@rpms or die "Nothing to eat at this junk food !";

my $urpmchecker = urpmchecker->new({ 'arch' => $arch });

open CONF, $conf or die "can't open config file";
while (<CONF>) {
    my $next = 1;
    my ($cmd, @arg) = split;
    $cmd eq 'FATAL' and do { @fatal = @arg; next };
    $cmd eq 'REP' and do {
        foreach (@arg) {
            if (m/^\@$/) {
                foreach (@rpms) {
                    $urpmchecker->add($_, { nextlevel => $next, check => 1, update => 1 });
                    $next = 0;
                }
            } else {
                $urpmchecker->add($_, { nextlevel => $next, check => 0 });
                $next = 0;
            }
        }
    };
            
}
close CONF;


$urpmchecker->parse_list;
$urpmchecker->analyze;
my $reject = 0;

foreach my $err (keys %{$urpmchecker->{error}}) {
    my $idinfo = $urpmchecker->{error}{$err};
    my %tmp;
    foreach my $t (@{$idinfo->{err}}) {
        any { m/$t->{type}/ and $_ } @fatal and $reject++;
		push(@{$tmp{$t->{type}}{sprintf("%s %s", $t->{msgsum}, $t->{fullname})}}, $t->{msg});
	}
    #keys %tmp or next;
    print " $idinfo->{fullname} ($idinfo->{sourcerpm}: $idinfo->{sname}) [$idinfo->{level}]\n";    
	foreach my $type (keys %tmp) {
		foreach my $fullname (keys %{$tmp{$type}}) {
		my $n = scalar @{$tmp{$type}{$fullname}};
		    if ($n > 3) {
				print "    $type: (x$n) $fullname\n";
			} else {
				print join("", map { "    $type: $_ $fullname\n" } @{$tmp{$type}{$fullname}});
			}
		}
	}
}

$reject == 0 and exit 0;
print "Upload Reject: $reject of @fatal error(s) found\n";
exit 1;
