#!/usr/bin/perl -w
use DB_File;
use RPM::Header;
use Fcntl;

sub rpm_get_header($$);

die "Use: h-cleanup-pocket <pocket dir>" unless defined $ARGV[0];
die "Pocket not found: $ARGV[0]" unless -d $ARGV[0];
my $pocket = $ARGV[0];
chdir($pocket) || die;

# Этап 1 -- ищем src.rpm с аналогичными именами в Сизифе
# !!! перед этим этапом рекомендуется удалить устаревшие пакеты
# с помощью h-cleanup-dups
{
    my $sisyphus = '/var/lib/altlinux/sisyphus/files/SRPMS/';
    my @srpms    = glob("SRPMS.*/*.src.rpm");
    foreach (@srpms) {
        my $path = $_;
        my $name = $path;
        $name =~ s/^.*\///;
        if ( -e $sisyphus . $name ) {
            my $t_s = ( stat( $sisyphus . $name ) )[9];
            my $t_r = ( stat($path) )[9];

   # если в Сизифе более новая сборка -- значит
   # мы уже отправили свою на сборку
            next if $t_s < $t_r;
            my $p_s = rpm_get_header( $sisyphus . $name, 'PACKAGER' );
            my $p_r = rpm_get_header( $path,             'PACKAGER' );

# если собирали разные мантейнеры, то это пропускаем
            next if $p_s ne $p_r;

# все тесты пройдены успешно -- значит этот пакет можно
# просто удалить
            unlink $path;
            print "$name\n";
        }
    }
}

my %hash;
my $filename = "cache.db";

my $db = tie( %hash, 'DB_File', $filename, O_RDWR | O_CREAT, 0666, $DB_HASH )
  or die "Cannot open $filename: $!\n";

my @srpms = glob("SRPMS.*/*.src.rpm");
my %srpms;

foreach (@srpms) {
    my $f = $_;
    $f =~ s/^.*\///;
    $srpms{$f}++;
}

my @rpms = glob("*/RPMS.*/*.rpm");

sub rpm_get_header($$) {
    my $fn     = shift;
    my $header = shift;
    my $fh;
    open( $fh, "< $fn" ) || die;
    my $hdr = new RPM::Header( \$fh ) or die "$RPM::err";
    my $rc = $hdr->{$header};
    close($fh);
    return $rc;
}

# load RPMs to cache
foreach (@rpms) {
    next if defined( $hash{$_} );
    my $srcrpm;
    {
        open( IN, "< $_" );
        my $hdr = new RPM::Header( \*IN ) or die "$RPM::err";
        $srcrpm = $hdr->{SOURCERPM};
        close(IN);
    }
    $hash{$_} = $srcrpm;
}

foreach (@rpms) {
    unlink $_ unless defined $srpms{ $hash{$_} };
}

$db->sync();
undef $db;
untie %hash;
