#!/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.391;
use Source::Repository::Matcher;
use Source::Repository::Matcher::DistroMap;
use Source::Repository::Mass::ALTLinuxBackport;
use Source::Repository::Mass::SkipName::AltFilesList;

our @ISA = qw/Source::Repository::Mass/;
sub _container_arrayref { return ['Source::Repository::Mass'] }

my ($list_only);
my $autoports_mode=$CONFIG{'AUTOREPO_AUTOPORTS_SUFFIX'};
my $verbose=0;
$verbose=1 if $ENV{TERM}; # not to pollute 


$Source::Repository::Mass::ORIGINPATH="$AUTOREPO_ROOT/$AUTOREPO_SHARED_SRPMS";
$Source::Repository::Mass::DESTPATH=$CONFIG{'AUTOREPO_PURGE_DESTPATH'};
$Source::Repository::Mass::Transform::suppress_rename=1;
$Source::Repository::Mass::strategy = 'both';

sub print_longopt {
    print "  Purge options:
	--autoports autoports mode
";
}
our @LONGOPT=(
    'autoports' => \$autoports_mode,
    'list' => \$list_only,
    'q' => sub {$verbose=0},
    'v' => sub {$verbose++},
    );

sub before_process_options {
    my ($self)=@_;
    if (! $autoports_mode) {
	@Source::Repository::Mass::EXT_LONGOPT_CLASSES = grep {$_ ne 'Source::Repository::Mass::ALTLinuxBackport'} @Source::Repository::Mass::EXT_LONGOPT_CLASSES;
    }
}

sub process_options {
    my ($self)=@_;
    #print STDERR "PURGE:process_options: i am called\n";
    if ($autoports_mode) {
	$Source::Repository::Mass::strategy = 'older';
	$Source::Repository::Mass::epoch_comparator=\&Source::Package::Comparators::rpm40_epoch_comparator;
	$Source::Repository::Mass::ALTLinuxBackport::backport_suffix=$CONFIG{'AUTOREPO_AUTOPORTS_SUFFIX'};
	$DistroMap::default_destbranch=$AUTOREPO_BRANCH;
    } else {
	$Source::Repository::Mass::epoch_comparator=\&Source::Package::Comparators::null_epoch_comparator;
	$DistroMap::default_destbranch='sisyphus';
    }

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

my $convert=Source::Repository::AutorepoMassDel->new();

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};
    print STDERR "processing pair: ",$pkgpair->originname,' (',basename($originrpm),') - ',$pkgpair->destname,' (',$pkgpair->dest->{-file},")\n" if $verbose >1;
    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;
