#!/usr/bin/perl

use RPM::Header;
use DBI;
require "config";

foreach (@rpm_root) {
	opendir (DIR,$_) || die "cant open $_\n";
	@list = sort grep {/\.rpm$/} readdir(DIR);
	closedir(DIR);
	@list = &deleteDup(\@list);
	foreach $rpm ( @list ){
		$rpm = $_."/".$rpm;
	}
	push @flist, @list;
}

print "Begin to read ".($#flist+1)." rpm\n";

$dbh = DBI->connect($dsn,$dbUser,$dbPass) || die "cant connect to mysql\n";

$sth = $dbh->prepare("SELECT name, CONCAT(version,'-',release) FROM rpm");
$sth->execute();
while (@row = $sth->fetchrow_array){
	$oldR{$row[0]} = $row[1];
}

$i = 0;

foreach $rpm (@flist){ 
	tie %hdr, "RPM::Header", $rpm or die "$RPM::err";
	
	$sth = $dbh->prepare("SELECT id from groups WHERE rpmgroup=? LIMIT 1");
	$sth->execute($hdr{"GROUP"});
	$grp = $sth->fetchrow_array;

	($nameSRPM) = ($hdr{"SOURCERPM"} =~ /^(.+)\-[^\-]+\-[^\-]+\.src\.rpm$/ );
	$sth = $dbh->prepare("SELECT count(*) FROM srpm WHERE name=?");
	$sth->execute($nameSRPM);
	$srpm = $sth->fetchrow_array;

	unless ($grp && $srpm) {
		unless ($grp){
			print $hdr{"NAME"}." - invalid group: ".$hdr{"GROUP"}."\n";
		}
		unless ($srpm){
			print $hdr{"NAME"}." - invalid srpm: ".$hdr{"SOURCERPM"}."\n";
		}
		untie %hdr;
		next;
	}

	if (exists $oldR{$hdr{'NAME'}} &&
		$oldR{$hdr{'NAME'}} eq $hdr{'VERSION'}."-".$hdr{'RELEASE'}) {
		untie %hdr;
		next;
	}

	$optflags = join(" ",@{$hdr{"OPTFLAGS"}});
	$sth = $dbh->prepare("REPLACE rpm VALUES(?,?,?,?,?,?,?,?,?)");
	$sth->execute(
		$nameSRPM, $hdr{"NAME"},$hdr{"VERSION"},$hdr{"RELEASE"},
		$hdr{"GROUP"},$hdr{"ARCHIVESIZE"},$hdr{"SUMMARY"},
		$hdr{"DESCRIPTION"},$optflags
		);

	untie %hdr;
}
