#!/usr/bin/perl -w

package Source::Repository::AutorepoMassDel;

use strict;
use warnings;
use Carp;
use File::Basename;
use Getopt::Long;
use RPM::Header;
use File::Find;

use Autorepo::Config;

use Source::Repository::Mass 0.05;
use Source::Repository::Matcher;
use Source::Repository::Matcher::DistroMap;
use Source::Repository::Mass::ALTLinuxBackport;
our @ISA = qw/Source::Repository::Mass/;

my ($list_only);
my $autoports_mode=$CONFIG{'AUTOREPO_AUTOPORTS_SUFFIX'};
my $verbose=1;
my $result = GetOptions (
    'autoports' => \$autoports_mode,
    'list' => \$list_only,
    'q' => sub {$verbose=0},
);

$Source::Repository::Mass::ORIGINPATH=$AUTOREPO_FILES_SRPMS;
$Source::Repository::Mass::DESTPATH=$CONFIG{'AUTOREPO_PURGE_DESTPATH'};
$Source::Repository::Mass::Transform::suppress_rename=1;

if ($autoports_mode) {
    @ISA = qw/Source::Repository::Mass::ALTLinuxBackport/;
    $Source::Repository::Mass::strategy = 'older';
    $Source::Repository::Mass::ALTLinuxBackport::backport_suffix=$CONFIG{'AUTOREPO_AUTOPORTS_SUFFIX'};
    $Source::Repository::Mass::ALTLinuxBackport::destbranch=$AUTOREPO_BRANCH;
} else {
    @ISA = qw/Source::Repository::Mass/;
    $Source::Repository::Mass::strategy = 'both';
    $DistroMap::default_destbranch='sisyphus';
}

my @NAMES;
foreach (glob ("$AUTOREPO_FILES_SRPMS/*.src.rpm")) {
    my $href = new RPM::Header $_;
    push @NAMES, $href->{NAME};
}

my $convert=Source::Repository::AutorepoMassDel->new(
    -packages => \@NAMES,
    );

my %OLDSRPM;
my @OLDRPM;

$convert->process();

find(\&wanted, @AUTOREPO_RPM_DIRS);

unlink @OLDRPM unless $list_only;
#map {print "rpm: $_\n"} @OLDRPM;

my @deprecated_srpms=sort (keys(%OLDSRPM));
unless (@deprecated_srpms) {
    print "No deprecated src.rpms found.\n" if $verbose;
} else {
    print "Deprecated:\n";
    foreach my $srpm (@deprecated_srpms) {
	print "$srpm\n";
	unlink $OLDSRPM{$srpm}, map {"$_/$srpm"} @AUTOREPO_SRPM_LINKDIRS unless $list_only;
    }
    system ('autorepo-rebuild-repository') unless $list_only;
}

sub process_pair {
    my ($self,$pkgpair,$transaction_name,$transaction_count)=@_;
    my $originrpm=$pkgpair->origin->{-file};
    die "Oops: no file for ".$pkgpair->originname if not $originrpm;
    $OLDSRPM{basename($originrpm)}=$originrpm;
}

sub wanted {
    return unless $File::Find::name and -f $File::Find::name;
    my $href = new RPM::Header $File::Find::name;
    die "Oops: not an rpm ".$File::Find::name unless $href;
    die "Oops: no srpm info ".$File::Find::name unless $href->{SOURCERPM};
    push @OLDRPM, $File::Find::name if $OLDSRPM{$href->{SOURCERPM}};
}

1;
