#!/usr/bin/perl

# Update the size and files fields of a series list

$infile = $ARGV[0];

$total = 0;
$rpp_dir = "/mnt/rhscd/rpps";

sub check_rpp {
    local ( $name, $version, $type ) = @_;

    # handle '+' in the name
    $name =~ s/\+/\\\+/g;

    opendir(D, $rpp_dir);
    @files = readdir(D);
    @matches = grep(m/^$name-.*-$type\.rpp/, sort(@files));
    closedir(D);

    if (@matches > 1) {
	print "VERSION WARNING: @matches\n";
	print "VERSION WARNING: using $version\n";
    }
    if (@matches < 1) {
	print "RPP MISSING: $name-$version-$type.rpp\n";
    }
}

open(FD,$infile) || die "Couldn't open $infile";
$tmpfile = "$infile.new";
open(FDB,">$tmpfile") || die "Couldn't open temp file";

$line = "";
while ($line ne "XXX") {
    $line = <FD>;
    print FDB $line;
    chop $line;
}

while (<FD>) {
    chop;
    ($name, $version, $type) = split;
    &check_rpp($name, $version, $type);
    $package = "$name-$version-$type.rpp";
    open(HD, "rpp-query -lp $rpp_dir/$package |");
    $_ = <HD>;
    chop;
    @info = split;
    $total += $info[3];

    $count = 0;
    while (<HD>) {
	$count++;
    }

    printf FDB "%-24s$version\t$type\t$info[3]\t$count\n", $name;

    close HD;
}

close(FD);
close(FDB);

open(FDB, $tmpfile);
open(FD, ">$infile") || die "Couldn't open $infile for writing";
$line = <FDB>;
print FD $line;
$line = <FDB>;
print FD $line;
$line = <FDB>;
print FD "$total\n";
print FD <FDB>;

unlink($tmpfile);
printf "$infile: $total\n";
