#!/usr/bin/perl -w

package Source::Repository::Mass::GirarCopy;

use strict;
use warnings;
use Carp;
use Getopt::Long;

use Source::Repository::Mass;
use Source::Repository::Mass::ALTLinuxBackport;
use Source::Repository::Mass::SkipPkg::Timestamp;
use Source::Repository::Mass::SkipPkg::IntermediateRepoNotLess;
use Source::Repository::RPM::ALTLinuxSrcList;
# TODO: acl filtered list of packages ?
#use ALTLinux::ACL;

our @ISA = qw/Source::Repository::Mass/;
$Source::Repository::Mass::strategy = 'newer';

$Source::Repository::Mass::SkipPkg::IntermediateRepoNotLess::middlerepo_class='Source::Repository::RPM::ALTLinuxSrcList';
$Source::Repository::Mass::origin_class='Source::Repository::RPM::ALTLinuxSrcList';
$Source::Repository::Mass::dest_class='Source::Repository::RPM::ALTLinuxSrcList';
$Source::Repository::Mass::epoch_comparator=\&Source::Package::Comparators::rpm40_epoch_comparator;
$Source::Repository::Mass::version_comparator=\&Source::Package::Comparators::pure_rpm_version_comparator;
$Source::Repository::Mass::release_comparator=\&Source::Package::Comparators::pure_rpm_release_comparator;

push @Source::Repository::Mass::EXT_LONGOPT_CLASSES, __PACKAGE__;

our $verbose=0;
my $opt_dryrun=0;
our @LONGOPT = (
	"dry-run"	=> \$opt_dryrun,
    );
sub cli_container_ref {
    return ['Source::Repository::Mass'];
}
sub print_longopt {
    print "girar-copymass options:
	--dry-run    print commands instead of exacuting them
";
}

my $convert=Source::Repository::Mass::GirarCopy->new();
$convert->process();

sub init_transaction {
    my ($self,$transaction_name)=@_;
    &__run(qw/ssh girar task new/, $DistroMap::default_destbranch);
}

sub done_transaction {
    my ($self,$transaction_name)=@_;
    my @options;
    push @options, '-m', 'croncopy' if $DistroMap::default_destbranch ne 'sisyphus';
    &__run(qw/ssh girar task run --commit/, @options);
}

sub process_pair {
    my ($self,$rpmmap, $transaction_name, $transaction_count)=@_;
    my @args=(qw/build -m croncopy -b/, $DistroMap::default_destbranch, '--commit');
    @args=(qw/task add/) if defined $transaction_name;
    push @args, qw/copy/, $rpmmap->originname;
    push @args, $DistroMap::default_originbranch if $DistroMap::default_originbranch ne 'sisyphus';
    &__run(qw/ssh girar/, @args);
}

sub __run {
    print STDERR "running: ", join(' ',@_),"\n" if $verbose or $opt_dryrun;
    return if $opt_dryrun;
    system(@_)==0 or Carp::confess "command failed: ".join(' ',@_);
}

1;
