#!/usr/bin/perl -w
use strict;
my $HOME      = $ENV{HOME};
my $SRC_DIR   = $HOME . "/RPM/SRPMS";
my $LOG_DIR   = $HOME . "/RPM/SRPMS/logs";
my $ERROR_DIR = $HOME . "/RPM/SRPMS/error";

mkdir $LOG_DIR;
mkdir $ERROR_DIR;

chdir $SRC_DIR;

sub build_pkg($$);

while (1) {
    my @srpms = glob("$SRC_DIR/*.src.rpm");
    foreach my $pkg (@srpms) {
        my $rc1 = build_pkg( $pkg, 'i586' );
        my $rc2 = build_pkg( $pkg, 'x86_64' );

        if ( $rc1 and $rc2 ) {
            unlink $pkg;
        }
        else {
            my $fn = $pkg;
            $fn =~ s/^.*\///;
            unlink "$ERROR_DIR/$fn";
            rename( $pkg, "$ERROR_DIR/$fn" ) || die "$@$!";
        }
    }
    sleep 1;
}

sub get_logname($$) {
    my $pkg  = shift;
    my $arch = shift;
    my $fn   = $pkg;
    $fn =~ s/^.*\///;
    my $name = $fn;
    $name =~ s/.src.rpm$//;
    my $date = `date -I`;
    chomp $date;
    return "$name.$arch.$date.log";
}

sub build_pkg($$) {
    local $| = 1;
    my $pkg  = shift;
    my $arch = shift;
    my $fn   = $pkg;
    $fn =~ s/^.*\///;
    my $name = $fn;
    $name =~ s/.src.rpm$//;
    my $date = `date -I`;
    chomp $date;
    my $logfile = get_logname( $pkg, $arch );
    my $rc      = 1;

    my $license = `rpm -qp --qf '%{LICENSE}' "$pkg"`;
    chomp $license;
    my $pocket = 'sisyphus';
    if ( $license =~ /internal/i ) {
        $pocket = 'internal';
    }

    my $repo = $ENV{HOME} . "/repo/" . $pocket;

    print "$name ($arch) into $pocket pocket...";

    if ( $arch eq 'x86_64' ) {
`hsh --repo="$repo" -v "$pkg" 2>> $LOG_DIR/$logfile >> $LOG_DIR/$logfile`;
        $rc = $?;
    }
    else {
`i586 hsh --repo="$repo" -v "$pkg" 2>> $LOG_DIR/$logfile >> $LOG_DIR/$logfile`;
        $rc = $?;
    }
    if ( $rc == 0 ) {
        print "Ok\n";
        return 1;
		`h-cleanup-dups -f ~/repo/$pocket > /dev/null`;
		`h-cleanup-pocket ~/repo/$pocket`;
		`h-gen ~/repo/$pocket`;
    }
    unlink "$ERROR_DIR/$logfile";
    rename "$LOG_DIR/$logfile", "$ERROR_DIR/$logfile";
    print "Error\n";
    return '';
}

